- Spring Boot Embedded Tomcat 서버 설정2023년 11월 03일
- 알쓸개잡
- 작성자
- 2023.11.03.:55
Spring Boot 애플리케이션은 tomcat, jetty, undertow 내장 서버를 사용할 수 있지만 디폴트 내장 서버는 tomcat을 사용한다.
tomcat 내장 서버를 바로 사용할 수 있는 기본 구성 세트가 있지만 속성 또는 yaml 파일을 이용하여 내장 톰캣 서버를 구성하고 기본 설정을 변경할 수 있다.
내장 서버 autoconfiguration
spring-boot-autoconfigure에 포함된 내장 서버 관련 auto configuration 관련 코드는 다음 패키지에 있다.
- org.springframework.boot.autoconfigure.web.embedded
내장 서버 관련 설정 클래스는
- org.springframework.boot.autoconfigure.web.ServerProperties 클래스 파일이다.
ServerProperties 클래스 파일을 살펴보면
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true) public class ServerProperties { ... private final Tomcat tomcat = new Tomcat(); private final Jetty jetty = new Jetty(); private final Netty netty = new Netty(); private final Undertow undertow = new Undertow(); ... }
내장 서버의 타입에 따른 설정 항목은 다음과 같음을 알 수 있다.
- server.tomcat.* : Tomcat 관련 설정
- server.jetty.* : Jetty 관련 설정
- server.netty.* : Netty 관련 설정 (반응형 웹)
- server.undertow.* : Undertow 관련 설정
Tomcat 관련 설정 항목에 대해서 spring 공식 문서를 참고해도 좋지만 ServerProperties 파일에 정의된 Tomcat inner 클래스 정의를 살펴보는 것도 설정 항목을 파악하는 데 있어서 나쁘지 않은 것 같다.
ServerProperties 클래스 파일의 Tomcat inner class가 정의된 구성은 다음과 같다.
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true) public class ServerProperties { ... ... public static class Tomcat { ... private final Accesslog accesslog = new Accesslog(); private final Threads thread = new Threads(); ... private final Resource resource = new Resource(); private final Mbeanregistry mbeanregistry = new Mbeanregistry(); private final Remoteip remoteip = new Remoteip(); ... ... //server.tomcat.accesslog.* public static class Accesslog { ... ... } //server.tomcat.thread.* public static class Threads { ... ... } //server.tomcat.resource.* public static class Resource { ... ... } //server.tomcat.mbeanregistry.* public static class Mbeanregistry { ... ... } //server.tomcat.remoteip.* public static class Remoteip { ... ... } } }
내장 Server and Port
server.port=8181 server.address=ip_address
server.port를 지정하지 않으면 디폴트로 8080포트가 사용된다.
서버 포트를 변경하는 방법에 대한 자세한 내용은 아래 링크를 참고하기 바란다.
2023.09.16 - [스프링부트] - Spring boot embedded server의 default 포트 변경
Spring boot embedded server 의 default 포트 변경
기본적으로 Spring Boot 애플리케이션은 임베디드 톰캣 서버의 포트 8080으로 동작한다. Spring Boot의 기본 임베디드 서버 포트를 다른 포트로 변경할 수 있는 몇 가지 방법에 대해서 기록한다. 포트
devel-repository.tistory.com
Tomcat access log 활성화 및 구성
기본적으로 내장 톰캣 서버의 access log 설정은 비활성화 된다.
ServerProperties 클래스 파일의 Tomcat.Accesslog inner class를 살펴보면 다음과 같이 초기값이 지정되어 있다.
server.tomcat.accesslog.enabled 속성을 사용하여 활성화할 수 있다.
server.tomcat.accesslog.enabled=true
다음은 access log 디렉터리 위치를 지정하는 설정이다.
server.tomcat.accesslog.directory=logs
다음과 같이 access log 파일 이름의 접미사 또는 접두사를 변경할 수 있다.
# access log 파일 접두사 설정 server.tomcat.accesslog.prefix=access # access log 파일 접미사 설정 server.tomcat.accesslog.suffix=.log
다음과 같이 access log 파일 이름의 날짜 형식을 수정할 수 있다.
날짜 형식을 지정하지 않은 경우 디폴트로 ". yyyy-MM-dd"가 사용된다.
지정된 날짜 형식은 SimpleDateFormat 클래스에 의해서 날짜 변환이 된다.
server.tomcat.accesslog.file-date-format=yyyyMMdd
기본적으로 tomcat은 access log를 영구적으로 저장한다. 다음과 같이 access log 보관 일수를 설정할 수 있다.
server.tomcat.accesslog.max-days=7
Tomcat 서버 Connections 설정
Tomcat 내장 서버에는 스레드 풀링 메커니즘이 내장되어 있다.
간혹 서버 리소스의 제약으로 인해 스레드 풀 개수를 조정해야 할 필요가 있는 경우 설정을 통하여 변경할 수 있다.
디폴트는 다음과 같다.
- thread pool max : 200 (최대 thread pool 개수)
- thread min spare : 10 (최소 worker thread 수)
public static class Threads { /** * Maximum amount of worker threads. */ private int max = 200; /** * Minimum amount of worker threads. */ private int minSpare = 10; ... }
다음은 thread pool max를 100으로 설정하고 최소 worker thread 수를 5개로 설정한 예이다.
server.tomcat.thread.max=100 server.tomcat.thread.min-spare=5
클라이언트로 연결 이후 요청을 받기까지 타임아웃 설정을 변경할 수 있다.
server.connection-timeout=10s
요청 헤더 크기 및 요청 본문 크기 설정
# 최대 HTTP 헤더 크기 설정 (디폴트 8KB) server.max-http-request-header-size=8KB # 최대 HTTP Request Body 크기 설정 (디폴트 2MB) server.tomcat.max-swallow-size=2MB # 최대 POST Request 크기 (디폴트 2MB) server.tomcat.max-http-form-post-size=4MB
SSL 설정
# Enable SSL (디폴트 true) server.ssl.enabled=true # SSL 프로토콜 설정 (디폴트 "TLS") server.ssl.protocol=TLS # 별칭 설정 # 별칭은 키 저장소에 있는 키에 사용된다. # 별칭을 지정하지 않으면 키 저장소의 첫 번째 키가 사용된다. server.ssl.key-alias=tomcat # 키 저장소 경로, 키 저장소 유형, 키 저장소 공급자 및 비밀번호 설정 server.ssl.key-store=<키 저장소 경로> server.ssl.key-store-type=<키 저장소 유형> server.ssl.key-store-provider=<키 저장소 공급자> server.ssl.key-store-password=<키 저장소 비밀번호> # 클라이언트 인증서는 trust store를 통해서 유효성을 검사한다. # trust store 경로, 유형, 공급자 및 비밀번호 설정 server.ssl.trust-store=<trust store 경로> server.ssl.trust-store-type=<trust store 유형> server.ssl.trust-store-provider=<trust store 공급자> server.ssl.trust-store-password=<trust store 비밀번호>
Spring Boot 내장 서버에 대한 주요 설정에 대해서 기록하였지만 상당히 많은 설정 항목이 있음을 알 수 있다.
Spring 공식 문서를 통해서 내장 서버에 대한 설정항목을 확인할 수도 있지만 spring-boot-autoconfigure의
org.springframework.boot.autoconfigure.web.ServerProperties 클래스 파일을 살펴보는 것도 설정항목을 파악하는데 많은 도움이 될 수 있을 것이다.
반응형'스프링부트' 카테고리의 다른 글
spring multi module 프로젝트 만들기 (0) 2023.11.19 Spring REST 서비스 예외 처리 방법 (0) 2023.11.09 Spring Data JPA 에서 공간 정보(Spatial Data) 사용하기 (0) 2023.11.01 Spring REST 컨트롤러에서 HTTP 헤더 읽기 (0) 2023.10.29 Spring에서 특정 HTTP 응답 상태 반환하기 (0) 2023.10.28 다음글이전글이전 글이 없습니다.댓글