2024/09 3

[Reactive Programming] Debugging

개요 동기식 또는 명령형 프로그래밍 방식은 Exception이 발생했을 때, StackTrace를 확인하거나 의심되는 코드에 Breakpoint를 걸어서 문제의 원인을 단계적으로 찾아갈 수 있어 상대적으로 디버깅이 쉽다. 하지만 Reactor 같은 선언형 프로그래밍 방식은 작업의 대부분이 비동기적으로 실행되기 때문에 디버깅이 쉽지 않다. 그래서 Reactor는 디버깅의 어려움을 최소화하기 위해 몇 가지 방법을 제공한다.   Debug Mode를 사용한 디버깅 Reactor에서는 Hooks.onOperatorDebug() 메서드를 사용하여 디버그 모드를 활성화할 수 있다. 우선, 디버그 모드가 아닐 때 에러 메시지가 어떻게 출력되는지 확인해보자. @Slf4jpublic class Example12_1 { ..

[Reactive Programming] Context

Context란? Reactor에서 Context는 Reactor 구성요소(Operator 등) 간에 전파되는 key/value 형태의 저장소이다. ServletContext, SecurityContext 등과 유사한 개념이다. Downstream에서 Upstream으로 Context가 전파되어 Operator 체인상의 각 Operator가 해당 Context 정보를 동일하게 이용할 수 있음ThreadLocal과 유사하지만, Thread와 매핑되는 것이 아닌 Subscriber와 매핑된다. 즉, 구독이 발생할 때마다 구독과 연결된 하나의 Context가 생성된다. 사용 예시@Slf4jpublic class Example11_1 { public static void main(String[] args) th..

[Reactive Programming] Scheduler

스레드(Thread)의 개념 이해 Reactor에서 사용되는 Scheduler는 Reactor Sequence에서 사용되는 스레드를 관리해 주는 관리자 역할을 한다. 이 Scherduler에 대한 설명에 앞서, 스레드에 대한 개념을 간단히 살펴보자면 다음과 같다. 코어(Core)실제 CPU의 코어를 지칭한다. 일반적으로 이 코어의 개수가 많으면 더 많은 수의 명령을 병렬로 빠르게 처리할 수 있다.  물리적 스레드(Physical Thread) / 논리적 코어(Logical Core) 과거에는 한 코어 당 하나의 물리적 스레드가 존재하여 한 코어가 한 번에 하나의 스레드를 처리할 수 있었다. 인텔에서는 코어 하나로 두 스레드를 처리할 수 있는 기술인 하이퍼스레딩 개념을 도입하여 하나의 코어로 두 가지 스레..

반응형