성장에 목마른 코린이

[Java] Netty Framework 소개 본문

Java

[Java] Netty Framework 소개

성장하는 코린이 2022. 10. 31. 16:41
728x90

Netty Framework는 전세계 개발자들이 사용하는 자바 네트워크 애플리케이션 프레임워크입니다.

Netty의 공식 홈페이지에서는 'Netty는 비동기 이벤트 기반 네트워크 응용 프로그램 프레임워크' 라고 소개하고 있습니다.

 

Netty는 단순히 네트워크 통신과 관련된 기능을 제공할 뿐만 아니라

일반적으로 네트워크 애플리케이션에서 사용하는 다양한 기능들을 포함하고 있습니다. 

덕분에 자바 프로그래머들은 네트워크 프로그래밍이나 멀티스레드 관련된 처리보다는

자신들의 비즈니스 로직에 좀 더 집중할 수 있게 되었습니다.

Netty를 이용한 애플리케이션은 최소 10만개 이상의 클라이언트 커넥션을 처리할 수 있을 정도로 안정되어 있습니다.

 

Netty Framework의 특징

 

1. Asynchronous IO (비동기 입출력)

Netty Framework는 비동기처리를 지향합니다. 비동기라하면 요청을 보낸 후 즉시 리턴된 다음,

다른 작업을 하다가 요청한 작업의 처리가 완료되었는지 확인한 다음 나중에 응답을 받는 형식입니다.

 

2. Event Model

Netty는 입출력을 위해 잘 정의된 이벤트 모델을 가지고 있습니다.

사용자가 코어 로직을 손대지 않고도 직접 이벤트 타입을 구현할 수 있도록 지원합니다.

각 이벤트 타입은 엄격하게 계층화되어 있어 서로 잘 구분됩니다.

다른 NIO Framework들은 이벤트 타입을 추가할 경우 기존 코드에 영향을 주거나 아예 커스텀 이벤트 추가를 막는 경우도 많습니다.

 

3. Universal Asynchronous I/O API

자바의 전통적인 IO API는 TCP, UDP에 따라 다른 형태의 API를 제공합니다.

각각은 다 특성과 성능이 다르기 때문에 자바 개발자가 어떤 것을 이용해서 개발을 해야하는지 미리 결정해야하는 경우가 종종 있습니다.

Netty는 Channel이라는 Async I/O 인터페이스를 가지고 있습니다.

일단 Netty앱을 개발하면 추상화를 통해서 실제 통신 부분과 상관없이 로직을 개발할 수 있습니다.

Netty는 여러개의 필수적인 transports를 하나의 API를 통해서 제공합니다.

transport 사이를 전환하는 것은 팩토리 클래스인 Channel Factory를 고르는 몇 줄만 고치면 됩니다.

심지어 아직 구현되지 않은 transport를 사용하는 클라이언트 코드를 미리 구현할 수 도 있습니다.

transport 역시 직접 구현해서 사용할 수 있습니다.

 

4. Channel Buffer

Netty는 NIO의 ByteBuffer를 사용하지 않고 독자적인 Butter API를 구현해서 사용합니다.

ByteBuffer는 flip()을 중간중간에 호출하면서 사용해야하므로 매우 헷갈립니다.

쓰기 어렵고 헷갈린다는 것은 곧 버그 발생확률이 높고 GC가 많이 발생할 수도 있습니다.

Netty는 독자적인 버퍼를 구현해 Zero Copy도 지원하고, ByteBuffer보다 빠른 성능을 구현했습니다.

다이나믹 Buffer 타입도 지원합니다.

 

5. 그 외

그 밖에 빠른 개발을 위한 수 많은 컴포넌트들을 가지고 있습니다.

네트워크 프로그래밍에서는 비즈니스 로직과 프로토콜 코덱을 분리하는게 좋은데,

Netty는 이미 수 많은 코덱을 제공하고 있습니다.

그리고 NIO에서 SSL지원은 일반적이지 않지만, Netty에서는 SSL도 구현했으며, HTTP도 구현했습니다.

사용자는 그냥 가져다 쓰면 됩니다.

 

Comments