Spring
-
비동기 처리란 무엇인지와 Netty, Spring WebFlux 개요Spring/WebFlux 2025. 2. 3. 19:29
1. Netty와 WebFlux 탄생 배경기존 동기 방식 웹 서버(톰켓)에서는 해결하기 힘든 문제들이 있었다.요청이 아주 많아질 경우 스레드풀이 충분하지 않다면 요청 처리가 지연될 수 있는 문제잦은 스레드 스위칭으로 인한 컨텍스트 스위칭 비용 문제소켓에 데이터를 쓸 때 애플리케이션의 데이터를 커널 버퍼로 한 번 복사해야 하는 문제클라이언트의 요청을 Accept, Read, Write할 때 발생하는 블로킹 문제 이러한 문제들을 해결하고 더 높은 성능을 제공하기 위해 비동기 방식 웹 서버(Netty)가 등장하게 된다.Netty는 위 문제들을 이벤트 루프 패턴과 NIO 기반의 기술들(DirectByteBuffer 등)을 활용해서 효율적으로 해결한다.이 때 이벤트 루프 패턴은 적은 수의 스레드만을 사용하는데,..
-
[Spring WebFlux] 기존 웹 서버와의 차이점과 꼭 주의해야할 점 (Netty)Spring/WebFlux 2024. 11. 18. 20:03
1. Netty와 Tomcat의 차이Spring WebFlux는 논블로킹 리액티브 프로그래밍 모델을 지원하며 기본적으로 Netty를 웹 서버로 사용한다.이는 블로킹 기반 웹 서버인 Tomcat과는 스레드 관리 방식 등 다소 차이가 있기에 그 차이를 이해해야만 효율적인 reactive 프로그래밍이 가능하다.(Tomcat과 같은 서블릿 컨테이너를 활용해서도 Flux와 Mono data stream을 반환할 수 있기는 하다.) 2. 이벤트 루프를 사용하는 Netty의 특성Netty는 이벤트 루프 기반의 네트워크 애플리케이션 프레임워크로, 논블로킹 I/O 작업을 효율적으로 처리하기 위해 설계되었다.Tomcat은 스레드 풀을 두고 다수의 스레드를 만들어두고 개별 요청마다 스레드를 할당한다.반면에 Netty는 쓰..
-
[Spring WebFlux] Publisher과 SubscriberSpring/WebFlux 2024. 2. 20. 19:58
Publisher는 리액티브 프로그래밍에서 데이터 스트림을 생성하고 발행하는 주체다.Reactive Streams 사양에서는 Publisher 인터페이스를 정의하며, 이는 데이터를 생성하고 구독자(Subscriber)에게 데이터를 전달하는 메커니즘을 가진다. Publisher의 주요 특징은 다음과 같다비동기 데이터 스트림: Publisher는 비동기적으로 데이터 아이템을 발행한다. 이는 데이터를 생성하고 처리하는 작업이 호출자의 스레드와 다른 스레드에서 발생할 수 있음을 의미한다.백프레셔(backpressure) 지원: Publisher는 구독자가 처리할 수 있는 데이터의 양을 제어할 수 있는 백프레셔 메커니즘을 지원한다. 구독자는 request(n) 메서드를 통해 한 번에 처리할 아이템의 수를 요청할 ..