웹 개발

Spring Boot에서 undertow 사용하는 방법

노루아부지 2020. 12. 25. 11:18

undertow란?

  • 초경량 & 고성능 웹 서버
  • NIO 기반의 Bloking / NON-Bloking API 모두 제공
  • Java로 구현되어 임베디드 모드의 모든 JVM 기반 응용 프로그램에서 사용 가능
  • Apache License, version 2.0을 따르는 오픈소스
  • Java Servlet 3.1과 WebSocket을 구현하고 HTTP upgrade를 지원

 

Tomcat을 사용하면 안 되는 이유

 

Tomcat의 경우 시스템에 따라 원인도 모르게 Tomcat이 동작하지 않는 경우가 발생하는 경우가 은근히 잦습니다.

그러나 상용 WAS들은 안정적인 서비스 운영이 가능합니다. 하지만, 비용적인 문제로 Tomcat을 사용하는 경우가 많습니다.

 

JBoss는 Tomcat을 버리고 Netty라는 아주 뛰어난 Java Network Library를 이용해 새로운 Servlet Engine을 만들었는데 그것이 바로 Undertow입니다.

실제로 대규모 트래픽으로부터 Tomcat보다 안정적이라고 평가받고 있습니다.

 

 

 

설정 방법

 

spring-boot-starter-web은 default로 tomcat을 사용하고 있습니다. 따라서 undertow를 사용하기 위해서는 tomcat을 exclude 시키고 spring-boot-starter-undertow를 추가해야 합니다.

만약 tomcat을 exclude 시키지 않으면 undertow를 추가했어도 tomcat이 실행됩니다.

 

 

1. dependencies 추가

1.1. gradle을 사용할 경우

 

build.gradle에 아래처럼 수정합니다.

configurations {
    all{
        // was tomcat 제외
        exclude module: 'spring-boot-starter-tomcat'
    }
}

dependencies {
  ...
  compile("org.springframework.boot:spring-boot-starter-web")
  compile("org.springframework.boot:spring-boot-starter-undertow")
  ...
}

 

 

1.2. maven을 사용할 경우

 

pom.xml을 아래 처럼 수정합니다.

<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-undertow</artifactId>
</dependency>

 

 

 

2. application.properties 파일에 undertow 추가

server.undertow.accesslog.dir: # Undertow access log directory.
server.undertow.accesslog.enabled: true # Whether to enable the access log.
server.undertow.accesslog.pattern: %t %a "%r" %s (%D ms) # Format pattern for access logs.
server.undertow.accesslog.prefix: access_log. # Log file name prefix.
server.undertow.accesslog.suffix: log # Log file name suffix.

 

728x90
loading