Spring/Spring Framework

[Netty] Netty가 뭐에요? - 1탄 : Netty 란? - 용어 정리

공대키메라 2025. 9. 18. 00:32

이번 새로운 회사에서 Netty 로 작동하는 Framework 에 대해 공부하려고 한다.

 

그런데 왜 Netty같은 프레임워크가 필요한지 자체도 이해를 잘 못했다.

 

 

그래서 초창기 정적 웹 서버와 관련된 지식,

 

동기와 비동기와 기존의 spring같은 서버 사용시 성능 문제점과

 

netty를 도입하면서 얻을 수 있는 장점에 대해 설명하고

 

후에는 그래서 netty를 어떻게 사용하는지 예제를 만들어 볼 것이다.

 


 

1. Netty 공식문서 - 용어 확인

개발자라면 늘 해야 하는것! 공식문서를 보는 것이다.

 

다음은 Netty 공식문서 홈페이지에서  Netty 에 대해 소개하는 글이다.

 

- 원문 -
Netty is an NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server.

- 해석 -
Netty는 NIO 클라이언트 서버 프레임워크인데, 프로토콜 서버와 클라이언트같은 네트워크 어플리케이션의 개발을 빠르고 쉽게 한다. TCP 나 UDP 소켓 서버 같은 네트워크 프로그래밍을 매우 간편화 혹은 간소화한다.
(streamline : 간소화하다 라는 타동사! 영단어도 공부하네...)

 

I see I see! 여기서 수많은 용어가 보인다!

 

  • NIO 클라이언트 서버 프레임워크
  • 프로토콜
  • 네트워크 어플리케이션
  • TCP, UDP
  • 네트워크 프로그래밍
  • 소켓 서버

솔직히 다 알만한 단어이긴 하고, 필자도 대략적으로나마 위의 것들을 간략하게 알고 있지만...

 

명확하게 뭔지 설명하려면 할 수 없다는 것이 함정! 서버를 설명하라하면 초등학생한테 뭐라고 해야할까...

 

사실 내가 학습을 하면서, 이렇게 억지로 정리하는 이유도 아주~ 쉽고 내가 이해할 수 있는 말로 적기 위해서이다.

 

 

거두절미하고 간단한 것들부터 차례대로 알아보도록 하겠다.

 

 

2. 용어 알아보기

다시 그럼... 처음부터 다시 돌려보자.

 

프로토콜?

The BigBang Theory 라는 미드를 보면 시즌1이었나? 극 중 주인공인 쉘든(sheldon)이 다음과 같은 말을 한다.

What's the protocol for leaving?

 

주인공인 쉘든은 사회 부적응자라서, 어떻게 현재 상황을 빠져나갈지 모른다는 말로 위의 말을 했다.

 

 

프로토콜은 규약이라는 뜻을 가지고 있으며,

 

네트워크 프로토콜은 컴퓨터들끼리 데이터를 주고받을 때 반드시 따라야 하는 규칙을 말한다.

 

여기서 네트워크란 두 대 이상의 컴퓨터나 장치들이 데이터를 주고받을 수 있도록 연결된 시스템을 말한다.

소켓?

https://www.geeksforgeeks.org/computer-networks/socket-in-computer-network/

 

A socket is one endpoint of a two way communication link between two programs running on the network.
The socket mechanism provides a means of inter-process communication (IPC) by establishing named contact points between which the communication take place. 

 

 

소켓은 네트워크에서 작동중인 두 개의 프로그램 사이에 양방향 통신 연결의 끝 지점 중 하나이다.

 

즉, 양방향 대화를 할 수 있는 문 중 한쪽 끝을 의미한다.

 

 

여기서 같은 컴퓨터 안에 있는 프로세스들 끼리의 통신 메커니즘을 이 socket이 제공한다.

 

다시 말해서, inter-process communication (IPC) 메커니즘을 제공하는데 소켓이 named contact points를 만들어 그 사이에 통신이 이루어지게 한다. 

 

 

결론적으로 소켓을 한줄로 표현하면? 프로세스끼리 대화할 수 있는 길을 열어주는 도구이다.

 

IP 주소와 포트 번호의 조합으로 통신 세션을 설정하고 데이터를 송수신 하는데에 사용한다.

 

소켓 서버?

서버는 뭐인가? server죠? 뭔가를 제공하는데...

 

IT분야에서는 server는 네트워크 환경에서 클라이언트에게 서비스를 제공하는 컴퓨터 시스템 혹은 프로그램을 말한다.

 

어디서든지 네트워크 환경에서 클라이언트에세 서비스를 제공하는 컴퓨터 시스템을 개발자들에게 주는 AWS를 생각하면 된다.

 

그렇다면 소켓 서버는 뭘까?

 

 

단순히 두 단어의 뜻을 이어붙여보면...

 

프로세스끼리 대화할 수 있는 길을 열어주는 도구인데, 이것을 네트워크 환경에서 클라이언트에게 서비스를 제공하도록 하는 것을 소켓 서버라고 한다.

 

