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