Apache tomcat(Rocky Linux) - 10.x / 11.x 설치하기(RE)

아파치 톰캣(Apache Tomcat)

◇ 공식 홈페이지 : https://tomcat.apache.org/

과거 포스팅 : https://foxydog.tistory.com/79

※ 약 5년 전에 이미 포스팅한 내용이지만, 현재 시점에서도 동일한 방법으로 설치가 가능한지 직접 다시 테스트해 보고 부족한 내용은 보강하는 형태로 새롭게 정리해보려고 합니다.

 

톰캣(Tomcat)Apache Software Foundation에서 개발한 Java 기반의 웹 애플리케이션 서버(WAS, Web Application Server)입니다. 국내에서는 흔히 "WAS 서버"라고 부르며, Java 웹 애플리케이션을 실행하기 위한 대표적인 서버로 널리 사용되고 있습니다. 

 

과거에는 웹 서비스를 구축할 때 Apache HTTP Server와 Tomcat을 함께 구성하는 것이 일반적이었습니다. 하지만 최근에는 Spring Boot, Docker, Kubernetes와 같은 기술이 보편화되면서 톰캣의 활용 방식도 많이 변화했습니다. 또한 톰캣은 자체 HTTP 기능을 제공하기 때문에 단독으로도 웹 서비스를 운영할 수 있습니다. 과거에는 Apache HTTP Server와 연동하는 방식이 일반적이었지만, 최근에는 Spring Boot의 내장 톰캣을 활용하거나 Nginx, 클라우드 로드밸런스와 함께 사용하는 방식이 주류가 되었다고 합니다.

 

따라서 현재 관점에서 보면 "WEB 서버와 WAS 서버를 반드시 함께 사용해야 한다"기보다는 서비스 규모와 운영 환경에 따라 적절한 구성을 선택하는 것이 중요합니다.

 

◇ WEB 서버와 WAS 서버의 차이

웹 서비스를 운영하다 보면 WEB 서버와 WAS 서버라는 용어를 자주 접하게 됩니다.

WEB 서버는 사용자의 요청에 따라 정적인 콘텐츠(HTML, CSS, JavaScript, 이미지 파일 등)를 전달하는 역할을 수행합니다. 단순히 저장된 파일을 제공하는 구조이기 때문에 처리 속도가 빠르고 구성이 비교적 간단합니다.

 

반면 WAS 서버는 사용자의 요청에 따라 비즈니스 로직을 수행하고 데이터베이스와 연동하여 동적인 콘텐츠를 생성합니다. 회원 정보 조회, 게시글 등록, 로그인 처리와 같은 기능들이 대표적인 예입니다.

테스트 환경(VMware 가상 환경)

[root@localhost ~]# cat /etc/rocky-release
Rocky Linux release 9.6 (Blue Onyx) ※ 9.8까지 release

 

[root@localhost ~]# dnf update  (개발서버로 이용할 경우 보안을 위해 미리 최신 패키지 업데이트 하기)

 

[root@localhost ~]# cat /etc/selinux/config | grep SELINUX
# SELINUX= can take one of these three values:
SELINUX=disabled  (빠른 테스트를 위해 비활성화, OS 재시작 필요)

 

※ Apache tomcat을 실행하기 위해서는 필수적으로 OpenJDK 자바(JAVA) 플랫폼이 필수로 설치가 되어 있어야 하며, 록키 리눅스에는 기본 패키지에 설치가 되어 있습니다.

[root@localhost ~]# java -version
openjdk version "1.8.0_452"

OpenJDK Runtime Environment (build 1.8.0_452-b09)

OpenJDK 64-Bit Server VM (build 25.452-b09, mixed mode)

 

OpenJDK 공식 홈페이지 : https://openjdk.org/


① OpenJDK 설치

※  OpenJDK가 이미 설치되어 있거나 설치된 1.8 버전을 그대로 사용할 경우는 ②으로 바로 진행

[root@localhost ~]# dnf list java*  (설치 가능한 패키지 확인)

 

이전에는 java-11-openjdk를 설치했으나 최대한 최신 버전으로 설치를 진행해 보도록 하겠습니다.

