2023.02.19
이전 포스팅
리액티브(함수형) 프로그래밍
1) 연속적으로 일어나는 이벤트를 다루는 프로그래밍 기법
2) UI 이벤트, 비동기적인 I/O이벤트, 통제 불가능한 이벤트 스트림 처리
3) 동시성, 비동기/논블록킹 호출을 다루는데 탁월함
4) 조합 가능한 비동기 로직을 다루는 함수형 프로그래밍
출처: Kakao Dev 2018: 스프링5 웹플럭와 테스트 전략
동기/블록킹과 비동기/논블록킹 API 호출의 차이점
1) 동기/블록킹 API 호출 - REST API: 쉽고 간단함, 시스템 특성에 따라 매우 비효율적이 될 수도 있음
2) 비동기/논블록킹 API 호출
-AsyncRestTemplate(Spring4)
-Async/Await (Java8+)
-WebClient (Spring5)
-장점: 확장성이 뛰어나고 높은 처리율과 낮은 레이턴시를 가지는 효율적인 서버 구성이 가능함
-단점: 장점을 얻을 수 있는 경우가 적음. 코드가 복잡하고 이해하기 어려워질 수 있음
Reactive API 테스트
1) 비동기 코드를 검증하는 '동기방식' 테스트
2) 비동기/노블록킹의 특성에 주의
3) 블록킹/동기화가 필요: Flux.subscribe() / Asyne / Await
WebFlux API
1) RestTemplate
-동기/블록킹
2) AsyncRestTemplate
-비동기/논블록킹
-Future: 콜백, CompletionStage
3) WebClient
-비동기/논블록킹
-Flux/Mono Request, Response
-Streaming 지원
-BackPressure 지원
WebFlux의 새로운 아키텍처
1) 기존 SpringMVC 동기/블록킹 처리는 서버의 제약 위에 개발2) 서블릿 컨테이너를 사용할 수 있으나 의존적이지 않음 (Netty)3) 논블록킹 네트워크/논블로킹 API4) 논블록킹 데이터 스트림5) 확장성이 뛰어나고 재구성이 손쉬움6) 함수형 엔드포인
'포트폴리오 > PLAYASSET' 카테고리의 다른 글
[PF/PlayAsset] WebFlux R2dbc MySQL SELECT 구현 및 샘플코드 (0) | 2023.03.06 |
---|---|
[PF/PlayAsset] WebFlux Functional Endpoints (Router-Handler) 구성 및 샘플코드 (0) | 2023.02.27 |
[PF/PlayAsset] WebFlux개요 1 (0) | 2023.02.05 |
[PF/PlayAsset] 개발환경구성(4) - AWS + Docker (0) | 2022.11.09 |
[PF/PlayAsset] 개발환경구성(3) - Property, R2dbc (0) | 2022.09.26 |
댓글