본문 바로가기
IT/JAVA

Netty(2) - Bootstrap

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

Bootstrap 이란 Application의 동작 및 설정을 지정해주는 helper class 이다.

사전적 의미를 찾아보면 "그 자체의 동작에 의해서 어떤 소정의 상태로 이행하도록 설정되어 있는 방법" 이다.

같은 맥락이라고 이해하면 된다.

Bootstrap을 통해 Netty의 Socket mode 나 thread 등을 쉽게 설정할 수 있다.

그리고 EventHandler 또한 Bootstrap을통해 설정해야 한다.

Bootstrap은 ServerBootstrap 과 그냥 Bootstrap으로 나뉜다.

ServerBootstrap은 Server용, 그냥 Bootstrap은 Client 용이라고 이해하면 된다.

Bootstrap 을 사용하는 예제 코드

@RequiredArgsConstructor 
public EchoServerEx(){ 
  private final ServerBootstrap bootstrap; 
  
  public static void main(String[] args) { 
    EventLoopGroup parentGroup = new NioEventLoopGroup(1);
    EventLoopGroup childGroup = new NioEventLoopGroup(); 
    bootstrap.group(bossGroup, childGroup) 
    .channel(NioServerSocketChannel.class) 
    .childHandler(new ChannelInitializer<SocketChannel>() { 
      @Override
      protected void initChannel(SocketChannel socketChannel) throws Exception {
        ChannelPipeline pipeline = socketChannel.pipeline(); 
        pipeline.addLast(new EchoServerHandler()); 
      } 
    }); 
  } 
  bootstrap.bind(host, port).sync(); 
}

Bootstrap의 API를 살펴보자.

group

- 이벤트 루프에 대한 설정

- parentGroup은 Client의 connection 요청을 수락하는 역할을 담당하고

- childGroup은 I/O와 이벤트 처리를 담당한다.

channel

- 소켓 입출력 모드 설정

NioServerSocketChannel: Nonblocking 소켓 채널 
OioServerSocketChannel: Blocking 소켓 채널 
LocalServerChannel: 로컬 가상 통신을 위한 소켓 채널 
EpollServerSocketChannel: epoll 소켓 채널 
OioSctpServerChannel: Blocking sctp 소켓 채널 
NioSctpServerChannel: Nonblocking sctp 소켓 채널 
NioUdtByteAcceptiorChannel: Nonblocking udt 소켓 채널 
NioUdtMessageAcceptorChannel: blocking udt 소켓 채널

channelFactory

- channel 처럼 소켓 입출력 모드를 설정하는데

  기본적으로 제공하는 channel class 보다 더 복잡한 로직이 필요할 때 사용한다.

handler

- server socket channel의 event handler 설정

  부모 thread 에서 발생한 이벤트(ex. connect, closed)만 처리

childHandler

- client socket channel의 event handler 설정

  자식 thread 에서 발생한 이벤트(ex. read, write)만 처리

option

- server socket channel의 socket option 설정

TCP_NODELAY: Nagle 알고리즘 비활성화 여부 설정 
SO_KEEPALIVE: 정해진 시간마다 keepalive packet 전송 
SO_SNDBUF: 커널 송신 버퍼 크기 
SO_RCVBUF: 커널 수신 버퍼 크기 
SO_REUSEADDR: TIME_WAIT 상태의 포트에도 bind 가능해짐 
SO_LINGER: 소켓을 닫을 때 송신 버퍼에 남은 데이터 전송 대기 시간 
SO_BACKLOG: 동시에 수용 가능한 소켓 연결 요청 수

 

childOption

- client socket channel의 socket option 설정

728x90
반응형
LIST