[root@localhost ~]# dnf install java-25-openjdk.x86_64


② 자바(JAVA) 패키지가 2개 이상 설치 되어 있을 경우 변경 방법

[root@localhost ~]# update-alternatives --config java

3 개의 프로그램이 'java'를 제공합니다.

선택    명령 (* 표시가 기본 사용 설정)

-----------------------------------------------
*+ 1     java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64/jre/bin/java)
    2     java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el8_4.x86_64/bin/java)

    3     /usr/lib/jvm/java-25-openjdk/bin/java ←
현재 선택[+]을 유지하려면 엔터키를 누르고, 아니면 선택 번호를 입력하십시오: 3 (3번 입력 후 엔터)

[root@localhost ~]# java -version  (변경된 JAVA 확인)
openjdk version "25.0.3" 2026-04-21 LTS

OpenJDK Runtime Environment (Red_Hat-25.0.3.0.9-1) (build 25.0.3+9-LTS)

OpenJDK 64-Bit Server VM (Red_Hat-25.0.3.0.9-1) (build 25.0.3+9-LTS, mixed mode, sharing)


③ 보안을 위해 별도의 계정 및 그룹 만들기

※ 톰캣(Tomcat)을 root 계정으로 실행하는 것은 권장되지 않습니다. 일반적으로 보안 점검 항목에서 취약한 설정으로 분류되며, 서비스 계정(tomcat 등)을 별도로 생성하여 실행하는 것이 안전합니다.

[root@localhost ~]# groupadd foxydog  (tomcat 그룹 만들기)

 

[root@localhost ~]# mkdir /opt/tomcat10  (apache tomcat을 설치할 폴더 미리 만들기)

 

[root@localhost ~]# useradd -s /bin/nologin -g foxydog -d /opt/tomcat10 foxydog

(계정 생성 및 경로 지정)

useradd: 경고: '/bin/nologin' 쉘이 없거나 실행할 수 없습니다.

useradd: 경고: 홈 디렉터리 /opt/tomcat10이 이미 존재합니다.

useradd: skel 디렉토리의 파일을 복사하지 않습니다.

파일을 만드는 중: 파일이 있습니다

※ 테스트로 계정이나 폴더를 삭제했다가 지웠다가 해서 나오는 메시지들

 

[root@localhost ~]# cat /etc/passwd |grep foxydog  (계정 생성 및 경로 확인)

foxydog:x:2006:2006::/opt/tomcat10:/bin/nologin


④ Apache tomcat10 다운 및 압축 해제

※ 공식 홈페이지 : https://tomcat.apache.org/download-10.cgi

→ 먼저 10버전으로 설치 후 PS. 추가 설명에서 11버전 설치를 진행하도록 하겠습니다.

 

 

Wget을 이용하여 서버에 다운(인터넷이 불가한 환경은 파일 받은 후 서버에 직접 SFTP 업로드)

[root@localhost ~]# wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.55/bin/apache-tomcat-10.1.55.tar.gz

※ 미러 사이트는 인터넷 접속 환경에 따라 달라질 수 있으므로 꼭 사이트 링크 주소를 확인하시기 바랍니다.

 

[root@localhost ~]# ll | grep tomcat  (다운 파일 확인)
-rw-r--r--   1 root root 14343328  5월  5 22:39 apache-tomcat-10.1.55.tar.gz

다음과 같이 명령어를 이용하면 MV(이동)명령어를 사용할 필요 없이 해당 경로에 바로 압축 해제

[root@localhost ~]# tar -zxvf apache-tomcat-10.1.55.tar.gz -C /opt/tomcat10 --strip-components=1

 

[root@localhost ~]# ls /opt/tomcat10  (압축 해제 파일 확인)
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  temp  webapps  work


⑤ 권한 설정(보안 관련)

[root@localhost ~]# chown -R foxydog:foxydog /opt/tomcat10  (권한 변경)

 

[root@localhost ~]# ls -al /opt/ | grep tomcat  (권한 변경 확인)
drwxr-xr-x   9 foxydog foxydog 4096  6월 10 16:43 tomcat10

/bin 경로의 스크립트 실행하기 위한 권한 설정(+x)

