카테고리 없음

Netty 시작하기

hotpotato0 2022. 4. 5. 20:53

Netty 시작

최초 프로젝트 시발점

* 이통 5사 연동 SMS 게이트웨이 개발 중
1. 전문 형식은 다른데 흐름은 공통 -> 전문 해석과 비즈니스 로직의 분리
2. 받은 전문에 반응하는 것이 대부분 -> GUI 개발 처럼 이벤트 기반 개발의 필요성 추구


Netty 란? 
 '비동기' '이벤트 기반 네트워크 애플리케이션' 프레임 워크로 유지보수를 고려한 고성능 프로토콜 서버와 클라이언트를 빠르게 개발 가능!

 

비동기?

비동기 - 동기 / 블로킹 - 논블로킹의 차이

비동기 - 동기는 함수의 작업 완료 여부를 누가 신경쓰는지가 관심사
-> 함수의 작업 완료를 호출"한" 함수가 신경쓰면 동기, 호출"된" 함수가 신경쓰면 비동기

블로킹 - 논블로킹은 호출되는 함수가 바로 리턴하는지, 안하는지가 관심사
-> 바로 리턴 논블로킹, 바로 리턴하지 않는다면 블로킹

 

이벤트 기반?

Event-based Programming / Event-driven Programming -> EDP

프로그램의 흐름이 특정 이벤트에 따라 결정되는 것, 주로 인터페이스가 포함된 프로그램에 많이 사용됨. 각 이벤트를 먼저 정의하고 발생한 이벤트에 따라 코드가 실행되도록 프로그램 작성

 

추상화 수준

이벤트를 나눌때 단위의 크기 정도, 너무 추상화가 고수준이면(크게 나누면) 세부적 제어가 힘들고, 반대로 저수준이면(너무 작게 나누면) 한 동작에 대해 너무 많은 이벤트가 발생하여 성능에 악영향. 서버에 연결된 클라이언트의 수는 매우 가변적, 예측불가능하므로 적절한 추상화 단위가 중요

 

이벤트 기반 네트워크 프로그래밍

소켓에 데이터를 기록/읽으려면 소켓 채널(NIO : New Input/Output) 또는 스트림을 사용. 클라이언트에서 소켓에 연결된 스트림에 데이터를 기록하면 소켓이 해당 데이터를 인터넷으로 연결된 서버로 전송. 이때 소켓에 문제가 발생하거나 연결된 스트림에 문제 발생시 새로운 소켓을 생성하고 데이터를 전송하는 예외 처리 코드가 작동되어야함. 언제 발생할지 모르고, 다양한 상황(대기 오류, 연결 시도 중 오류 등)에 대한 예외처리 필요함. 이는 코드의 중복을 만든다. 여기에서 데이터 송수신을 이벤트 기반으로 바꾸면 이 문제를 해결 가능함.
Netty는 데이터를 소켓으로 전송하기 위해 채널에 직접 기록하는 것이 아니라 데이터 핸들러를 통해 기록. 이로인해 이벤트에 따라 로직을 분리하는 장점 그리고 코드를 재사용할 수 있다는 장점이있다.