Reactive programming - Spring webflux

2023. 7. 14. 17:51Spring/webflux

728x90

리액티브 프로그래밍

- 데이터가 변경될 때마다 이벤트를 발생시켜 데이터를 계속적으로 전달하는 것

- 실행할 동적을 구체적으로 명시하는 명령형 프로그래밍과 달리 단순히 목표(함수)를 선언 

 

Webflux

비동기적인 웹 애플리케이션을 개발하기 위한 모듈

더 많은 동시 요청 처리, 더 빠른 응답 시간과 확장성 제공

reactor 반응형 스트림 라이브러리 기반 동작

 

 

동기 / 비동기

요청한 작업에 대해 완료 여부를 신경써서 작업을 순차적으로 수행하는지 여부

 

동기 :

다른 작업을 요청한 후 해당 작업이 완료되면 바로 해당 작업을 진행(완료가 되면 즉시 처리)

비동기 :

작업을 요청되고 완료를 기다리지 않고 다른 작업을 실행(한 작업이 완료되기를 기다리지 않고 다른 작업 실행, 완료가 되어도 즉시 처리하지 않음)

작업이 백그라운드에서 실행되며, 작업의 완료 여부와 관계없이 제어권은 즉시 반환. 완료된 작업은 나중에 결과를 통해 처리

 

blocking / non blocking

현재 작업이 차단(대기) 여부에 따른 관점

 

blocking :

작업이 완료될 때까지 호출자에게 제어권을 반환하지 않고 대기하는 방식. 호출된 작업이 완료되기 전까지는 호출자는 다른 작업을 수행할 수 없음

non-blocking :

작업이 호출된 후 즉시 제어권을 반환받으며 원래 자신의 작업을 진행

 

Reactive stack(Webflux)과 Servlet Stack(MVC)와 차이

Servlet(MVC) Reactive(Webflux)
동기 비동기
서블릿 컨테이너 사용 네티, 언더토우 사용
애너테이션 기반 컨트롤러 사용 애너테이션 컨트롤러 뿐 아니라 라우터 함수 제공
Thread - per - request 모델 event-loop 와 non blocking I/O 사용
전통적인 방식 웹 앱 개발, 간단한 요구 사항 처리 적합 고성능, 확장성, 비동기 작업 중점 둔 웹 앱 개발 유용

개인적인 생각

Webflux를 경험해보면서 기존 서블릿 스택을 진행했던 것과 달리 개발 페러다임이 아예 달라서 낮설었는데, 적응하고 나니 생각보다 댕꿀잼이었다.

기존에 서블릿 스택 개발때는 각 메서드가 결과를 반환하는 느낌이라면 리액티브 스택은 흐름을 반환하는 느낌이었다.

728x90