Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
패스트캠퍼스 환급챌린지 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 소켓 서버와 같은 네트워크 프로그래밍을 크게 단순화하고 간소화합니다.
'빠르고 쉽다'는 결과적으로 애플리케이션이 유지 관리 또는 성능 문제에 영향을 받을 것이라는 의미는 아닙니다. 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를 통해 비동기적인 네트워크 처리를 구현함으로써 블로킹을 최소화하고, 더 많은 동시성을 달성할 수 있습니다.
- 높은 처리량, 낮은 지연 시간을 제공하여 성능 향상을 실현합니다.
3. NIOEventLoop
- EventExecutor, TaskQueue, Selector를 포함
- EventExecutor: task를 실행하는 쓰레드풀
- TaskQueue: task를 저장하는 queue
- eventExecutor가 즉시 task를 수행하지 않고 taskQueue에 넣은 후, 나중에 꺼내서 처리 가능
- Selector: I/O Multiplexing을 지원
※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N