Apache Tomcat 소개와 설치 가이드

Apache Tomcat 설치와 운영 가이드입니다. Tomcat 버전과 Java 요구사항, 전용 사용자, /opt/tomcat 설치, systemd unit, 로그, WAR 배포, 보안 기본값을 정리했습니다.

Apache Tomcat은 Java 웹 애플리케이션을 실행하는 Servlet/JSP 컨테이너입니다. 운영에서는 “패키지 설치 후 8080 접속”보다 Java 버전, Tomcat major version, 실행 사용자, systemd, 로그 위치, reverse proxy 연결을 함께 잡아야 합니다.

버전 선택

Apache Tomcat 공식 문서는 Tomcat 10.1.x가 Java 11 이상, Tomcat 11.x가 Java 17 이상을 요구한다고 안내합니다. 기존 Java EE 8 애플리케이션은 Tomcat 9 계열이 필요할 수 있고, Jakarta EE 10 기반 애플리케이션은 Tomcat 10.1 계열을 봐야 합니다.

Java 설치

# Ubuntu/Debian
sudo apt update
sudo apt install -y openjdk-17-jdk curl tar

# RHEL/Rocky/Alma
sudo dnf install -y java-17-openjdk java-17-openjdk-devel curl tar

java -version

운영 사용자와 디렉터리

sudo useradd --system --home /opt/tomcat --shell /usr/sbin/nologin tomcat 2>/dev/null || true
sudo install -d -o tomcat -g tomcat /opt/tomcat

Tomcat 설치 예시

실제 다운로드 버전은 공식 다운로드 페이지에서 확인하세요. 아래는 Tomcat 10.1 계열 예시입니다.

TOMCAT_VERSION="10.1.55"
cd /tmp
curl -fLO "https://archive.apache.org/dist/tomcat/tomcat-10/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz"
sudo tar -xzf "apache-tomcat-${TOMCAT_VERSION}.tar.gz" -C /opt/tomcat --strip-components=1
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod +x /opt/tomcat/bin/*.sh

운영 자동화에서는 archive URL보다 현재 mirror와 checksum 검증을 포함하는 것이 좋습니다.

systemd unit

sudo tee /etc/systemd/system/tomcat.service >/dev/null <<'EOF'
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512m -Xmx512m -XX:+UseG1GC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
SuccessExitStatus=143
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

RHEL 계열은 JAVA_HOME 경로가 다를 수 있으므로 readlink -f $(command -v java)로 확인합니다.

sudo systemctl daemon-reload
sudo systemctl enable --now tomcat
sudo systemctl status tomcat --no-pager
curl -I http://127.0.0.1:8080/

로그와 배포

tail -f /opt/tomcat/logs/catalina.out
ls -lah /opt/tomcat/webapps
sudo cp app.war /opt/tomcat/webapps/
sudo systemctl restart tomcat

보안 기본값

  • Tomcat을 root로 실행하지 않습니다.
  • Manager/Host Manager 앱은 필요한 경우에만 제한된 IP에서 사용합니다.
  • 외부 공개는 Nginx/Apache reverse proxy 뒤에 두고 TLS는 프록시에서 처리하는 구성이 흔합니다.
  • JVM heap은 서버 메모리와 애플리케이션 특성에 맞춰 명시합니다.
  • Tomcat major version과 애플리케이션의 javax/jakarta 패키지 호환성을 먼저 확인합니다.

공식 문서

BGM EVER