안녕하세요.
Netty는 비동기 이벤트 기반 네트워크 애플리케이션 프레임워크로 만들어주는 핵심 구성 요소를 알아보겠습니다.
1. Channel & Channel Pipeline
Netty의 채널은 이름처럼 Java의 NIO를 기반으로 합니다.
채널은 네트워크 소켓이나 read, write, connect, bind 같은 I/O작업을 수행할 수 있는 컴포넌트와 연결할 수 있는 연결점 입니다.
이 채널에서 발생한 모든 이벤트는 채널파이프라인을 따라 이동합니다.
2. Event & Handler
Netty는 네트워크 송수신에 관련된 일련의 일들을 각종 이벤트로 추상화했습니다.
채널에서 발생하여 채널 파이프라인을 따라 흐르는 이벤트를 처리하는 인터페이스가 핸들러입니다.
네티는 이벤트를 인바운드 이벤트(Inbound Event)와 아웃바운드 이벤트(Outbound Event)로 추상화했습니다.
인바운드는 말 그대로 들어오는 상황(Inbound I/O)에서 발생하는 이벤트이며, 채널의 활성화/비활성화, 데이터 수신, 등이 있습니다.
아웃바운드는 Outbound I/O 상황인 데이터 전송, 소켓 닫기 등이 있습니다.
3. Encoder & Decoder
네트워크 프로토콜을 사용해서 작업할 때는 직렬화, 역직렬화는 필수입니다.
이를 위해서 Netty는 ChannelInboundHandler를 확장한 Decoder, ChannelOutboundHandler를 확장한 Encoder를 제공합니다.
(이벤트 핸들러의 일종입니다)
이런 인코더/디코더를 사용하여 직렬화, 역직렬화를 수행할 수 있습니다.
위 설명한 것들을 기반으로 다이어그램을 살펴보겠습니다.
이 다이어그램은 일반적으로 채널파이프라인에 등록된 핸들러가 이벤트를 처리하는 방법을 설명하고 있습니다.
이벤트는 InboundHandler 또는 OutboundHandler에 의해 처리되며, ChannelHandlerContext에 정의된 이벤트 전파 메서드를 호출하여 가장 가까운 핸들러로 전달됩니다.
(이벤트는 한 번 소비되면 사라지기 때문에 체이닝 된 핸들러에게 전달하고 싶으면 fire** 메서드를 사용해야 합니다)
Netty는 굉장히 복잡해질 수 있는 네트워크 프로그래밍 요소들을 우아하게 추상화했음을 느꼈습니다.
재미있는 글이나 궁금한 점이 있다면 댓글 남겨주세요!
'츄Log > 네트워크 프로그래밍 끄적' 카테고리의 다른 글
EchoServer/Client TCP 패킷 분석 - 1. 연결/연결 종료 (Wireshark) (0) | 2023.12.12 |
---|---|
TCP 소켓의 TIME_WAIT 상태는 왜 있는 것일까? (1) | 2023.12.08 |
Java NIO (New IO) (0) | 2023.11.29 |
Nagle's Alghorithm (네이글 알고리즘) (0) | 2023.11.27 |
Netty - 1. 개요 (2) | 2023.11.24 |