Netty
2024-04-17
이벤트 루프 모델과 NIO 중심으로 설계된 자바 비동기 네트워크 프레임워크
Spring WebFlux에서 기존 요청당 스레드 모델(Tomcat) 대신 사용하는 이벤트 기반 모델
-
WebFlux에서의 Tomcat?
Spring WebFlux는 비차단 백그라운드 처리를 허용하는 Servlet 3.1+ 구현에서 Tomcat과 함께 사용할 수도 있지만 권장되지는 않습니다.
NIO를 직접 접근하지 않고, 네트워크 레이어 코딩을 할 수 있게 해주는 프레임워크
- NIO API를 직접 사용하기에는 부담이 크다.
Netty Component
- Channal은 Netty의 기본 컨테이너로 ChannelPipeline을 포함하고, Event Loop Group의 Event Loop와 연결된다.
- ChannelPipeline에는 비즈니스 로직을 포함하는 채널 인바운드, 아웃바운드 핸들러 체인이 포함되어 있다.
- 하나의 Event Loop는 여러 개의 Channal과 연결된다.
- 서버 채널(요청 수락)과 자식 채널(실제 데이터 통신)은 별도의 Event Loop Group을 사용해야된다. (2개)
- 이벤트 처리가 다르기 때문에 Group을 나누는 것이 좋다.
- 동일한 Event Loop Group에선 다른 채널에서의 작업에 영향을 줄 수 있다.
- 클라이언트에선 소켓 읽기 및 쓰기 작업만 처리하면 되어 하나의 Event Loop Group만 사용하면 된다.
- ChannelHandler가 블로킹 되면 동일한 Event Loop와 연결된 channal에 대한 요청 처리가 느려진다.
- 별도의 스레드 풀에 블로킹 작업을 배치하여 처리한다. (EventExecutorGroup 사용)
- Circuit Breaker 패턴 사용 (블로킹 작업 채널 그냥 닫기)