본문 바로가기
츄Log/네트워크 프로그래밍 끄적

Netty - 2. 핵심 구성 요소(채널, 채널파이프라인, 이벤트, 핸들러)

by 츄츄🦭 2023. 11. 29.
728x90

 

안녕하세요.

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를 제공합니다.

(이벤트 핸들러의 일종입니다) 

이런 인코더/디코더를 사용하여 직렬화, 역직렬화를 수행할 수 있습니다. 

 

 

출처 : Netty JavaDoc

위 설명한 것들을 기반으로 다이어그램을 살펴보겠습니다.

이 다이어그램은 일반적으로 채널파이프라인에 등록된 핸들러가 이벤트를 처리하는 방법을 설명하고 있습니다.

이벤트는 InboundHandler 또는 OutboundHandler에 의해 처리되며, ChannelHandlerContext에 정의된 이벤트 전파 메서드를 호출하여 가장 가까운 핸들러로 전달됩니다.

(이벤트는 한 번 소비되면 사라지기 때문에 체이닝 된 핸들러에게 전달하고 싶으면 fire** 메서드를 사용해야 합니다) 

 


Netty는 굉장히 복잡해질 수 있는 네트워크 프로그래밍 요소들을 우아하게 추상화했음을 느꼈습니다.

 

재미있는 글이나 궁금한 점이 있다면 댓글 남겨주세요!

728x90