Tomcat 설치
5. 자주 하는 실수 (Tip)
❌ 실수 1: sha256 확인 없이 바로 설치한다
반입 과정에서 파일이 깨져도 tar 는 대부분 조용히 일부만 풀립니다. 설치 후에야 오류를 만나면 원인 찾기가 훨씬 오래 걸립니다.
❌ 실수 2: JDK 경로를 여러 설정 파일에 직접 적는다
JAVA_HOME 을 setenv.sh·systemd 유닛·프로파일 스크립트에 각각 절대 경로로 적으면, JDK 를 올릴 때 파일을 전부 찾아 고쳐야 합니다. $BASE/jdk 링크 하나로 모으면 한 곳만 바꾸면 됩니다.
❌ 실수 3: Tomcat 프로세스를 root 로 띄운다
당장은 권한 문제가 없어 편하지만, 웹 애플리케이션 취약점이 그대로 서버 전체 권한이 됩니다. 전용 계정으로 분리하는 비용은 설치 시점에 몇 줄이면 끝납니다.
❌ 실수 4: conf 폴더에 쓰기 권한을 그대로 둔다
웹 애플리케이션 코드에 파일 쓰기 취약점이 있으면 conf/server.xml 자체가 변조될 수 있습니다. 설정 폴더는 배포 계정에서만 쓰고 실행 계정은 읽기만 하게 합니다.
❌ 실수 5: current 링크 없이 버전 폴더를 직접 참조한다
systemd 유닛의 ExecStart 에 apache-tomcat-10.1.30 처럼 버전 번호가 박힌 경로를 쓰면, 업그레이드할 때 유닛 파일까지 고치고 daemon-reload 해야 합니다. current 링크 하나만 바꾸는 절차보다 실수하기 쉽습니다.
❌ 실수 6: setenv.sh 에 JVM 튜닝 옵션까지 다 넣는다
설치 직후 단계에서 힙 크기·GC 옵션까지 정하려 하면 결정할 게 너무 많아 설치 자체가 늦어집니다. 최소 환경변수만 넣고 JVM 옵션은 03 레슨에서 인스턴스별로 잡습니다.
❌ 실수 7: systemd 없이 nohup 으로 띄우고 잊는다
nohup startup.sh & 로 띄우면 서버 재부팅 시 자동으로 시작되지 않고, 비정상 종료돼도 아무도 재시작하지 않습니다. systemd 유닛으로 등록해야 enable·Restart 가 동작합니다.
❌ 실수 8: PIDFile 경로와 CATALINA_PID 를 다르게 적는다
두 값이 다르면 systemd 는 프로세스를 찾지 못해 Type=forking 유닛이 기동 직후 실패 처리됩니다. 유닛 파일의 PIDFile 과 setenv.sh 의 CATALINA_PID 는 항상 같은 경로여야 합니다.
❌ 실수 9: 방화벽 포트를 안 열고 접속 안 된다고 문의한다
systemctl status 로 프로세스가 떠 있는 걸 확인했는데도 접속이 안 되면 방화벽부터 의심합니다. firewall-cmd --list-ports 로 포트가 실제로 열려 있는지 먼저 확인합니다.
❌ 실수 10: 업그레이드 시 이전 버전 폴더를 바로 지운다
새 버전이 문제없이 도는 걸 확인하기 전에 이전 버전 폴더를 지우면 롤백할 방법이 없어집니다. 최소 한 버전은 남겨 두고, 안정화된 뒤에 지웁니다.