(1) Netty Bootstrap이란?


- 애플리케이션의 동작 및 설정을 지정해주는 헬퍼클래스






(2)  Bootstrap의 종류


- ServerBootstrap

- bootstrap


=> bootstrap은 클라이언트에서 사용하며, 구조적으로 ServerBootstrap과 동일








(3)  Bootstrap의 논리적구조






(4)  Bootstrap의 예제코드


public EchoServer() {


   public static void main(String[] args){

        bossGroup = new NioEventLoopGroup(1);  // 생성자에 1이므로 단일스레드로 동작하는 객체

        workerGroup = new NioEventLoopGroup(); // 생성자 인수가 없으면 cpu 코어 수에 따라 설정된다.


    bootstrap = new ServerBootstrap();

    bootstrap.group(bossGroup, workerGroup) // boss – 연결, worker - 입출력

        .channel(NioServerSocketChannel.class) // 부모쓰레드(boss) 입출력모드 설정 NIO모드

        .childHandler(new ChannelInitializer<SocketChannel>() { //worker쓰레드 자식 채널의 초기화

          @Override

          protected void initChannel(SocketChannel socketChannel) throws Exception {

            ChannelPipeline pipeline = socketChannel.pipeline();

            // 핸들러 추가

            pipeline.addLast(new EchoServerHandler());

          }

        });


     }

 bootstrap.bind(host,port).sync();  //socket 주소와 port binding

  }






(5)  Bootstrap의 구체적인 옵션


group: 이벤트 루프 설정

클라이언트와 달리 이벤트 루프가 2개 필요


channel: 소켓 입출력 모드 설정

LocalServerChannel: 로컬 가상 통신을 위한 소켓 채널

OioServerSocketChannel: Blocking 소켓 채널

NioServerSocketChannel: Nonblocking 소켓 채널

EpollServerSocketChannel: epoll 소켓 채널 (리눅스에서만적용)

OioSctpServerChannel: Blocking sctp 소켓 채널

NioSctpServerChannel: Nonblocking sctp 소켓 채널

SCTP(Stream Control Transmission Protocol): Layer 4 protocol

NioUdtByteAcceptiorChannel: Nonblocking udt 소켓 채널

NioUdtMessageAcceptorChannel: blocking udt 소켓 채널

UDT(UDP-Based Data Transfer): Layer 7 protocol


channelFactory: 소켓 입출력 모드 설정

Netty에서 기본 제공하는 channel class보다 더 복잡한 로직이 필요할 때 사용


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

부모 쓰레드에서 발생한 이벤트만 처리


childHandler: 클라이언트 소켓 채널의 이벤트 핸들러 설정

자식 쓰레드에서 발생한 이벤트만 처리


option - 서버 소켓 채널의 소켓 옵션 설정

기본적으로 자바에서 설정할 수 있는 모든 소켓 옵션 설정 가능

TCP_NODELAY: Nagle 알고리즘 비활성화 여부 설정

SO_KEEPALIVE: 정해진 시간마다 keepalive packet 전송

SO_SNDBUF: 커널 송신 버퍼 크기

SO_RCVBUF: 커널 수신 버퍼 크기

SO_REUSEADDR: TIME_WAIT 상태의 포트에도 bind 가능해짐

SO_LINGER: 소켓을 닫을 때 송신 버퍼에 남은 데이터 전송 대기 시간

SO_BACKLOG: 동시에 수용 가능한 소켓 연결 요청 수


childOption: 클라이언트 소켓 채널의 소켓 옵션 설정








+ Recent posts