JBoss EAP 7 웹컨테이너 Undertow – 핵심 이해와 활용 방법
JBoss EAP 7의 웹컨테이너 Undertow를 완전히 이해하세요. 핵심 개념과 활용 방법을 효과적으로 파악하여 애플리케이션 성능을 최적화하세요.
JBossEAP7에 새롭게 도입된 Undertow는 무엇일까요?
JBossEAP7에 새롭게 도입된 Undertow는 자바(Java) 언어로 작성된 웹서버(WEB Server)입니다. 이미 많은 웹서버(WEB Server)가 있는데 또 다른 웹서버(WEB Server)를 개발하게 된 이유는 무엇일까요?
그것은 웹의 발전에 따라 웹서버(WEB Server)에 새로운 기능들이 요구되기 때문입니다.
Undertow는 웹서버(WEB Server)에 대한 새로운 요구사항과 유즈케이스들을 수용할 수 있도록 유연하고 효율적으로 설계하였습니다.
Undertow는 가볍기 때문에 임베디드가 가능하고 웹 애플리케이션 서버(WAS: WEB Application Server)에 적합합니다.
뛰어난 성능 뿐만 아니라 다양한 엔터프라이즈 자바(Java) 기술들을 제공합니다.
혁신적인 새로운 API뿐만 아니라 기존의 표준 API도 함께 제공합니다. 대규모 동적 웹 애플리케이션(WEB Application)을 실행할 수 있고, 또한 기본적인 웹서버(WEB Server)를 대체할 수 있을 만큼 가볍습니다.
특히 클라우드(Cloud)와 컨테이너(Container) 환경 그리고 마이크로서비스 아키텍처(Microservice Architecture)에 필요한 웹서버(WEB Server)와 웹 애플리케이션 서버(WAS: WEB Application Server)로 활용될 수 있도록 개발하였습니다.
Undertow는 아파치 라이선스(Apache License) Version 2.0을 따른 오픈소스(Opensource)입니다.
Undertow는 무엇인가요?
JBossEAP7 또는 Wildfly에서는 JBossEAP6 (JBossAS7) 이전 버전에서 사용하던 톰캣(Tomcat) 기반의 JBoss WEB 대신 Undertow를 사용합니다. Undertow는 웹서버(WEB Server)와 서블릿 컨테이너 기능을 제공합니다.
Java Servlet 3.1 표준과 WEB Socket을 구현하고 HTTP Upgrade를 지원합니다.
또한 서블릿 배포 환경에서 고성능 Non-Blocking 핸들러를 사용할 수 있습니다.
Undertow의 I/O 부분은 JBoss 프로젝트 중 하나인 XNIO를 이용하여 처리합니다.
Undertow는 Java로 작성된 유연하면서 고성능의 웹서버이며 NIO 기반의 Blocking/Non-Blocking API를 제공합니다.
Undertow는 컴퍼지션 아키텍처를 제공하여 작은 단위의 용도를 갖는 핸들러를 연결하여 웹서버를 구축할 수 있습니다.
컴포지션 아키텍처는 Full Java Enterprise Edition Servlet 3.1 컨테이너에서 부터 Low Level의 Non-Blocking 핸들러 또는 그 중간 수준의 기능을 선택을 할 수 있는 유연성을 제공해 준다.
Undertow는 쉽게 사용할 수 있는 높은 수준의 Builder API를 통해 완전히 임베딩 할 수 있도록 설계되어 있다. Undertow의 라이프 사이클은 임베딩 애플리케이션에서 완벽하게 제어 할 수 있다.
Undertow 특징은?
구분 | 내용 |
Lightweight |
|
HTTP 업그레이드 지원 |
|
웹소켓 지원 |
|
Servlet 3.1 지원 |
|
손쉬운 임베딩 |
|
유연 |
|
Show me the CODE
이 예제는 Async IO를 사용하는 간단한 Hello World 서버입니다. 예제를 실행하기 위해 필요한 라이브러리는 Undertow-Core 뿐입니다.
〈dependency〉
〈groupid〉 io.undertow〈/groupid〉
〈artifactid〉 undertow-core〈/artifactid〉
〈version〉 1.0.0.Beta25〈/version〉
〈/dependency〉
Git으로 부터 Hello Server 다운로드 하기.
[admin@t510 gits]$ git clone https://github.com/emag/undertow-practice.git
Git 에서 받은 소스 중 “HelloWorldServer.java” 파일의 내용은 다음과 같다.
public class HelloWorldServer {
public static void main(final String[] args) {
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
exchange.getResponseSender().send("Hello World");
}
}).build();
server.start();
}
Hello Server Maven 빌드하기
$ mvn clean compile exec:java -Dexec.mainClass=org.emamotor.undertow.practice.HelloWorldServer
References & Related Links
- Undertow 공식 프로젝트 사이트 – http://undertow.io/
- JBoss WEB 공식 프로젝트 사이트 – http://jbossweb.jboss.org/
- Undertow Practice – https://github.com/emag/undertow-practice
- XNIO 공식 프로젝트 사이트 – http://xnio.jboss.org/
- Configuring Undertow Filters on Wildfly – https://www.mastertheboss.com/web/jboss-web-server/configuring-undertow-filters-on-wildfly/
거침없이 배우는 JBoss – 전준식 엮음/지&선(지앤선) |
JBoss EAP 시작 파라미터 살펴보기: Command Line 파라미터 설명
/in JBoss, Tech Talk/by 오픈마루 마케팅0JBoss EAP 6에서 인스턴스 시작 시, 참조되는 바인딩 주소와 각종 디렉터리를 지정하는 시작 파라미터들에 대해 설명한다.
Drools 6.0 성능 비교: Phreak와 Rete 알고리즘 비교
/in Tech Talk/by 오픈마루 마케팅0Drools 6.0에서는 지금까지의 ReteOO 대신 Phreak ( Lazy Matching)라는 새로운 룰 엔진 알고리즘이 도입되었다.
Apache httpd 비교 – Prefork MPM vs. Worker MPM
/in JBoss, OPENMARU/by 오픈마루 마케팅0Apache HTTPD 2.0 버전에 추가된 MPM 중 가장 많이 사용하는 Prefork MPM과 worker MPM의 차이점을 간단하게 설명합니다.