group - 이벤트 루프 설정

정의 : 데이터 송수신 처리를 위한 이벤트 루프를 설정하는 메서드

ServerBootstrap 클래스는 클라이언트의 연결을 수락하는 부모 스레드 그룹과 연결된 클라이언트 소켓에 대한 데이터 입출력을 처리하는

자식 스레드 즉, 두 개의 스레드 그룹을 설정할 수 있다.

 

channel - 소켓 입출력 모드 설정

정의 : 소켓의 입출력 모드를 설정하는 메서드

channel 메서드는 AbstractBootstrap 추상 클래스의 구현체인 ServerBootstrap 과 Bootstrap 클래스에 모두 존재하는 API며

부트스트랩 클래스를 통해서 생성된 채널의 입출력 몯를 설정할 수 있다.

즉, 부트스트랩의 channel 메서드에 등록된 소켓 채널 생성 클래스가 소켓 채널을 생성한다.

channel 메서드는 AbstractBootstrap 클래스에 정의 되어 있다. 여기에 설정 가능한 클래스 목록과 각 클래스 설명은 다음과 같다.

LocalServerChannel.class

하나의 자바 가상머신에서 가상 통신을 위한 서버 소켓 채널을 생성하는 클래스

※ 통상적으로 하나의 어플리케이션 내에서 클라이언트와 서버를 모두 구현하고 애플리케이션 안에서 소켓 통신을 수행할 때 사용한다.

OioServerSocketChannel.class

블로킹 모드의 서버 소켓 채널을 생성하는 클래스

NioServerSocketChannel.class

논블로킹 모드의 서버 소켓 채널을 생성하는 클래스

EpollServerSocketChannel.class

리눅스 커널의 epoll 입출력 모드를 지원하는 서버 소켓 채널을 생성하는 클래스

OioSctpServerChannel.class

SCTP 전송 계층을 사용하는 블로킹 모드의 서버 소켓 채널을 생성하는 클래스

NioSctpServerChannel.class

SCATP 전송 계층을 사용하는 논블로킹 모드의 서버 소켓 채널을 생성하는 클래스

NioUdtByteAcceptorChannel.class

UDT 프로토콜을 지원하는 논블로킹 모드의 서버 소켓 채널을 생성하는 클래스.

내부적으로 스트림 데이터를 처리하도록 구현되어 있으며 barchart-udt 라이브러리를 사용한다.

barchart-udt : https://goo.gl/CGZ6vu

NioUdtMessageAcceptorChannel.class

UDT 프로토콜을 지원하는 블로킹 모드의 서버 소켓 채널을 생성하는 클래스.

내부적으로 데이터그램 패킷을 처리하도록 구현되어 있다.

위에 나열된 클래스의 설명에 서버 소켓 채널을 생성하는 클래스들은 모두 io.netty.channel 패키지의 ServerChannel 인터페이스를 구현하고 있다.

ServerBootstrap의 channel 메서드에는 ServerChannel 인터페이스를 상속받은 클래스를 인수로 사용할 수 있다.

 

channelFactory - 소켓 입출력 모드 설정

소켓의 입출력 모드를 설정하는 API인 channelFactory 메서드를 살펴보자.

channelFactory 메서드는 channel 메서드와 동일하게 소켓의 입출력 모드를 설정하는 API다.

ChannelFactory 인터페이스를 상속받은 클래스를 설정할 수 있으며 channel 메서드와 동일한 기능을 수행한다.

네티가 제공하는 ChannelFactory 인터페이스의 구현체로는 NioUdtProvider가 있다.

 

handler - 서버 소켓 채널의 이벤트 핸들러 설정

서버 소켓 채널의 이벤트를 처리할 핸들러 설정 API인 handler 메서드를 살펴보자.

이 메서드를 통해서 등록되는 이벤트 핸들러는 서버 소켓 채널에서 발생하는 이벤트를 수신하여 처리한다.

LoggingHandler는 네티에서 기본으로 제공하는 코덱이다.

LoggingHandler 클래스는 이름에서 알 수 있듯이 채널에서 발생하는 모든 이벤트를 로그로 출력해준다.

이 클래스의 인수는 출력할 로그의 레벨을 지정한다.

 

LoggingHandler는 네티가 제공하는 ChannelDuplexHandler를 상속받고 있다.

이 코드의 상속 계층을 따라가보면 ChannelInboundHandler와 ChannelOutboundHandler 인터페이스를 상속받아 구현하고 있다.

즉, 채널에서 발생하는 양방향 이벤트 모두를 로그로 출력하도록 구현되어 있다.

그렇다면 연결된 클라이언트와 서버 간의 데이터 송수신 이벤트에 대한 로그도 모두 출력되어야 하는데 로그는 그렇지 않다.

ServerBootstrap 의 handler 메서드로 등록된 이벤트 핸들러는 서버 소켓 채널에서 발생한 이벤트만을 처리하기 때문이다.

 

childHandler - 소켓 채널의 데이터 가공 핸들러 설정

클라이언트 소켓 채널로 송수신되는 데이터를 가공하는 데이터 핸들러 설정 API인 childHandler 메서드를 살펴보자.

handler 메서드와 childHandler 메서드는 ChannelHandler 인터페이스를 구현한 클래스를 인수로 입력할 수 있다.

이 메서드를 통해서 등록되는 이벤트 핸들러는 서버에 연결된 클라이언트 소켓 채널에서 발생하는 이벤트를 수신하여 처리한다.

 

블로그 이미지

연미남편 nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!