비동기-논블록킹 모델이란?
<aside>
1️⃣ Spring webflux 개념설명
</aside>
- 스프링 WebFlux는 주로 서버와 클라이언트 간에 데이터를 비동기적으로 주고 받는 상황에서 사용됩니다. WebFlux는 웹 애플리케이션에서 높은 동시성을 필요로 하는 곳에서 장점을 보입니다. 예를 들어, 채팅 서버, 실시간 데이터 스트리밍, 비동기 API 호출 등 대량의 트래픽을 처리하거나, 빠른 반응 시간이 필요한 서비스에서 사용됩니다.
- WebFlux는 Reactive Streams API를 기반으로 한 반응형 프로그래밍 모델을 사용합니다. 이는 데이터가 준비되면 바로 처리하고, 준비되지 않았다면 기다리지 않고 다른 작업을 수행하는 논-블로킹 방식으로 동작합니다. 이런 특성으로 인해 효율적인 리소스 관리와 높은 처리량을 달성할 수 있습니다.
- 그리고 WebFlux도 MVC 패턴을 사용할 수 있습니다. 실제로 WebFlux는 기본적으로 어노테이션 기반의 프로그래밍 모델을 제공하며, 이는 전통적인 Spring MVC와 매우 유사합니다. 즉, **
@Controller
**나 @RequestMapping
등의 어노테이션을 통해 요청 처리 로직을 정의할 수 있습니다. 또한, 함수형 프로그래밍 모델도 지원하여 라우팅과 요청 처리 로직을 더 선언적이고 함수형 방식으로 작성할 수 있습니다.
- 그러나 WebFlux와 MVC를 혼용해서 사용하는 것은 권장되지 않습니다. 이는 두 모델이 각기 다른 방식으로 요청을 처리하며, 이를 혼합 사용하면 프로젝트의 복잡성이 증가하고, 예기치 않은 문제가 발생할 수 있기 때문입니다.
<aside>
2️⃣ 어디에 사용될까?
</aside>
- 스프링 WebFlux는 서버 측에서 사용되는 기술입니다. WebFlux는 애플리케이션 서버를 만드는 데 사용될 수 있으며, 클라이언트 요청을 처리하고 응답을 반환하는 역할을 합니다. 이는 웹 애플리케이션, 모바일 앱, IoT 장치 등 다양한 클라이언트에 대해 서비스를 제공할 수 있습니다.
- WebFlux는 웹 서버에서도 사용될 수 있습니다. 웹 서버가 HTTP 요청을 받아 정적 컨텐츠를 제공하거나, 다른 서버로 프록시하는 등의 작업을 수행하는 것과 마찬가지로, WebFlux를 사용하는 서버는 HTTP 요청을 받아 데이터를 제공하거나 처리하는 역할을 합니다.
- 또한, 클라이언트 사이드 렌더링(CSR) 방식이나 서버 사이드 렌더링(SSR) 방식의 웹 애플리케이션에서도 WebFlux를 사용할 수 있습니다. CSR 방식에서는 웹 서버가 초기 페이지를 제공한 후, 추가적인 데이터 요청이 필요할 때 클라이언트가 AJAX 요청을 통해 데이터를 요청하고, 이를 받아 렌더링을 수행하는데, 이런 데이터 요청을 처리하는 서버가 WebFlux를 사용할 수 있습니다. SSR 방식에서도 서버가 각 페이지 요청에 대해 HTML을 생성하고 반환하는데, 이런 요청을 처리하는 서버가 WebFlux를 사용할 수 있습니다.
- 반응형 프로그래밍이 필요한 배치 처리 등의 작업에서도 WebFlux를 사용할 수 있습니다. 하지만 WebFlux는 꼭 배치 작업에만 사용되는 것은 아닙니다. 웹 애플리케이션 또는 API 서버와 같은 실시간 시스템에서도 많이 사용됩니다.
- 따라서 WebFlux의 사용 여부는 애플리케이션이나 서비스의 요구사항에 따라 결정됩니다. 대량의 동시 요청을 효율적으로 처리해야 하는 시스템이나, 비동기적으로 데이터를 주고 받아야 하는 시스템에서는 WebFlux를 사용하여 효율성을 향상시킬 수 있습니다.
<aside>
3️⃣ 장점
</aside>
- 효율적인 리소스 사용이 가능하다.
- 요청이 순간적으로 늘어나도 유연하게 커버가 가능하다.
- 동시성을 극한으로 이용해서 응답속도를 단축한다.
- Reactor, Coroutine으로 코드 가독성을 유지한다
<aside>
4️⃣ 단점
</aside>