DevOps
[CI/CD] Tomcat
cumo
2025. 4. 23. 09:52
1. Tomcat이란?
Apache Tomcat은 Java 서블릿 컨테이너이자 웹 애플리케이션 서버(WAS)로, 서블릿과 JSP(JavaServer Pages)를 실행하는 기능을 제공한다. Spring, JSP 기반 웹 애플리케이션을 구동할 때 가장 많이 사용되며, 경량성과 오픈소스라는 장점 덕분에 다양한 환경에서 활용된다.
Tomcat의 핵심 구성 요소
- Catalina: 서블릿 컨테이너 핵심 엔진
- Coyote: HTTP 요청을 받아들이는 커넥터
- Jasper: JSP 파일을 서블릿으로 변환하는 컴파일러
- Manager App: WAR 배포 및 애플리케이션 관리를 위한 웹 UI
Tomcat은 단독으로 사용되기도 하지만, Nginx나 Apache HTTP Server와 함께 리버스 프록시로 구성되기도 한다.
Tomcat의 주요 특징
오픈소스 | Apache Software Foundation에서 개발. 누구나 자유롭게 사용/배포 가능 |
경량화 | Java EE 일부만 지원 → 속도 빠르고 리소스 소모 적음 |
유연한 구성 | XML 기반 설정 파일로 커스터마이징 용이 (server.xml, web.xml) |
Java 기반 앱에 최적 | Spring MVC, JSP, Thymeleaf 기반 웹앱과 자연스럽게 연동 |
관리자 UI 제공 | /manager/html 경로를 통해 애플리케이션 배포 및 상태 모니터링 가능 |
톰캣 기본 명령어 정리
Tomcat은 대부분의 작업을 Shell Script로 수행하며, 다음 명령어들을 자주 사용한다:
디렉토리 구조
- /opt/tomcat/bin: 실행 스크립트 (startup.sh, shutdown.sh)
- /opt/tomcat/conf: 설정 파일 (server.xml, web.xml)
- /opt/tomcat/webapps: WAR 파일 배포 디렉토리
- /opt/tomcat/logs: 로그 파일 위치
# 톰캣 시작
/opt/tomcat/bin/startup.sh
# 톰캣 종료
/opt/tomcat/bin/shutdown.sh
# 톰캣 로그 실시간 보기
tail -f /opt/tomcat/logs/catalina.out
# WAR 파일 배포 (webapps 디렉토리에 복사)
cp myapp.war /opt/tomcat/webapps/
# 서버 상태 확인 (manager 웹앱)
http://your-server-ip:8080/manager/html
톰캣 설치
hostnamectl set-hostname tomcat #hostname 변경
exec bash
dnf -y install java-17-amazon-corretto #java 설치
#톰켓 다운로드
curl -O https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.40/bin/apache-tomcat-10.1.40.tar.gz
/opt/tomcat로 이동
#톰캣 실행
tomcat/bin/startup.sh
시작파일
<./startup.sh
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
>
#로컬호스트 제한 주석 처리
/opt/tomcat/webapps/host-manager/META-INF/context.xml
/opt/tomcat/webapps/manager/META-INF/context.xml
-->
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
#톰캣 bin에서 실행
./shutdown.sh
./startup.sh
유저구성
접속 확인
마무리
Tomcat은 단순한 Java 서버를 넘어서서, DevOps와 CI/CD 파이프라인의 중요한 구성 요소로도 활용할 수 있다. 기본적인 사용법을 익히고 자동화 전략을 접목하면 생산성과 운영 안정성을 동시에 향상시킬 수 있다.
주로 사용하는 기능
server.xml 구성 | 포트, 커넥터(HTTP/AJP), SSL, 컨텍스트 설정 |
WAR 배포 자동화 | scp, Jenkins, GitHub Actions와 연동하여 무중단 배포 |
로그 분석 | catalina.out 로그로 에러 추적 및 성능 모니터링 |
JVM 튜닝 | JAVA_OPTS 설정으로 GC 옵션, 힙 메모리 조정 |
HTTPS 구성 | 자체 인증서 또는 Let’s Encrypt로 HTTPS 서비스 운영 |
세션 클러스터링 | Sticky Session, Redis 세션 저장소 활용한 무중단 구성 |
Tomcat 활용 방법 및 실무 시나리오 정리표
웹 애플리케이션 배포 | Spring Boot 또는 JSP 기반 WAR 파일을 /webapps 디렉토리에 복사하여 서비스 실행 | 빠른 배포, Java 기반 웹 앱 운영 | WAR, Maven, Gradle |
개발 환경 구축 | 로컬 PC 또는 VM에 톰캣을 설치하고 테스트 서버로 운영 | 로컬 테스트 자동화, 개발 주기 단축 | IntelliJ, VS Code |
CI/CD 자동 배포 | GitHub Actions, Jenkins 등을 통해 빌드된 WAR 파일을 톰캣에 자동 전송 | 배포 자동화, 휴먼 에러 감소 | GitHub Actions, Jenkins, SCP |
역방향 프록시 구성 | Nginx 또는 Apache HTTPD 앞단에 배치하여 트래픽 분산, 보안 강화 | 보안 강화(HTTPS), 부하 분산, 도메인 관리 용이 | Nginx, mod_proxy |
HTTPS 보안 설정 | server.xml에 SSL 인증서를 등록하여 HTTPS 서비스 제공 | 통신 보안, SSL 기반 로그인/결제 처리 | Let’s Encrypt, OpenSSL |
멀티 애플리케이션 운영 | 여러 WAR 파일을 개별 Context로 분리하여 하나의 톰캣 인스턴스에서 다수 앱 실행 | 리소스 절약, 관리 편의성 | context.xml, server.xml |
모니터링 및 로그 분석 | catalina.out 및 애플리케이션 로그를 분석하여 장애 탐지 | 문제 조기 발견, 성능 분석 | ELK, tail, grep |
서버 클러스터링 | 세션 공유를 위해 여러 톰캣 인스턴스를 클러스터 구성 | 고가용성(HA), 세션 지속성 보장 | Redis, Sticky Session |
관리자 UI 활용 | /manager/html 경로에서 WAR 배포 및 서버 상태 확인 | 시각화된 서버 관리, UI 기반 수동 배포 지원 | Tomcat Manager App |