springboot 임베디드 undertow 설정

undertow(언더토우)

undertow는 Tomcat, jetty와 같은 웹서버이다. JBoss 진영의 새로 도입된 웹서버로, 웹서버와 서블릿 컨테이너 기능을 제공한다. Java언어로 작성되었다. 초경량 웹서버라 가볍다. NON-Blocking API와 Bloking API 모두 지원한다. Apache License, version 2.0을 따르는 오픈소스이다. Java Servlet 3.1과 WebSocker을 구현하고 http upgrade를 지원한다.

https://examples.javacodegeeks.com/enterprise-java/spring/tomcat-vs-jetty-vs-undertow-comparison-of-spring-boot-embedded-servlet-containers/

위 글에서 tomcat, jetty, undertow의 성능을 단순 비교한 내용이 있는데, 솔직히 성능에서 차이는 별로 없었다.(물론 단순한 테스트이긴 함) undertow가 tomcat,jetty에 비해 약간 좋은 성능을 보여주기는 한다.

tomcat과 jetty와 달리 언더토우는 default로 HTTP Persistent connections(HTTP persistent connection, also called HTTP keep-alive, or HTTP connection reuse)를 응답헤더에 포함하고 있다.(http2가 나온 마당에 중요한 특이점은 아니다.)

springboot에서 undertow사용시 https설정이 tomcat사용시 https설정보다 훨씬 간편하다.

springboot에서 undertow설정

간단하다. default 설정인 tomcat을 제외시키고 undertow를 추가해주면 된다. 내 경우 maven 프로젝트이므로 pom.xml의 dependency를 아래처럼 수정해면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-jetty</artifactId>-->
<!--</dependency>-->

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

exclusion을 통해 default tomcat 임베드 서블릿컨테이너를 제외시키지 않으면, undertow를 추가한다 하더라도 tomcat으로 실행이 된다. 반드시 제외하자.

실행결과

참고자료

http://www.opennaru.com/jboss/undertow-is-web-server-in-wildfly-and-jboss-eap7/

https://examples.javacodegeeks.com/enterprise-java/spring/tomcat-vs-jetty-vs-undertow-comparison-of-spring-boot-embedded-servlet-containers/

http://undertow.io/