본문 바로가기
IT/JAVA

Netty 란

by 최고영회 2021. 2. 2.
728x90
반응형
SMALL

Netty 란?

Netty는 TCP, UDP 소켓 서버 개발과 같은 네트워크 프로그래밍을 매우 간단하고 능률적으로 만들어주는

비동기 이벤트 드리븐 자바 네트워크 프레임워크다.

왜 사용할까?

성능이 좋다.

- Non-blocking Asynchronous 가 기본

- 적은 thread로 많은 요청 처리

- GC부하를 최소화하는 Zero-copy ByteBuf 지원

유연하고 쓰기 쉽다

- 각종 network protocol 기본 지원

- 필요한 부분을 쉽게 조립해 쓸 수 있는 구조

- multithread 처리 없이도 사용 가능

ChannelHandler의 메소드는 동시에 불리지 않는다.

Channel은 한 스레드에 할당되며 그 스레드에서만 호출

등록된 ChannelFutureListner도 그 스레드가 호출

핵심 interface

Channel

- read, write, connect, bind와 같은 I/O Operations를 할수 있는 component들이나

network socket들의 복합

- Channel의 모든 I/O는 비동기이다. (ChannelFuture를 통해 결과를 받을 수 있음)

ChannelFuture

- ChannelFeture interface를 통해 처리가 완료 되었는지 확인하고 결과를 받을 수 있다.

- addListener(), channel(), isSuccess(), cause(), await(), sync()...

ChannelHandler

- netty의 I/O event를 처리하는 interface

ChannelInboundHandler(인바운드), ChannelOutboundHandler(아웃바운드)

- exceptionCaught(), handlerAdded(), handlerRemoved()...

ChannelHandlerContext

- ChannelHandler는 ChannelHandlerContext를 통해 다음 ChannelHandler에게 이벤트를 넘기거나

동적으로 ChannelPipeline을 변경할수 있다.

- channel(), pipeline(), write(), fireChannelActive(), fireChannelRead()

ChannelPipeline

- Channel에 드나드는 inbound, outbound event를 처리

- addLast(), remove()...

- 각각의 채널에는 ChannelPipeline이 있고 한 ChannelPipeline에는 ChannelHandler 여러개를

다양하게 조립해서 사용한다.

EventLoop

- 채널에 등록된 모든 i/o 작업을 처리하는 Interface

- 구현체인 NioEventLoopGroup 을 주로 사용

- isEventLoop(), submit(), newPromise(), schedule()...

특징

- NIO ByteBuffer 대신 자신만의 Buffer API(ChannelBuffer)를 사용하여 Byte를 표현한다.

ChannelBuffer는 종종 ByteBuffer보다 빠르고 flip() 메서드를 호출할 필요 없으며

StringBuffer 처럼 동적 버퍼 타입이 제공되며 zero copy를 수행한다.

- 단순하든 복잡하든 바이너리든 아니든 상관없이 프로토콜 코덱을 작성할 때 마주하게 될 대부분의 이슈를

해결할 수 있도록 기본적인 코덱과 고급 코델을 제공한다.

- NIO 이면서도 SSL을 지원한다.

- Google Protobuf 와 통합이 가능하다.

구성요소

Bootstrap

- Channel을 초기화해주는 Helper class.

- ClientBootstrap: 새로운 Client-side channel을 생성해주고 연결을 시도하는 helper class.

- ServerBootstrap: Serverside channel을 생성하고 들어오는 연겨시도를 받아주는 helper class.

- ServerBootstrap의 부모 channel은 들어오는 여녈을 받아주고 성공적으로 bound 된

client 연결은 자식 channel 이 된다.

- ConnectionlessBootstrap: UDP와 같은 비연결성 전송을 위한 Server side 채널을 생성해 주는 helper class.

Codec

- 네트워크 통신에 필요한 Codec을 지원하여 개발자가 decoder와 encoder를 구현해야할 필요를 줄여준다.

728x90
반응형
LIST