도서 : 실전! 스프링5를 이용한 리액티브 프로그래밍
왜 리액티브인가?
수요(부하)의 변화 및 외부서비스의 가용성 변화에 대해 어떻게 대응할 것인가?
- 탄력성(slasticity)
- 다양한 작업 부하에서 응답성을 유지하는 능력
- 사용자가 많으면 처리량이 자동으로 증가, 수요가 감소하면 자동으로 감소
- 평균 지연 시간에 영향 없이 시스템 확장 가능
- 복원력
- 시스템 실패에도 반응성을 유지할 수 있는 능력
- 기능 요소 격리 -> 내부 장애 격리 -> 독립성 확보
- 탄력성 + 복원력 => 응답성
메세지 기반 통신
분산 시스템에서 서비스간 통신시, 자원을 효율적으로 사용
ex) 메시지 브로커 사용
왜 리액티브 스프링인가?
- Akka
Scala 생태계의 일부로 구축. Java 지원
자바 커뮤니티에서 인기를 누리진 못함.
- Vert.x
논블로킹 및 이벤트 기반
서비스 레벨에서의 반응성
- 콜백
- 공유 데이터 변경
- 콜백 지옥
- 멀티 스레딩 이해 필요
- java.util.concurrent.Future
- Future 클래스 사용 -> 결과값 반환 지연
- 콜백 지옥 피하기
- 멀티 스레드 복잡성 숨김
- 자바 8 - CompletableFuture
- 컨텍스트 스위칭 문제
요약
- 디지털 서비스 수요 증가에 대응하기 위해 새로운 아키텍처 패턴과 프로그래밍 기법이 필요했다.
- 탄력성
- 반응성