ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [네트워크] Netty
    CS/네트워크 2021. 4. 22. 19:07

    Netty?

    프로토콜 서버, 클라이언트 등 네트워크 애플리케이션 개발을 쉽고 빠르게 하기 위한 NIO 클라이언트-서버 프레임워크이다.

     

    기존 자바 소켓 라이브러리

    • 블로킹 함수
    • 새로운 클라이언트 Socket마다 새로운 Thread를 할당해야 함
    • 단점?
      • 여러 Thread가 입출력 데이터가 들어오기를 무한정 대기 → 리소스 낭비
      • 많은 수의 Thread가 필요하고 컨텍스트 스위칭이 잦아 오버헤드 발생

     

    자바 NIO (Non-Blocking Input Output)

    • 네트워크 리소스 사용률을 세부적으로 제어하는 Non-Blocking 호출이 포함한다. (비동기적 네트워크 통신)
    • 시스템의 이벤트 통지 API를 통해 논 블로킹 소켓을 등록하면 해당 소켓의 정보를 확인 할 수 있다.

    • Selector에 하나 이상의 채널을 등록한 후에는 select() 메소드를 호출할 수 있습니다. select() 메소드는 accept, connect, read, write 이벤트에 대해 준비(ready) 되어 있는 채널을 반환합니다. (클라이언트 당 Thread 필요 X)
    • 메서드가 반환되면 Thread는 Channel에 준비 완료된 이벤트를 처리할 수 있습니다. (비동기적인 통신 구조)

    Netty 동작 원리?

    • 비동기 이벤트 기반 네트워크 프레임워크
    • 하나의 EVENT LOOP(single thread)에서 들어오는 incoming request에 대한 I/O를 담당하고, 해당 작업에 대한 처리는 worker thread에서 수행
      • Non-Blocking 호출로 작업 완료를 기다리지 않고 리턴한다.
      • 비동기 입출력으로 즉시 반환하며 작업이 완료되면 이를 통지한다.

     

    'CS > 네트워크' 카테고리의 다른 글

    [네트워크] HTTP vs TCP 차이  (0) 2021.04.26
    [네크워크] 양방향 통신 종류  (0) 2021.04.22
    [네트워크] gRPC  (0) 2021.04.22
    [네트워크] HTTP/2  (0) 2021.04.22
    [네트워크] Sticky Session  (0) 2021.04.22

    댓글

Designed by Tistory.