Netty UDP 서버 학습

Taeyeon Kim·2023년 3월 16일
0

주제

Netty 논블로킹 네트워크 프레임워크 기초 학습

목표

  1. Netty의 기초 이론 학습
  2. Netty UDP 서버 구현 실습

내용

Netty란?

Netty는 NIO네트워크 어플리케이션을 구현할 때 필요한 기능들을 미리 구현하여 제공함으로써 이벤트기반 비동기 네트워크 어플리케이션 개발을 용이하게 해주는 프레임워크입니다.

자바 NIO 패키지를 활용해 직접 개발하는 것에 비해, Netty를 활용하면 얻을 수 있는 이점은 아래와 같습니다.

  • 개발속도 향상
  • 유지보수 용이
  • 일정한 성능 보장

이벤트 기반 : 이벤트 기반 프로그래밍이란, 프로그램에서 발생하는 이벤트를 감지하여 그에 따라 프로그램의 흐름이 결정되는 개발 패러다임을 말한다. 클라이언트에서 서버로 데이터를 전송할 때, Netty는 데이터 핸들러를 통해서 전송하기 때문에 전송 과정에서 각 이벤트의 발생 여부에 따라 로직을 작성할 수 있다.

추상화 수준 : 이벤트의 추상화 수준이란 '이벤트를 얼마나 디테일한 수준까지 직접 관리하는가?'를 말한다. 추상화 수준이 높다면 큼직한 이벤트에 대해서만 제어를 한다는 것이고, 추상화 수준이 낮으면 세세한 이벤트들을 모두 관리하고 제어한다는 것을 말한다. 클라이언트의 수를 예측할 수 없는 어플리케이션에서, 추상화 수준이 너무 낮으면 발생하는 이벤트들을 감당하기 어려울 것이다.

BIO Connector : JAVA의 기본적인 I/O 기술을 사용하는 커넥터.

접속자 한명당 하나의 스레드를 생성하는 구조. 커넥션이 닫힐 때까지 하나의 스레드는 특정 커넥션에 할당되어 있다. 리소스에 대한 낭비가 생기는 방식. 블로킹 모드의 소켓은 성공, 실패 여부가 결정될 때까지 응답을 돌려주지 않는다. 동기 통신과 유사한 개념으로 이해하면 된다.

NIO Connector : 하나의 스레드가 동시에 많은 채널을 관리하는 방식.

Selector에 의해 data 처리가 가능할 때만 스레드를 사용하기 때문에 유휴 상태로 낭비되는 스레드 또한 줄어든다.

NIO의 주요 구성요소는 Http11NioProtocol, Mapper, CoyoteAdapter 가 있다.

논블로킹 모드의 소켓은 성공, 실패 여부와 상관없이 응답을 돌려준다. 비동기 통신과 유사한 개념으로 이해하면 된다.

단, 동기와 비동기는 호출되는 함수의 작업 완료 여부를 호출한 함수 / 호출 받은 함수 중 누가 관리하느냐가 결정하고,
블로킹과 논블로킹은 호출되는 함수가 응답을 완료 후 리턴 / 즉시 리턴 하느냐 여부가 결정한다.

참고자료

그래들 빌드 시 의존라이브러리 포함 - https://lemontia.tistory.com/1056

네티 서버 구현 - https://ecolumbus.tistory.com/174

네티 클라이언트 구현 - https://ecolumbus.tistory.com/175

0개의 댓글