![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/tu53i/btsAs9NIRiX/fK45XYR7fgIz1CwTJtZoVk/img.jpg)
더 이상 미룰 수 없다. 이탈리아 여행 1일1포스팅 프로젝트 시작! 뭐부터 올리면 좋을까 고민하다가, 역시 가장 좋았던 로마의 '판테온'부터 올려야겠다. 도착 첫날, 체크인 후 로마 시내로 나와 걷다 보니 굳이 의도해서 찾아가지 않아도 판테온에 도달할 수 있었다. 보자마자 '그리스 로마 신화에 나오는 신전 같다' 생각했는데, 느낌 그대로 기원전 27년에 로마의 신들을 모시기 위해 세운 신전이라고 한다. (판테온은 그리스어로 '모든' + '신'이라는 뜻이다.) 아이러니하게도 지금은 성당으로 사용되고 있고, 우리가 간 첫날 저녁에도 판테온 내부에서 찬양으로 추정되는 성가대 합창이 들렸다. 그다음 날 콜로세움 투어 일정을 마치고 다시 판테온을 찾았다. 매 첫째 주 일요일에는 로마의 주요 관광지들이 무료로 개방..
돈 버는 일에 관심이 많습니다. 요즘 부쩍 '돈을 어떻게 하면 벌 수 있을까?' 하는 고민이 마음속에 자주 머뭅니다. 사실 원래 저는 돈 욕심이 그리 많지는 않습니다. (어렸을 때 꿈이 뭐냐고 물으면 '갑부'라고 대답하던 시절도 있었다고는 합니다만) 주어진 현실에 만족하는 편이라, 굳이 더 많이 벌기 위해 발버둥 치기보다는 자족하며 여유롭게 사는 편이 낫다고 생각합니다. (감사하게도) 벌이도 또래에 비해 적은 편이 아닙니다. 제가 타고 다닐 차 한 대, 제가 평생 살 집 한 채만 있으면 안정감 있게 잘 살 수 있을 것 같은데, 차는 이미 구입했고 집은 엄청 좋은 집은 아니더라도 수도권에 한 채 정도 살 수는 있다고 생각합니다. (물론 먼저는 은행 돈으로 사고 10-20년간 갚아나가야겠습니다만) 그런데 최..
12.1 Reactor에서의 디버깅 방법 비동기, 선언형 프로그래밍 방식의 Reactor는 디버깅이 쉽지 않음 12.1.1 Debug Mode를 사용한 디버깅 Hooks.onOperatorDebug()를 통해 디버그 모드 활성화 (Example12_1) 체인상에서 에러가 시작된 지점부터 에러 전파 상태를 표시 비용이 많이 드는 동작 스택트레이스 캡처 에러가 발생한 Assembly의 스택트레이스를 원본 스택트레이스 중간에 끼워 넣음 운영 환경에서는 reactor.tools.agent.ReactorDebugAgent 이용 IntelliJ에서는 [Enable Reactor Debug mode]에서 Hooks.onOperatorDebug() 또는 ReactorDebugAgent.init() 중 택1 하여 활성화..
11.1 Context란? 어떠한 상황에서 그 상황을 처리하기 위해 필요한 정보 Reactor에서 Context의 정의Operator 같은 Reactor 구성요소 간에 전파되는 key/value 형태의 저장소 전파 : Downstream에서 Upstream 체인상의 각 Operator가 해당 Context 정보를 동일하게 이용할 수 있음 Reactor의 Context는 Subscriber와 매핑됨 cf. ThreadLocal의 경우 실행 스레드와 매핑됨 즉, 구독이 발생할 때마다 해당 구독과 연결된 하나의 Context가 생김 public static void main(String[] args) throws InterruptedException { Mono .deferContextual(ctx -> Mo..
Reactor Sequence에서 사용되는 스레드를 관리해 주는 역할 10.1 스레드(Thread)의 개념 이해 물리적인 스레드(Pysical Thread) : CPU 코어를 논리적으로 나눈 것 듀얼코어 4 스레드 (작업관리자 [성능]에서 확인 가능) 논리적인 스레드(Logical Thread) : 프로세스 내에서 실행되는 세부 작업의 단위 이론적으로는 제한이 없지만 실제로는 물리적인 스레드의 가용 범위내에서 생성 가능 병렬성(Parallelism) : 물리적인 스레드가 실제로 동시에 실행됨 동시성(Concurrency) : 동시에 실행되는 것처럼 보이지만 실제로는 아님 무수히 많은 논리적인 스레드가 물리적인 스레드를 아주 빠른 속도로 번갈아 가면서 사용 10.2 Scheduler란? 어떤 스레드에서 무..
9.1 Sinks란? Publisher와 Subscriber의 기능을 모두 지닌 Processor의 향상된 기능 제공 Sinks는 Reactor 3.4.0부터 지원 Processor API는 Reactor 3.5.0부터 제거 예정 Signal을 프로그래밍 방식으로 푸시할 수 있는 구조 멀티스레드 방식으로 Signal을 전송해도 스레드 안전성을 보장함 (Example9_2) 9.2 Sinks 종류 및 특징 Sinks.One : 한 건의 데이터를 프로그래밍 방식으로 emit (Example9_4) Mono 방식으로 Subscriber가 데이터를 소비할 수 있도록 함 asMono() 메서드를 사용하여 Mono 객체로 변환 Sinks.Many : 여러 건의 데이터를 프로그래밍 방식으로 emit Flux 방식으로..
8.1 Backpressure란? Publisher가 끊임없이 emit하는 무수히 많은 데이터를 제어하여 데이터 처리에 과부하가 걸리지 않도록 하는 것 8.2 Reactor에서의 Backpressure 처리 방식 데이터 개수 제어 Subscriber가 request() 메서드를 통해 데이터 개수 제어 Backpressure 전략 사용 (Downstream으로 전달할 데이터가 버퍼에 가득 찰 경우) IGNORE 전략 : Backpressure 적용하지 않음 ERROR 전략 : Exception 발생 (Example8_2) DROP 전략 : 버퍼 밖에서 대기하는 먼저 emit된 데이터부터 Drop (Example8_3) LATEST 전략 : 새로운 데이터가 들어오는 시점에 가장 최근의 데이터만 남겨 두고 나..
- Total
- Today
- Yesterday