• 티스토리 홈
  • 프로필사진
    알쓸개잡
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
알쓸개잡
  • 프로필사진
    알쓸개잡
    • 분류 전체보기 (92)
      • 스프링부트 (52)
      • AWS (5)
      • 쿠버네티스 (7)
      • 자바 (19)
      • 인프라 (0)
      • ETC (8)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      • 반응형
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 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
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바