즉, 네트워크 환경에서 소켓을 활용해 "서버 역할"을 수행하는 프로그램 혹은 시스템 이라고 볼 수 있겠다.

 

좀 더 쉽고 짧게 풀면? 서버 역할을 소켓을 통해 구현한 프로그램! 을 말한다.

 

 

이것을 엄청 고급스럽게 표현해보면, OS커널에 구현되어 있는 프로토콜 요소에 대한 추상화된 인터페이스 라고 한다.

 

 

여기서 필자가 헷갈렸던 부분은 운영체제와 프로그래밍에 소켓에 대해 말하는 것이 살짝 다른 점이었다.

 

 

여태 언급한 소켓이란 운영체제 관점의 소켓이엇고, 프로그래밍 관점에서의 소켓은 운영체제 소켓 자원에 접근하기 위한 API를 말할 것이다. (예시 : 자바 소켓 프로그래밍)

 

자바를 예로 들면 API겠지만, 사실 OS에서도 이를 쉽게 쓸 수 있도록 추상화 인터페이스로 제공을 하니 이것도 일종의 API라는 생각이 든다.

 

 

그렇다면 운영체제 관점에서의 소켓은 OS가 제공하는 시스템 콜 API 레벨의 추상화를 제공하며, 프로그래밍 언어에서의 소켓은 언어별 라이브러리 혹은 클래스를 통해서 기능을 제공하는 API인 것이다.

 

TCP, UDP

TCP 와 UDP는 각각 Transmission Control Protocol, UJser Datgra Protocol의 약자로, OSI 7 Layer에서 Transport Layer 에 해당한다.

 

TCP는 연결형 서비스를 지원, UDP는 비연결형 서비스로 데이터그램 방식을 제공한다.

 

TCP하면 유명한 three hand shake가 바로 떠오르며, UDP는 일방적인 무차별 공격! 을 떠올린다.

 

별도로 추후에 network에 대해 공부하는걸로 하고 간단하게만...

 

NIO

NIO는 Java1.4부터 도입된 기존 I/O 라이브러리의 한계를 개선하기 위해 나온 새로운 방식의 입출력 API이다.

 

기존에는 동기적으로 read/write방식을 처리했다면 NIO에서는 비동기적, 논블로킹 방식으로 데이터를 처리할 수 있다.

 

공식문서에서 Java NIO에 대한 설명을 좀 보면 Buffers, Charsets, Channels 에 대해 설명하고 있다.

 

Buffers는 data 컨테이너이고, Charsets 은 bytes와 Unicode character 사이를 매핑한다.

 

Channels는 어떤 I/O 대상과 "통로" 를 열어두는 객체이다.

 


They represent an open connection to an entity such as a hardware device, a file, a network socket, or a program component that is capable of performing one or more distinct I/O operations, for example reading or writing.

이를 줄이면...

Channels represent open connections to entities capable of I/O operations

이다.

 

I/O 대상(파일, 소켓, 장치 등) 과의 연결(통로)을 도와주는 추상화한 인터페이스이다.

 

대표적으로는 File, Socket, SeverSocket, DatagramChannel이 있다.

 

어플리케이션?

특정한 작업을 수행하기 위해 설계된 소프트웨어 프로그램

 

클라이언트-서버 구조

네트워크 프로그램에서 가장 기본적인 통신 구조로

 

서비스를 요청하는 쪽인 클라이언트와 서비스를 제공하는 서버로 역할을 나누어 관리하는 구조이다.

 

NIO 클라이언트 서버 프레임워크

그러면 NIO 클라이언트 서버 프레임워크는,

 

NIO를 활용해서 클라이언트 서버를 구현하도록 도와주는 프레임워크를 말한다.

 

프레임워크는 쉽게 말해 개발을 쉽게 하도록 도와주는 개발 도구이다. 유명한것으로는 spring framework가 있다.

 


이번 글에서는 웹 서버 기술 발전과 Netty의 필요성에 대해 이해하기 위해서, 용어들을 한번 다시 훑어보았다.

 

요즘은 정말 이해하고 무언갈 해야만 내것이 된다고 느낀다.

 

내가 궁금해하는 것에 대해서 꼼꼼히 체크하는 것이 이제는 AI를 통해서 더 편하게 되었으니... 학습이 정말 용이해졌다.

 

 

부쩍이나 또 너무 기초 내용만 내가 적는게 아닌가 하는 생각도 들었는데, 사실... 남의 시선의 뭐가 중요하랴... 내가 이해하는게 중요하지...

 

 

다음 글에서는 초기 웹 서버의 모습과 Servlet, Spring Framework의 출현, 그리고 Netty 의 필요성에 대해 알아볼 것이다.

 

 

참고 

https://netty.io/

https://www.geeksforgeeks.org/computer-networks/socket-in-computer-network/

https://innovation123.tistory.com/251

https://www.youtube.com/watch?v=3jQ2dBpiqPo

https://www.youtube.com/watch?v=5WaM1-Fz38g

https://docs.oracle.com/en/java/javase/24/core/java-nio.html