Java 34

[Reactor] Context

Context프로그래밍 세계에서의 Context는 어떠한 상황을 처리하거나 해결하기 위해 필요한 정보를 제공하는 어떤 것ex) Spring Security에서 SecurityContextHolder는 SecurityContext를 관리하는 주체, 여기서의 SecurityContext는 애플리케이션 사용자의 인증 정보를 제공하는 인터페이스ex) Spring Framework에서 ApplicationContext는 애플리케이션의 정보를 제공하는 인터페이스로 ApplicationContext에서 제공하는 대표적인 정보가 Spring Bean Reactor에서 Context는 각 리액티브 시퀀스의 실행 시점에 관련된 데이터를 보관할 수 있는 불변 데이터 구조Map과 유사한 key-value 쌍의 형태로 데이터를..

[Reactor] Scheduler

SchedulerOS에서 사용되는 Scheduler와 의미가 비슷OS 레벨에서의 Scheduler는 실행되는 프로그램인 프로세스를 선택하고 실행하는 등 프로세스의 라이프 사이클을 관리해 주는 관리자 역할Reactor의 Scheduler는 비동기 프로그래밍을 위해 사용되는 쓰레드를 관리해 주는 역할Scheduler를 사용하여 어떤 쓰레드에서 무엇을 처리할지 제어Reactor Scheduler를 사용하면 코드 자체가 매우 간결해지고 Scheduler가 쓰레드의 제어를 대신해 주기 때문에 멀티 쓰레드 환경에서의 예상치 못한 오류가 발생할 확률을 최소화시킬 수 있음 Scheduler를 위한 전용 OperatorReactor에서 Scheduler는 Scheduler 전용 Operator를 통해 사용할 수 있음su..

[Reactor] Sinks

SinksReactor 3.4.0 버전부터 지원되기 시작했으며 리액티브 스트림즈의 구성 요소 중 하나로 Processor의 기능을 개선했음Sink는 Reactor에서 이벤트를 방출하는 엔터티를 의미  부연 설명Sink는 리액티브 스트림즈의 Signal을 프로그래밍 방식으로 푸시할 수 있는 구조이며 Flux 또는 Mono의 의미 체계를 가짐Sinks를 사용하면 프로그래밍 코드를 통해 명시적으로 Signal을 전송할 수 있음Sinks는 멀티 쓰레드 방식으로 Signal을 전송해도 thread-safe하기 때문에 예기치 않은 동작으로 이어지는 것을 방지해줌generate() Operator나 create() Operator는 싱글 쓰레드 기반에서 Signal을 전송하는 데 사용 1. create() Opera..

[Reactor] Backpressure

BackpressurePublisher와 Subscriber 간의 데이터 흐름을 제어하는 메커니즘Publisher가 끊임없이 내보내는 무수히 많은 데이터를 적절하게 제어하여 데이터 처리에 과부하가 걸리지 않도록 제어하는 역할Backpressure가 없다면 시스템이 과부하 되거나 메모리 부족 등의 문제가 발생할 수 있음과도한 데이터 생성: Publisher가 매우 빠르게 데이터를 생성할 때, 소비자가 그 데이터를 제시간에 처리하지 못하면 데이터가 쌓이게 됨리소스 제한: Subscriber는 제한된 리소스(메모리, CPU 등)를 사용하여 데이터를 처리하는데 Subscriber의 처리 속도가 Publisher의 생성 속도를 따라가지 못할 때 문제가 발생함시스템 안정성: Backpressure를 통해 시스템의 ..

[Reactor] Cold Sequence, Hot Sequence

컴퓨터 시스템에서의 Cold, Hot 의미Cold는 무언가를 새로 시작하고, Hot은 무언가를 새로 시작하지 않는다고 이해하는 것이 편함ex) 암호화폐의 Hot Wallet은 인터넷에 연결되어 있기 때문에 즉시 사용이 가능하지만 보안에 취약ex) 암호화폐의 Cold Wallet은 인터넷과 단절되어 있어서 사용성은 떨어지지만 보안이 강화됨 (사용하기 위해서는 인터넷에 다시 연결해야 함) SequencePublisher가 내보내는 데이터의 연속적인 흐름을 정의해 놓은 것코드로 표현하면 Operator 체인 형태로 정의 Cold SequenceSubscriber가 구독할 때마다 데이터 흐름이 처음부터 다시 시작되는 Sequence  부연 설명위 쪽에 위치한 Subscriber가 구독을 하면 Publisher는..

