페이지 불러오는 중
아파치 톰캣(Apache Tomcat)은 설정 파일 관리 방식에 따라 시스템 업데이트 생산성과 인프라 운영 안정성이 크게 좌우된다.
본 가이드는 톰캣 conf/ 디렉터리의 5대 핵심 설정 파일(server.xml, web.xml, context.xml, logging.properties, tomcat-users.xml)의 역할 및 보안 관리 포인트, 원본 catalina.sh를 보존하고 설정을 완벽히 격리하는 setenv.sh 운영 및 CATALINA_OPTS 분리 이유, 그리고 최신 Tomcat 9/10 기반 OpenSSL 및 TLSv1.2/1.3 SSL(HTTPS) 튜닝 방법을 정리한다.
tomcat/conf/
├── server.xml # 톰캣 서버 주 설정 (포트, 커넥터, 스레드풀, 엔진, SSL)
├── web.xml # 전역 웹 애플리케이션 공통 설정 (MIME, 디렉터리 리스팅, 에러페이지)
├── context.xml # 전역 컨텍스트 환경 및 외부 리소스(JNDI, DataSource) 정의
├── logging.properties # 톰캣 엔진 자체 로그 레벨, 파일 크기 및 보관 주기 제어
└── tomcat-users.xml # 톰캣 매니저 GUI 콘솔 접근 계정 및 역할(Role) 정의web.xml과 context.xml을 거의 수정하지 않고 유지한다.application.yml에서 선언하고 직접 제어하는 것이 표준 아키텍처 모델이다.톰캣 구동 스크립트인 catalina.sh는 실행 시 bin/setenv.sh 파일의 존재 여부를 자동 검사하여 환경 변수로 로드하도록 설계되어 있다.
# catalina.sh 내부의 실제 동작 로직
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
. "$CATALINA_BASE/bin/setenv.sh"
ficatalina.sh를 직접 수정하면 톰캣 버전 패치나 바이너리 교체 시 커스텀 설정이 덮어쓰기되어 증발하거나 꼬이게 됨.setenv.sh로 설정을 격리하면 톰캣 버전이 변경되어도 setenv.sh 파일 하나만 복사하면 되므로 인프라 관리가 극도로 안전해짐.[ JAVA_OPTS ] ──> 톰캣 Start / Stop / 외부 자바 도구 실행 시 전역 적용 (Stop 시 OOM 유발 위험)
[ CATALINA_OPTS ] ──> 오직 톰캣이 '구동(start/run)'되어 요청을 서빙할 때만 적용 (사이드 이펙트 제로)tomcat/bin/setenv.sh)#!/bin/sh
# 1. 톰캣 구동 시에만 적용할 JVM 힙 메모리 및 G1GC 옵션 지정
CATALINA_OPTS="-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
# 2. 타임존 및 인코딩 공통 설정
CATALINA_OPTS="${CATALINA_OPTS} -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Seoul"
# 3. 운영 환경을 위한 헤드리스 모드 (GUI 그래픽 미사용 설정)
CATALINA_OPTS="${CATALINA_OPTS} -Djava.awt.headless=true"
export CATALINA_OPTSTomcat 9.x / 10.x 이상에서는 느린 Java JSSE 대신 리눅스 자체 OpenSSL 엔진을 활용하여 압도적인 핸드셰이크 성능과 HTTP/2를 지원하는 <SSLHostConfig> 표준 구성을 권장한다.
인증서 발급 기관에서 수령한 키 파일들을 톰캣 내부의 안전한 경로(예: conf/ssl/)에 배치한다.
server.crt: 공개키 및 인증서 체인 (Certificate Chain)server.key: 개인키 (비밀번호가 제거된 복호화 상태 권장)conf/server.xml)<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true">
<SSLHostConfig protocols="TLSv1.2+TLSv1.3"
ciphers="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384">
<Certificate certificateFile="conf/ssl/server.crt"
certificateKeyFile="conf/ssl/server.key"
type="RSA" />
</SSLHostConfig>
</Connector>protocols="TLSv1.2+TLSv1.3":ciphers="...":
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.