org.eclipse.jetty
org.eclipse.jetty 패키지는 Jetty라는 경량화된 웹 서버와 서블릿 컨테이너의 구현체를 제공하는 Java 기반 라이브러리임.
Jetty는 웹 애플리케이션, HTTP 서버, 그리고 다양한 네트워크 기반 애플리케이션을 개발하기 위해 널리 사용됨.
경량화되고, 임베디드 방식으로 쉽게 통합할 수 있음.
Spring Boot, Spark Java, Hadoop, Atlassian Jira 등의 프로젝트에 사용됨.
Jetty의 특징
1. 경량화
Jetty는 메모리 및 리소스 사용량이 매우 적은 경량화된 서버임.
2. 임베디드 사용 가능
Jetty는 다른 애플리케이션 내에 내장(임베디드) 서버로 쉽게 통합할 수 있음.
자바 애플리케이션 내에서 직접 실행할 수 있어 개발 중 서버 배포 없이 테스트할 수 있음.
3. 비동기 지원
비동기 요청 처리와 웹 소켓 지원을 통해 효율적인 네트워크 처리와 확장성을 제공함.
4. 서블릿 지원
Jetty는 Java 서블릿 표준을 완벽히 준수하며, 서블릿 기반의 애플리케이션을 쉽게 배포하고 실행할 수 있음.
5. 플러그인 가능 구조
다양한 모듈과 플러그인으로 쉽게 기능을 확장할 수 있음.
예를 들어, HTTP/2, JMX 모니터링, SSL/TLS 등 추가 기능을 플러그인으로 사용할 수 있음.
주요 패키지 및 클래스 설명
1. org.eclipse.jetty.server
이 패키지는 Jetty의 핵심 서버 구성 요소를 포함함.
HTTP 서버를 구성하고 요청을 처리하는 클래스들이 여기에 포함됨.
주요 클래스는 다음과 같음
Server : Jetty 서버 인스턴스를 나타내며, 요청을 처리하는 전체 서버 라이프사이클을 관리함.
Server server = new Server(8080);
server.start();
server.join();
Request : HTTP 요청을 나타내며, 요청의 세부 사항(메서드, 헤더, 파라미터 등)을 제공함.
Response : HTTP 요청을 관리하며, 응답 상태 코드, 헤더, 본문 등을 설정함.
2. org.eclipse.jetty.servlet
이 패키지는 서블릿 지원과 관련된 클래스들을 포함함.
서블릿 컨테이너를 Jetty 서버에 추가하고 서블릿을 관리할 수 있는 기능을 제공함.
주요 클래스는 다음과 같음.
ServletHandler : 서블릿을 관리하고, URL 매핑을 설정하여 요청을 서블릿에 라우팅함.
Server server = new Server(8080);
ServletHandler handler = new ServletHandler();
handler.addServletWithMapping(HelloServlet.class, "/hello");
server.setHandler(handler);
server.start();
ServletContextHandler : 서블릿 컨텍스트(애플리케이션 환경)를 구성하는 클래스임.
DefaultServlet : 기본 서블릿 구현으로, 정적 리소스(HTML 파일, 이미지 등)를 제공할 때 사용됨.
3. org.eclipse.jetty.util
Jetty의 다양한 유틸리티 클래스들이 포함된 패키지임.
다양한 네트워크 작업, 문자열 처리, 비동기 작업 처리 등을 제공함.
주요 클래스는 다음과 같음.
ComponentLifeCycle : Jetty 서버의 라이프사이클을 관리하는 클래스임. 서버나 핸들러와 같은 주요 컴포넌트들의 시작과 종료를 쉽게 관리할 수 있음.
ThreadPool : Jetty가 사용하는 스레드 풀을 관리함. 비동기 작업을 처리하는 데 중요한 역할을 함.
MultiMap : Jetty에서 다중 키-값 쌍을 처리하는 데 사용되는 자료구조임.
4. org.eclipse.jetty.http
이 패키지는 Jetty의 HTTP 프로토콜 처리 관련 클래스를 포함함.
HTTP 요청과 응답을 다루고, HTTP 헤더, 상태 코드, 프로토콜을 처리함.
주요 클래스는 다음과 같음.
HttpFields : HTTP 헤더와 관련된 필드를 처리함.
HttpMethod : GET, POST, PUT 등 HTTP 메서드 타입을 정의하는 클래스임.
HttpStatus : HTTP 상태 코드를 나타내는 상수 클래스임. 예를 들어, HttpStatus.OK_200은 HTTP 200 상태를 나타냄.
5. org.eclipse.jetty.websocket
이 패키지는 WebSocket을 지원하는 기능을 포함함.
WebSocket은 실시간 양방향 통신을 지원하는 프로토콜임.
Jetty는 WebSocket의 서버 및 클라이언트 기능을 지원함.
주요 클래스는 다음과 같음.
WebSocketHandler : WebSocket을 처리하는 핸들러임. WebSocket 연결을 관리하고 메시지를 처리할 수 있음.
WebSocketServlet : 서블릿 기반으로 WebSocket 기능을 추가할 수 있는 클래스임.
6. org.eclipse.jetty.client
이 패키지는 Jetty의 HTTP 클라이언트를 구현한 패키지임.
비동기 HTTP 요청을 처리할 수 있는 강력한 HTTP 클라이언트 기능을 제공함.
주요 클래스는 다음과 같음.
HttpClient
Jetty의 HTTP 클라이언트를 나타내는 클래스임.
비동기 방식으로 HTTP 요청을 보낼 수 있으며, HTTP/1.1, HTTP/2 등의 프로토콜을 지원함.
HttpClient client = new HttpClient();
client.start();
ContentResponse response = client.GET("http://localhost:8080");
System.out.println(response.getContentAsString());
client.stop();
7. org.eclipse.jetty.io
I/O 관련 처리를 담당하는 패키지임.
비동기 입출력, 버퍼링, 네트워크 스트림 처리 등의 기능을 포함함.
주요 클래스는 다음과 같음.
EndPoint : I/O 작업의 끝점을 나타내며, 네트워크 소켓과 데이터를 주고받는 역할을 함.
ByteBufferPool : ByteBuffer를 재사용하여 메모리 사용량을 줄이기 위한 풀을 관리하는 클래스임.
Jetty 서버의 기본 사용 예시
다음은 간단한 Jetty 서버를 설정하고 서블릿을 추가하여 HTTP 요청을 처리하는 예시임.
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletHandler;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloWorldServer {
public static void main(String[] args) throws Exception {
// Jetty 서버 생성 (포트 8080)
Server server = new Server(8080);
// 서블릿 핸들러 추가
ServletHandler handler = new ServletHandler();
server.setHandler(handler);
// 서블릿 추가 (URL 매핑 /hello)
handler.addServletWithMapping(HelloServlet.class, "/hello");
// 서버 시작
server.start();
server.join();
}
// 서블릿 클래스 정의
public static class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.setContentType("text/html");
resp.getWriter().println("<h1>Hello from Jetty!</h1>");
}
}
}
Jetty와 Sprint Boot와 통합
Sprint Boot는 기본적으로 Tomcat을 내장 서버로 사용하지만, Jetty로 변경할 수 있음.
pom.xml에서 Tomcat 관련 의존성을 제거하고 Jetty 의존성을 추가하면 됨.
Maven 의존성 설정
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
이 설정을 하면 Sprint Boot 애플리케이션이 Jetty 서버에서 실행됨.
주요 활용 사례
임베디드 웹 서버
Jetty는 애플리케이션 내부에 임베디드되어 HTTP 서버를 제공할 수 있어 자바 애플리케이션의 배포를 단순화함.
WebSocket 지원
실시간 양방향 통신을 필요로 하는 애플리케이션(채팅 등)에서 WebSocket을 지원함.
서블릿 컨테이너
Java EE 서블릿 표준을 지원하며, 서블릿 기반 애플리케이션을 배포할 수 있음.
비동기 HTTP 클라이언트
Jetty는 비동기 HTTP 클라이언트를 통해 높은 성능을 제공함. RESTful API 통신에 적합함.
결론
org.eclipse.jetty 패키지는 경량화되고 고성능인 HTTP 서버와 서블릿 컨테이너를 제공하는 Java 라이브러리임.
다양한 서블릿 기반 애플리케이션과 비동기 요청 처리, WebSocket 지원 등을 통해 웹 애플리케이션의 핵심 역할을 수행할 수 있음.
특히 경량성, 임베디드 가능성, 그리고 비동기 처리 기능 덕분에 많은 Java 기반 프로젝트에서 Jetty가 사용되고 있음.
'Data Engineering > Zeppelin' 카테고리의 다른 글
[Zeppelin] 앵귤러와 리액트 (2) | 2024.09.29 |
---|---|
[Zeppelin] org.glassfish.hk2 (0) | 2024.09.23 |
[Zeppelin] io.micrometer.core.instrument 패키지 (0) | 2024.09.20 |
[Zeppelin] Maven 기본 구조 (0) | 2024.09.20 |
[Zeppelin] Maven (2) | 2024.09.18 |