Netty vs Tomcat

Sprout·2023년 10월 16일
0

MSA

목록 보기
3/8

1. 목적과 사용 사례

  • Netty :
    • 비동기 이벤트 기반의 네트워크 애플리케이션을 개발하기 위한 프레임워크 비동기? - 처리될 때까지 기다리는 것이 아니라 요청은 요청대로, 응답은 응답대로 따로 하는 것 → 독립적으로 돌아가는 행위
      • ex) Ajax
    • 주로 고성능, 확장 가능한 네트워크 서버를 개발하는데 사용 → 처리를 기다리지 않고 바로 다른 작업을 진행할 수 있으니까
    • 보통 웹, 게임, 채팅, 프록시 서버 등과 같은 네트워크 기반의 어플리케이션을 개발하는데 활용 → 언제 요청이 들어올지 모르는데, 요청이 들어오면 즉각처리해줘야하는 것들 중 성능이 요구되는 서비스에 사용된다.
  • Tomcat :
    • 서블릿(Servlet) 컨테이너로서, JSP와 Servlet 기술을 사용하여 Java 웹 애플리케이션을 실행하는데 사용
    • 동시성 처리보다는 싱글 스레드 형식( 단일 요청→단일 응답 처리 )에 적합

2. IO모델

  • <블로킹 vs 논블로킹>
    • 결과를 기다리는 대상을 어떻게 다룰 것인가?
    1. 블로킹 :

      요청에 대한 결과를 바로 줄 수 없는 경우 그 결과를 기다리도록 하는 것을 의미

      → 요청에 대한 결과를 바로 받을 수 없는 상황에서 결과가 나타날 때까지 대기.

    2. 논블로킹 :

      결과를 기다리지 않고 바로 종료

      → 다른 작업을 수행하는 것을 막지 않음.

  • Netty :
    • 네트워크 통신에 대한 이벤트 기반의 비동기 IO를 사용
    • NIO(Non-blocking IO)를 기반으로 하여 매우 빠르고 확장 가능한 네트워크 서버를 만듦. → 붙잡아 두지 않고 다른 작업을 하게 둘 수 있으니까
    • 대용량 데이터를 다루거나 수천 이상의 연결을 처리하는데 적합
  • Tomcat :
    • 전통적인 서블릿 기반의 동기식 IO를 사용함.
    • 스레드 풀을 사용하여 요청당 하나의 스레드를 할당하는 방식 → 많은 수의 연결을 동시에 처리하기 어려움. (톰캣도 아예 동시성 처리를 못하는 건 아닌데 좀 어렵다)

3. 사용하기 쉬운 정도

  • Netty가 Tomcat보다 어렵다

4. 성능 및 확장성

  • Netty : 비동기 IO를 사용하여 높은 성능, 확장성 뛰어남(대량의 연결을 효율적으로 처리)
  • Tomcat : 스레드 기반의 모델 사용하며 스레드 당 커넥션을 관리하기에 많은 수의 연결을 동시에 처리하기 까다로움

5. ServerHttpRequest, ServerHttpResponse

  • Netty : ServerHttpRequest/Response 사용 (비동기)
  • Tomcat : ServletServerHttpRequest/Response 사용 (동기)

일반적인 서비스 확장 과정

처음 서비스는 Tomcat으로 구현 → 로드 밸런서로 시간을 벌면서 Netty로 바꿀 준비

profile
취준생 필기노트

0개의 댓글