[TIL] Netty와 Spring Webflux, Tomcat

Soeng_dev·2025년 1월 7일

Netty

Netty는 비동기 이벤트 기반 네트워크 애플리케이션 프레임워크로, 고성능 네트워크 서버와 클라이언트를 개발할 때 사용된다. 주요 특징은 다음과 같다:

  • 비동기 및 이벤트 기반: NIO 기반으로 I/O 작업을 효율적으로 처리.
  • 고성능: 낮은 레이턴시와 높은 처리량 제공.
  • 확장성: 멀티스레드 및 멀티코어 환경에서 쉽게 확장 가능.
  • 유연성: 다양한 네트워크 프로토콜 지원 (TCP, UDP, HTTP 등).
  • 코드 간소화: 네트워크 프로그래밍의 복잡성을 줄이고 개발 생산성 향상.

Netty는 주로 실시간 애플리케이션(채팅, 게임, 스트리밍), 고성능 HTTP 서버, 프록시 서버 등에 활용된다.
Servlet같은 서버 프레임워크이지만, 비동기 이벤트 기반의 프레임워크라는게 차이점


Spring WebFlux란?

Spring WebFlux는 Spring 5에서 도입된 비동기, 리액티브 프로그래밍을 위한 웹 프레임워크다.

주요 특징:

  • Reactive Streams 스펙 기반으로 설계.
  • 비동기 논리를 쉽게 작성할 수 있는 Publisher-Subscriber 모델 사용.
  • Netty와 같은 비동기 네트워크 라이브러리를 내부적으로 활용 가능.
  • 주요 모듈: Mono, Flux(Reactive Streams의 구현체).

사용 목적:

Spring WebFlux는 비동기 웹 애플리케이션 개발을 위한 고수준 API를 제공하며, REST API, 비동기 데이터 처리, 실시간 애플리케이션에 적합하다.


Spring WebFlux와 Netty의 관계

  • Spring WebFlux는 고수준 웹 프레임워크로, Netty를 내부적으로 사용해 비동기 네트워크 통신을 처리할 수 있다.
  • Spring WebFlux는 Netty 외에도 다른 서버 엔진(예: Jetty, Undertow)을 선택할 수 있다.
  • 즉, Spring WebFlux는 Netty 위에서 동작하는 추상화된 레이어이며, 개발자가 네트워크 프로토콜 세부 사항을 신경 쓰지 않고 고수준의 비동기 애플리케이션을 개발할 수 있도록 도와준다.

4. 주요 차이점

특징Spring WebFluxNetty
역할비동기 웹 프레임워크비동기 네트워크 프레임워크
레벨고수준 (Reactive Streams API 제공)저수준 (네트워크 통신 세부 처리)
사용 목적REST API, 실시간 데이터 처리TCP, UDP, HTTP 서버 구현
프로토콜 지원주로 HTTP/HTTPSTCP, UDP, HTTP 등 다양한 프로토콜
의존 관계Netty를 선택적으로 사용독립적으로 사용 가능

Tomcat

스프링의 내장 WAS(Web Application Server) 또는 서블릿 컨테이너이다.

Tomcat의 역할:

  1. HTTP 요청/응답 처리: 클라이언트 요청을 받아서 처리하고 응답을 반환.
  2. 서블릿 컨테이너 역할: 서블릿 스펙을 구현하여 DispatcherServlet 등을 실행.
  3. 포트 바인딩: 기본적으로 8080 포트에서 서버 실행.
  4. 멀티스레드 처리: 스레드 풀을 사용해 동시 다수 요청 처리.

Tomcat은 스프링 부트 프로젝트에서 기본 WAS로 사용되며, 별도의 외부 서버 설치 없이도 실행 환경을 제공한다.


Spring Boot에서 Tomcat의 역할

Spring Boot 프로젝트 실행 시 Tomcat은 내장 WAS로 다음과 같은 역할을 수행:

  1. HTTP 요청/응답 관리: 클라이언트 요청을 받아 컨트롤러로 전달하고 결과를 반환.
  2. 서블릿 컨테이너: DispatcherServlet을 실행하여 요청을 처리.
  3. 포트 바인딩: 기본적으로 8080 포트에서 애플리케이션 실행.
  4. 멀티스레드 처리: 스레드 풀을 사용해 여러 요청을 동시에 처리.
  5. 서블릿 스펙 구현: HTTP 요청 처리 로직을 지원.

Spring Boot는 Tomcat을 통해 클라이언트와의 HTTP 통신을 관리하며, 개발과 배포를 간편하게 만든다.


profile
Software Engineer

0개의 댓글