[root@localhost ~]# sh -c 'chmod +x /opt/tomcat10/bin/*.sh'

 

[root@localhost ~]# ls -al /opt/tomcat10/bin | grep ".sh"  (변경 확인)


⑥ 아파치 톰캣 실행 및 중지(테스트)

※ 일반계정 권한으로 실행 시 su - foxydog 계정 전환 후 해당 Bash 경로 실행

[root@localhost ~]# su - foxydog -c "/opt/tomcat10/bin/startup.sh"  (한줄 명령어)

 

만약 실행 실패하면, Bash 경로를 수정

[root@localhost ~]# usermod -s /usr/sbin/nologin foxydog

[root@localhost ~]# grep foxydog /etc/passwd

foxydog:x:2006:2006::/opt/tomcat10:/usr/sbin/nologin    (변경 확인)

※ foxydog라는 계정이 로그인 금지 계정(nologin)이나, 해당 계정 권한으로 프로세스 실행하는 방법

[root@localhost ~]# runuser -u foxydog -- /opt/tomcat10/bin/startup.sh  (시작)

Using CATALINA_BASE:   /opt/tomcat10

Using CATALINA_HOME:   /opt/tomcat10

Using CATALINA_TMPDIR: /opt/tomcat10/temp

Using JRE_HOME:        /usr

Using CLASSPATH:       /opt/tomcat10/bin/bootstrap.jar:/opt/tomcat10/bin/tomcat-juli.jar

Using CATALINA_OPTS:

Tomcat started.

[root@localhost ~]# tail -f /opt/tomcat10/logs/catalina.out  (카탈리나 실시간 로그 확인)

10-Jun-2026 17:28:02.613 정보 [main] org.apache.coyote.AbstractProtocol.start 프로토콜 핸들러 ["http-nio-8080"]을(를) 시작합니다.
10-Jun-2026 17:28:02.631 정보 [main] org.apache.catalina.startup.Catalina.start 서버가 [688] 밀리초 내에 시작되었습니다.  (마지막 메시지 정상 실행 패턴)

[root@localhost ~]# ps -ef |grep tomcat  (프로세스 실행 확인)

[root@localhost ~]# /opt/tomcat10/bin/shutdown.sh  (서비스 중지)


⑦ 웹 접속을 위한 방화벽 허용

[root@localhost ~]# netstat -nlp  |grep java  (포트 확인)
tcp6       0      0 :::8080 (톰캣 기본 포트)                :::*                    LISTEN      113731/java
tcp6       0      0 127.0.0.1:8005(shutdown)          :::*                    LISTEN      113731/java

 

[root@localhost ~]# firewall-cmd --zone=public --permanent --add-port=8080/tcp  (포트 허용 추가)
success

 

[root@localhost ~]# firewall-cmd --reload  (실시간 적용)
success

 

[root@localhost ~]# firewall-cmd --list-all | grep ports  (추가 확인)
  ports: 8080/tcp

 

※ IPTABLES 이용 시

[root@localhost ~]# iptables -nL | grep 8080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:8080


⑧ 웹 접속 확인

본인 PC 브라우저 URL 입력 HTTP://서버IP:8080

 

[root@localhost ~]# cd /opt/tocat10/logs  (로그 경로)

[root@localhost ~]# tail -f localhost_access_log.2026-06-10.txt  (실시간 로그 확인)


PS. Apache Tomcat/11.x 설치

 

[root@mail logs]# mkdir /opt/tomcat11  (설치 경로 폴더 생성)

※ 공식 홈페이지 : https://tomcat.apache.org/download-11.cgi

[root@localhost ~]# wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.22/bin/apache-tomcat-11.0.22.tar.gz  (11버전 다운)

 

[root@localhost ~]# ll | grep tomcat-11  (다운 파일 확인)
-rw-r--r--   1 root root 14370214  5월  2 05:37 apache-tomcat-11.0.22.tar.gz

 

[root@localhost ~]# tar -zxvf apache-tomcat-11.0.22.tar.gz -C /opt/tomcat11 --strip-components=1 (해당 경로 압축 해제)

 

