Spring

[Spring] Netty 개념

lakelight 2022. 8. 11. 14:55
728x90
반응형

Netty

비동기 네트워크 프레임워크입니다.
Channel에서 발생하는 이벤트들을 EventLoop가 처리하는 구조를 가집니다.

 

  • Channel
    • 기본 입출력 작업은 네트워크 전송에서 제공하는 기본형을 이용합니다.
    • 자바 기반 네트워크 기본 구조는 Socket 클래스입니다.
    • Netty의 Channel 인터페이스는 Socket으로 직접 작업할 때 복잡성완화하는 API를 제공합니다.
  • EventLoop
    • 이벤트를 실행하기 위한 무한루프 쓰레드입니다.
    • Channel에서 발생한 이벤트는 이벤트 큐입력됩니다.
    • 이벤트 큐에 입력된 이벤트가 있을 때 해당 이벤트를 꺼내서 이벤트를 실행합니다.
    • 지원하는 스레드 종류에 따라 단일 스레드 이벤트 루프와 다중 스레드 이벤트 루프로 나뉩니다.
    • 이벤트 루프가 처리한 이벤트의 결과 돌려주는 방식에 따라 콜백 패턴퓨처 패턴으로 나뉩니다.

이미지 출처: https://velog.io/@wnwjq462/Spring-Webflux-Netty-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90

 

  • EventLoopGroup
    • TCP 클라이언트는 이벤트 루프 그룹을 사용합니다.
    • 워커 스레드는 초기화 시점에 런타임에 사용할 수 있는 프로세서 수로 세팅을 합니다.
    • 다른 설정이 필요하다면 LoopResource create() 메서드 중 하나를 사용합니다.
    • 여러개의 EventLoop를 가지고 있는 풀이라고 생각하면 됩니다.
  • Selector
    • 요청에 대한 이벤트를 선택하게 해줍니다.
  • ChannelHandler
    • 입출력 이벤트나 Operation을 제어하는 핸들러
    • 실제 요청에 대한 제어를 하기 위한 인터페이스 입니다.
  • ChannelPipline
    • 입력으로 출력을 전달할 수 있도록 파이프라이닝을 한 형태입니다.
    • 이벤트 핸들러를 단일 처리기로 계속 연결하는 대신, 입력으로 출력을 전달할 수 있도록 파이프라인 개념을 통해 전체 처리에 대한 Sequence를 연결합니다.

이미지 출처: https://velog.io/@wnwjq462/Spring-Webflux-Netty-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90

 

  • BootStrap
    • 프로세스를 지정된 포트로 바인딩하거나 지정된 호스트와 포트에서 실행 중인 다른 호스트로 연결하는 등의 일을 하는 Application의 네트워크 레이어를 구성하는 컨테이너를 제공합니다.
  • Netty Resources
    • Channel에 대한 Context 정보를 가진 Connection을 관리하는 Contract
    • EventLoop Resource
  • Disposable
    • 람다 기반 subscribe() 메서드는 모드 Disposable 타입을 리턴합니다.
    • Disposable 인터페이스는 dispose() 메서드 호출을 통해 구독을 취소할 수 있습니다.
    • Flux, Mono 관점에서 취소는 소스가 데이터 생산을 중단해야하는 신호입니다.

 

[참고]

1. Spring Webflux - Netty 기본 개념

728x90
반응형