-
[네트워크] NettyCS/네트워크 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