개발자는 기록이 답이다

패스트캠퍼스 환급챌린지 17일차 미션 (2월 17일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기 본문

패스트캠퍼스

패스트캠퍼스 환급챌린지 17일차 미션 (2월 17일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기

slow-walker 2024. 2. 17. 23:08

 

1. Netty의 구조와 동작방식

 

공식문서에 따르면 Netty의 설명은 아래와 같습니다.

 

Netty는 유지보수 가능한 고성능 프로토콜 서버 및 클라이언트의 신속한 개발을 위한 비동기 이벤트 기반 네트워크 응용 프로그램 프레임워크입니다. Netty는 빠르고 쉬운 NIO 클라이언트 서버 프레임워크로, 프로토콜 서버 및 클라이언트와 같은 네트워크 응용 프로그램의 신속하고 쉬운 개발을 가능케 합니다. TCP 및 UDP 소켓 서버와 같은 네트워크 프로그래밍을 크게 단순화하고 간소화합니다.

https://netty.io/ 에서 캡쳐한 사진


'빠르고 쉽다'는 결과적으로 애플리케이션이 유지 관리 또는 성능 문제에 영향을 받을 것이라는 의미는 아닙니다. Netty는 FTP, SMTP, HTTP 및 여러 이진 및 텍스트 기반 레거시 프로토콜의 구현 경험을 토대로 주의 깊게 설계되었습니다. 결과적으로 Netty는 개발의 편의성, 성능, 안정성 및 유연성을 타협하지 않고 달성하는 방법을 찾아냈습니다.

 

  • 특징
    • 설계
      • 다양한 전송 유형에 대한 통일된 API - 블로킹 및 논블로킹 소켓
      • 명확한 관심사 분리를 허용하는 유연하고 확장 가능한 이벤트 모델 기반
      • 고도로 사용자 정의 가능한 스레드 모델 - 단일 스레드, SEDA와 같은 하나 이상의 스레드 풀
      • 실제 무연결 데이터그램 소켓 지원 (3.1 버전부터)
    • 사용 편의성
      • 잘 정리된 Javadoc, 사용자 가이드 및 예제
      • 추가 종속성 없음, JDK 5 (Netty 3.x) 또는 6 (Netty 4.x)이 충분
      • 참고: HTTP/2와 같은 일부 구성 요소는 추가 요구 사항이 있을 수 있습니다. 자세한 내용은 요구 사항 페이지를 참조하십시오.
    • 성능
      • 높은 처리량, 낮은 지연 시간
      • 적은 자원 소모
      • 불필요한 메모리 복사 최소화
    • 보안
      • 완전한 SSL/TLS 및 StartTLS 지원

정리

  • 비동기 이벤트기반의 네트워크 어플리케이션 프레임워크
  • HTTP뿐만 아니라 다양한 프로토콜 지원
  • Java IO, NIO, selector 기반으로 적은 리소스로 높은 성능 보장
  • 불필요한 메모리copy를 최소한으로 유연하며 확장가능한 이벤트 모델 기반
  • 서버와 클라이언트 모두 지원

 

2. eventLoop

 

Netty의 EventLoop은 네트워크 이벤트 처리 및 다중 스레딩을 관리하는 핵심 구성 요소입니다.

 

  • EventLoop의 개요
    • EventLoop은 비동기 이벤트 처리를 담당하는 루프입니다.
    • 네트워크 이벤트를 처리하고 스레딩 모델을 관리합니다.
  • 역할과 책임
    • 클라이언트 및 서버 사이에서 발생하는 다양한 이벤트를 처리합니다.
    • 네트워크 트래픽 및 작업을 비동기적으로 관리하며 블로킹을 피합니다.
    • 스레드 풀을 통해 다중 스레딩을 지원하고 작업을 효율적으로 분배합니다.
  • 이벤트 루프의 구성 요소
    • EventLoop은 하나 이상의 스레드에 바인딩될 수 있습니다.
    • 하나의 스레드에서 여러 EventLoop이 실행될 수 있고, 각각은 독립적으로 동작합니다.
    • 이벤트 루프는 선택적으로 스케줄된 작업, 타임아웃 및 이벤트를 처리합니다.
  • 스레드 모델
    • Netty는 다양한 스레드 모델을 제공하며, 이는 EventLoopGroup를 통해 구성됩니다.
    • 단일 스레드, 다중 스레드, 그리고 특정한 스레드 할당 전략을 선택할 수 있습니다.
  • 비동기 처리의 장점
    • EventLoop를 통해 비동기적인 네트워크 처리를 구현함으로써 블로킹을 최소화하고, 더 많은 동시성을 달성할 수 있습니다.
    • 높은 처리량, 낮은 지연 시간을 제공하여 성능 향상을 실현합니다.
https://mark-kim.blog/netty_workflow/

3. NIOEventLoop

  • EventExecutor, TaskQueue, Selector를 포함
  • EventExecutor: task를 실행하는 쓰레드풀
  • TaskQueue: task를 저장하는 queue
  • eventExecutor가 즉시 task를 수행하지 않고 taskQueue에 넣은 후, 나중에 꺼내서 처리 가능
  • Selector: I/O Multiplexing을 지원

 


※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N