거꾸로 바라본 세상

[Netty]네티서버에 필요한 요소 본문

Programming/Netty

[Netty]네티서버에 필요한 요소

란지에。 2017.04.14 15:57

네티서버에 필요한 요소

- ChannelHandler :이 컴포넌트는 클라이언트로부터 받은 데이터를 서버측에서 처리하는 비지니스 논리를 구현.


- Bootstrap : 서버를 구성하는 시동코드를 의미한다. 최소한 서버가 연결요청을 수신하는 포트에 서버와 바인당하는 코드가 있어야함.



Netty networking 대표적인 추상화 클래스


1. Channel : 소켓(Socket)

- Channel 인터페이스는 Socket으로 직접 작업할 때의 복잡성을 완화하는 API를 제공하고 미리정의된 클래스 계층의 루트임

1-1. 종류

- EmbeddedChannel

- LocalServerChannel

- NioDatagramChannel

- NioSctpChannel

- NioSocketChannel


2. EventLoop :흐름제어, 멀티스레딩, 동시성 제어

- 연결의 수명주기중 발생하는 이벤트를 처리하는 핵심 추상화를 정의함

2-1. 관계

- EventLoop, Thread, EventLoopGroup

- EventLoopGroup은 하나 이상의 EventLoop를 포함한다.

- EventLoop는 수명주기동안 한 Thread를 바인딩한다.

- EventLoop에서 처리되는 모든 입출력 이벤트는 해당 전용 스레드에서 처리됨

- Channel은 수명주기동안 EventLoop에 등록할 수 있다.

- EventLoop를 하나 이상의 Channel로 할당할 수 있다.


ex) 과정

1) EventLoop 4개가 들어있는 EventLoopGroup

2) EventLoopGroup에 들어있는 EventLoop를 이용

3) Channel 생성

4) EventLoop를 Channel에 등록

5) EventLoop의 전체 수명주기 중 입출력을 처리



3. ChannelFuture : 비동기알림

- 비동기는 작업이 즉시 반환되지 않을 수 있기 때문에 나중에 결과를 확인하는 방법이 필요

ChannelFutre는 미래에 실행될 작업의 결과를 알려준다.



4. ChannelHandler와 ChannelPipeline

4-1. ChannelHandler 인터페이스

- 인바운드 아웃바운드 데이터의 처리에 적용되는 모든 애플리케이션 논리 컨테이너 역할을 한다.


4-2. ChannelHandler의 Adapter 종류

- ChannelHandlerAdapter

- SimpleChannelInboundHandlerAdapter<T>

- ChannelInboundHandlerAdapter

- ChannelOutboundHandlerAdapter

- ChannelDuplexHandlerAdapter



4-3. ChannelPipeline 인터페이스

- ChannelHandler 체인을 위한 컨테이너를 제공하고, 체인상에서 인바운드와 아웃바운드 이벤트를 전파하는 API를 정의한다.


5. 디코더, 인코더

- 메시지를 수신하거나 전송할때 데이터를 변환하는 것. 

인바운드 메시지는 바이트에서 다른 포맷(자바객체등)으로 변환되는 디코딩을 거친다

아웃바운드 메시지는 현재 포에서 바이트로 디코딩된다.

5-1. 종류

바이트 -> 메시지 : ByteToMessageDecoder, MessageToByteEncoder

구글 프로토콜 : ProtobufEncoder, ProtobufDecoder


6. SimpleChannelInboundHandler 추상클래스

- 기본 클래스의 메서드를 하나 이상 정의하고 모든 핸들러 메서드에 입력인수로 전달되는 ChannelHandlerContext에 대한 참조를 얻는 것.

(현재 입출력 스레드를 블로킹 하지 않아야함)


7. 부트스트랩(Bootstrap)

- 프로세스를 지정된 포트로 바인딩하거나 지정된 호스트, 포트에서 실행중인 다른 호스트로 연결하는 일을 하는 애플리케이션의 네트워크 레이어를 구성하는 컨테이너

1) BootStrap: 원격 피어로 연결해야하므로 client에서 정의

- 네트워크 기능 : 원격 호스트와 포트로 연결

- EventLoopGroup의 수 : 1개


1) BootStrap: 연결요청을 수신해야하므로 server에서 정의

- 네트워크 기능 : 로컬 포트로 바인딩

- EventLoopGroup의 수 : 2개


0 Comments
댓글쓰기 폼