리액티브 프로그래밍
프로그램 내의 각각의 작업에 대해 Non-Blocking 하게 개발하는 것이다. 사용자의 입력에서 출력 사이의 로직 중 한 부분이라도 Block 되는 로직이 있다면 리액티브하지 못한 것이며, Non-Blocking 의 장점을 살릴 수 없다. Non-Blocking 의 정상적인 작동을 위해선 동시 작업을 위해 각 작업 내에서 단일 쓰레드 내에서 제어권을 주고 받게 되는데 이에 대해 필연적으로 오버헤드가 발생한다. 그러나, 전통적인 Java의 쓰레드 중심의 Blocking 방식 개발은 준비된 쓰레드를 초과하는 대용량 처리를 위해 쓰레드를 증설하게 되는데, 쓰레드는 상대적으로 비싸고 희귀한 자원이기 때문에 대용량, 동시처리에 대해서는 Non-Blocking 가 더 나은 성능을 보여주는 것이다.
이를 반대로 말하자면, 동시 I/O 대기가 많지 않으며, 시스템 사용량이 예측 가능하고 서비스가 제공하는 자원으로 충분히 운영이 가능하다면 오히려 리액티브는 장점을 살리지 못하고 오버헤드만 낳는 꼴이 된다. 새로운 생태계를 학습하여 내 것으로 만드는 것은 좋지만 실무에 적용할 땐 서비스에 실질적인 도움이 되는지 꼭 검토해 봐야 할 것이다.
(작성 중)
https://juneyr.dev/reactive-programming http://www.yes24.com/Product/Goods/101803558?OzSrank=1(스프링 부트 실전 활용 마스터)