[Java] CompletableFuture

동시성 프레임워크 정리 글에서 언급했다시피 Future는 작업의 결과를 가져올 때까지 blocking 되고, 작업을 조합하거나 예외 처리하는 것이 어려웠습니다.이 문제를 해결하기 위해 자바 8에서 CompletableFuture가 등장했고 이번 게시글에서는 다음 내용을 간단히 정리해 보겠습니다.동기 vs 비동기CompletableFuture 개요CompletableFuture APIForkJoinPool 1. 동기 vs 비동기 1.1 동기(Synchronous)작업이 순차적으로 실행되며 한 작업의 시작과 완료가 다른 작업의 시작과 완료와 밀접하게 연결된 방식하나의 작업이 실행 중인 동안 다른 작업은 대기해야 함작업의 결과를 기다린 후 다음 작업이 진행작업은 한 번에 하나씩 진행하며 작업을 건너뛰거나 빠뜨..

[Java] ThreadPoolExecutor

ThreadPoolExecutor는 ExecutorService를 구현한 클래스로서 매개변수를 통해 다양한 설정과 조정이 가능하며 사용자가 직접 컨트롤할 수 있는 쓰레드 풀입니다.기존의 Executors가 생성하는 ThreadPool은 옵션 세부 튜닝이 어려웠던 반면 ThreadPoolExecutor는 이를 보완함 ThreadPoolExecutor는 다양한 구성 옵션을 통해 동작을 조정할 수 있으며 주요 구성 요소는 다음과 같습니다.corePoolSizemaximumPoolSizekeepAliveTimeBlockingQueueRejectedExecutionHandlerThreadPoolExecutor Hook 1. corePoolSize & maximumPoolSizeThreadPoolExecutor는 ..

[Java] 자바 동시성 프레임워크

ThreadPool 다수의 쓰레드를 미리 생성하고 관리하여 작업을 효율적으로 처리하는 디자인 패턴 자바에서는 쓰레드 풀을 사용할 수 있도록 Executor 프레임워크 제공 1. ThreadPool이 필요한 이유 쓰레드 생성 비용 절감 쓰레드 재사용 동시성 제어 대량 요청으로부터 시스템 보호 1.1 쓰레드 생성 비용 절감 쓰레드 생성은 비싼 작업 따라서 쓰레드 풀은 쓰레드를 미리 생성하고 초기화하여 대기 상태로 유지함으로써 쓰레드 생성 비용을 절감시킴 1.2 쓰레드 재사용 쓰레드 풀은 작업이 종료된 쓰레드를 대기 상태로 전환시킨 뒤 재사용하며 반복적인 쓰레드 생성 및 삭제에 따른 오버헤드를 피하고 성능 향상 도모 1.3 동시성 제어 쓰레드 풀은 동시에 실행되는 쓰레드의 개수를 제어함에 따라 시스템 리소스의..

[Java] 동기화 도구

개요 앞선 게시물을 읽고 오시는 것을 추천드립니다! https://jaimemin.tistory.com/2411 [Java] Lock, ReentrantLock, ReadWriteLock, ReentrantReadWriteLock 개요 앞선 게시물을 읽고 오시는 것을 추천드립니다! https://jaimemin.tistory.com/2409 [Java] synchronized, wait() & notify(), volatile, Deadlock 개요 앞선 게시물을 읽고 오시는 것을 추천드립니다! https://jaimemin.tist jaimemin.tistory.com CAS(Compare and Swap) 멀티 쓰레드 환경에서 락을 사용하지 않고도 공유 변수의 값을 원자적으로 변경하는 방법 제공 CP..

[Java] Lock, ReentrantLock, ReadWriteLock, ReentrantReadWriteLock

개요 앞선 게시물을 읽고 오시는 것을 추천드립니다! https://jaimemin.tistory.com/2409 [Java] synchronized, wait() & notify(), volatile, Deadlock 개요 앞선 게시물을 읽고 오시는 것을 추천드립니다! https://jaimemin.tistory.com/2392 [Java] 동기화 개념 1. 싱글 쓰레드 vs 멀티 쓰레드 프로세스는 오직 한 개의 쓰레드로만 구성하는 싱글 쓰레드 프로 jaimemin.tistory.com synchronized vs Lock 구현 Lock 구현은 synchronized 구문과 마찬가지로 상호 배제와 가시성 기능을 가진 동기화 기법 Lock 구현은 synchronized보다 더 확장된 락 작업 제공 tryL..