둘 다 자바로 만들어진 WS이다.
Netty : 비동기적인 입출력 모델을 사용하여 높은 성능을 제공
특징 | Netty | Tomcat |
프로토콜 | 다양한 프로토콜 지원 | HTTP 서버 및 서블릿 컨테이너 |
비동기 입출력 | 지원 | 미지원 |
이벤트 기반 | 지원 | 미지원 |
스레드 모델 | 다양한 스레드 모델 지원 | 고정 스레드 풀 |
메모리 사용량 | 적음 | 큼 |
높은 처리량 | 가능 | 상대적으로 낮음 |
커스터마이징 | 고급 기능 구현 가능 및 모듈화 용이 | 설정 변경만 가능 |
성능 | 높음 | 상대적으로 낮음 |
Netty는 다양한 프로토콜을 지원하며, 비동기 입출력 및 이벤트 기반 모델을 사용하여 높은 처리량을 제공함. 또한 다양한 스레드 모델을 지원하고 메모리 사용량이 적음. 커스터마이징이 용이하며, 고급 기능 구현이 가능
Tomcat은 HTTP 서버 및 서블릿 컨테이너에 특화되어 있으며, 고정 스레드 풀 모델을 사용함. 높은 처리량을 제공하지만, Netty보다 상대적으로 성능이 낮을 수 있음. 커스터마이징은 설정 변경만 가능
Netty는 비동기적인 처리와 높은 성능이 필요한 경우에 유용하며, Tomcat은 자바EE를 기반으로 한 웹 애플리케이션 개발에 유용.
Netty의 구조
1. 이벤트 루프
이벤트 루프는 작업을 수행하는 단일 스레드이다. 작업을 처리하고, 입출력 작업을 대기하고, 작업 큐에서 다음 작업을 가져오는 등의 작업을 수행함.
2. 채널
채널을 입출력 적업에 대한 추상화를 제공함. 소켓 연결, 파일 파이프, 데이터그램 등 다양한 종류의 입출력을 처리할 수 있음.
3. 이벤트 및 핸들러
입출력 작업을 처리하기 위한 도구. 채널에서 발생하는 당양한 상황을 나타내며, 이벤트를 처리함. 채널이 연결될 때, 핸들러가 연결 이벤트를 처리하여 연결을 수립함.
4. 채널 파이프라인
채널에 대한 처리 흐름을 정의함. 일련의 핸들러를 포함하며, 각 핸들러는 채널에서 발생하는 이벤드를 처리함. 핸들러는 이전 핸들러에서 발생하는 이벤트를 저달받고, 다음 핸들러로 이벤트를 전달함.
5. 비동기식 입출력
입출력 작업은 이벤트 루프에서 대기하며, 작업이 완료되면 해당 이벤트가 발생하고, 핸들러가 이벤트를 처리함. 이러한 비동기식 입출력 모델은 스레드 경합이나 블로킹 문제를 방지하고, 높은 처리량과 성능을 제공함.
6. 스레드 모델
- NIO 모델
- I/O와 이벤트 처리를 모두 담당
- I/O 작업은 Selector를 사용하여 비동기적으로 처리됨.
- 이벤트 처리는 단일 스레드에서 순차적으로 처리됨 - OIO 모델
- I/O 처리와 이벤트 처리 모두 담당
- I/O 작업은 블로킹 방식으로 처리됨.
- 이벤트 처리는 단일 스레드에서 순차적으로 처리됨 - EventLoop 그룹 모델
- I/O 처리와 이벤트 처리를 분리하여 담당함.
- I/O 작업은 이벤트 그룹 내의 다수의 스레드에서 비동기적으로 처리됨
- 이벤트 처리는 단일 스레드에서 순차적으로 처리됨 - 다중 EventLoop 그룹 모델
- I/O 처리와 이벤트 처리를 분리하여 담당함.
- I/O 작업은 이벤트루프 그룹 내의 다수의 스레드에서 비동기적으로 처리됨
- 이벤트 처리는 각 이벤트루프 그룹 내에서 별도의 스레드에서 동시에 처리됨
Netty의 스레드 모델은 I/O 처리와 이벤트 처리를 분리하고, I/O 작업은 비동기적으로 처리하므로 높은 처리량과 성능을 제공함. 또한 어플리케이션의 특성에 따라 다양한 스레드 모델을 선택할 수 있어 유연성이 높음
'스프링' 카테고리의 다른 글
[JAVA, Spring ] equals, hashcode (0) | 2023.06.12 |
---|---|
자바 스프링의 AOP구현에 사용되는 도구 2가지 (0) | 2023.03.19 |
JPA, Hibernate, Spring Data JPA (0) | 2023.01.26 |