Netty 주요 특징
동기와 비동기
함수 또는 서비스의 호출 방식
동기
- 특정 서비스를 호출하면 처리가 완료될 때까지 기다렸다가 결과를 받는 방식
- 쉬운 디버깅, 직관적인 흐름 추적 가능
비동기
- 서비스를 호출하여 즉시 응답을 받고, 다른 작업을 하다가 처리가 완료되었는지 확인하여 결과를 받는 방식
- 컴퓨팅 자원의 효율적 활용 가능
- Future 패턴, Observer 패턴, Callback, Reactor 패턴 등
- Nettry는 Reactor 패턴 사용
Blocking 소켓
- 연결, 데이터 입출력 과정에서 블로킹 발생
- 다중 클라이언트 처리를 위해서는 각 연결마다 스레드를 하나씩 만들어줘야함
- 병목이 발생함
- OOM 발생 가능
- 빈번한 컨텍스트 스위칭으로 인한 자원 낭비
Nonblocking 소켓
- 하나의 스레드로 여러 클라이언트 대응 가능
이벤트 기반 프로그래밍
- 주로 GUI 기반 프로그램에 많이 사용
- 추상화 수준
- 이벤트를 나누는 단위
- 저수준으로 추상화할수록 더 많은 이벤트가 발생하여 성능 이슈
- 고수준으로 추상화할수록 세부적인 제어 불가능
- ex) mouse click vs mouse key down, mouse key up
이벤트 기반 네트워크 프로그래밍
- 네트워크 이벤트의 주체는 소켓
- 데이터를 소켓에 전달하기 위해 데이터 핸들러 이용
- 로직 분리, 코드 재사용성 증가, 에러 처리 부담 완화