[root@mail ~]# ls /opt/tomcat11 (압축 해제 파일 확인)
BUILDING.txt     LICENSE  README.md      RUNNING.txt  conf  logs  webapps
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          lib   temp  work

[root@localhost ~]# chown -R foxydog:foxydog /opt/tomcat11  (권한 변경)

[root@localhost ~]# ls -al /opt/ | grep tomcat11  (권한 변경 확인)
drwxr-xr-x   9 foxydog foxydog 4096  6월 10 22:53 tomcat11

※ /bin 경로의 스크립트 실행하기 위한 권한 설정(+x)
[root@localhost ~]# sh -c 'chmod +x /opt/tomcat11/bin/*.sh'
[root@localhost ~]# ls -al /opt/tomcat11/bin | grep ".sh"  (변경 확인)

◇ 같은 서버에 설치 시 포트 충돌을 막기 위해 임시로 포트 변경

[root@localhost ~]# vim /opt/tomcat11/conf/server.xml    (설정 파일 경로 수정)

 

22 <Server port="8105" shutdown="SHUTDOWN">  (8005 → 8105 변경)

 

70 <Connector port="8180" protocol="HTTP/1.1"  (8080 → 8180 변경)
71          connectionTimeout="20000"
72          redirectPort="8543" />  (8443 → 8543 변경)

[root@localhost ~]# runuser -u foxydog -- /opt/tomcat11/bin/startup.sh  (시작)

[root@localhost ~]# tail -f /opt/tomcat11/logs/catalina.out  (카탈리나 실시간 로그 확인)

10-Jun-2026 23:17:36.250 정보 [main] org.apache.coyote.AbstractProtocol.start 프로토콜 핸들러 ["http-nio-8180"]을(를) 시작합니다.
10-Jun-2026 23:17:36.260 정보 [main] org.apache.catalina.startup.Catalina.start 서버가 [707] 밀리초 내에 시작되었습니다. (정상 실행)

[root@localhost ~]# ps -ef |grep tomcat  (프로세스 실행 확인)

[root@localhost ~]# /opt/tomcat11/bin/shutdown.sh  (서비스 중지)

[root@localhost ~]# netstat -nlp |grep java  (포트 확인)

tcp6       0      0 :::8080                 :::*                    LISTEN      113731/java
tcp6       0      0 :::8180 (tomcat 11)                 :::*                    LISTEN      121933/java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      113731/java
tcp6       0      0 127.0.0.1:8105 (tomcat 11/shutdown)          :::*                    LISTEN      121933/java

 

[root@localhost~]# firewall-cmd --zone=public --permanent --add-port=8180/tcp  (포트 허용 추가)

success

[root@localhost ~]# firewall-cmd --reload  (실시간 적용)

success

[root@localhost ~]# firewall-cmd --list-all | grep ports  (추가 확인)

  ports: 8180/tcp

※ IPTABLES 이용 시
[root@localhost ~]# iptables -nL | grep 8180

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:8180

 

◇ 본인 PC 브라우저 URL 입력 HTTP://서버IP:8180

 

[root@localhost ~]# cd /opt/tocat11/logs  (로그 경로)

[root@localhost ~]# tail -f localhost_access_log.2026-06-10.txt  (실시간 로그 확인)


테스트할 일이 있어 오랜만에 Apache Tomcat을 설치해보았습니다. 다행히 이전에 작성했던 포스팅 내용에서 크게 벗어나지 않아 생각보다 수월하게 진행할 수 있었습니다. 사실 이 포스팅도 예전부터 작성하고 있던 내용인데, 이런저런 이유로 계속 미루고 있다가 이번 기회에 정리하게 되었습니다. 최근에는 테스트도 하고, 블로그도 작성하고, 유튜브도 조금씩 건드리다 보니 그동안 미뤄두었던 포스팅들을 한꺼번에 작성해서 올리고 있는 중입니다.

 

하고 싶은 것이 많다 보니 이것저것 동시에 진행하게 되어 정신이 조금 없는 상태이기도 합니다. 그래도 최대한 하나씩 마무리한 뒤 다음으로 넘어갈 수 있도록 차근차근 정리해 나가야 할 것 같습니다.

Designed by JB FACTORY