Infra

Rocky Linux 환경에 3-Tier Architecture(웹 서버 ↔ WAS ↔ DB) 구축하기

깜이오빠 2025. 1. 29. 20:31

서론

우선 Apache 웹 서버(80 포트), Tomcat WAS(8080 포트), 그리고 MySQL DB(3306 포트)를 설치한다.

이후, mod_jk 모듈(8009 포트)을 설치하여 웹 서버와 WAS를 연동한다.

테스트를 위해 Spring Boot 프레임워크를 활용하여 간단한 로그인 웹 페이지를 구현했으며, 최종 목표는 사용자가 80 포트로 접속하여 회원가입과 로그인을 할 수 있도록 설계하는 것이다.

(`ROOT.war` 파일은 Tomcat의 `webapps` 디렉터리에 배포해야 한다)

 

Apache 웹 서버 설치하기

Apache 웹 서버는 간단한 명령어로 설치할 수 있다.

dnf install httpd

다음 명령어를 사용하여 Apache 웹 서버를 시작하거나 종료할 수 있다.

systemctl start httpd
systemctl stop httpd

 

Tomcat WAS 설치하기

Tomcat은 Java로 작성되었기 때문에, JDK가 설치되지 않았다면 먼저 JDK를 설치해야 한다.

필자는 JDK 17을 설치했다.

 

Tomcat을 설치하려면 아래 사이트에서 원하는 버전을 선택해야 한다.

https://dlcdn.apache.org/tomcat/ 

 

이후, 선택한 버전의 `bin` 디렉터리로 이동하여 링크 주소를 복사한 뒤 `wget` 명령어를 사용하여 설치한다.

wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.98/bin/apache-tomcat-9.0.98.tar.gz

설치가 완료되면 압축을 해제한다.

tar -zxvf apache-tomcat-9.0.98.tar.gz

`bin` 디렉터리로 이동하여 다음 명령어를 사용하여 Tomcat을 시작하거나 종료할 수 있다.

./startup.sh
./shutdown.sh

 

mod_jk 모듈 설치하기

mod_jk는 Apache 웹 서버와 Tomcat WAS를 연동하는 모듈이다.

 

mod_jk를 설치하려면 아래의 사이트로 이동해야 한다.

https://tomcat.apache.org/download-connectors.cgi

 

이후, Tomcat과 같은 방법으로 설치 후 압축을 해제하면 된다.

 

압축을 해제한 후, `native` 디렉터리로 이동하여 다음 명령어를 실행한다.

./configure --with-apxs=/usr/apxs # Apache와 통합하기 위한 빌드 환경 설정
make # 소스 코드를 컴파일하여 모듈 빌드
make install # 빌드된 모듈을 Apache에 설치

모든 과정이 정상적으로 완료되면, Apache의 `modules` 디렉터리에 `mod_jk.so` 파일이 생성되어 있어야 한다.

 

수정해야 할 파일

1. `bash.rc` 파일

# Java 환경 설정 코드
export JAVA_HOME=/usr/lib/jvm/jre-17-openjdk-17.0.13.0.11-4.el9.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH="."

# Tomcat 환경 설정 코드
export CATALINA_HOME=/root/apache-tomcat-9.0.98
export CLASSPATH=.:$JAVA_HOME/lib/tool.jar:$CATALINA_HOME/lib/jsp-api.jar:$CATA$
export PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

Java 및 Tomcat을 정상적으로 실행하기 위해 환경 변수를 설정한다.

 

2. Apache - `httpd.conf` 파일

# Apache & Tomcat 연결 설정 코드
LoadModule jk_module /usr/lib64/httpd/modules/mod_jk.so
JkWorkersFile /etc/httpd/conf/workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
JkMount /* tomcat

Apache가 mod_jk를 사용하여 Tomcat과 통신할 수 있도록 설정한다.

 

3. Apache - `workers.properties` 파일

worker.list=tomcat
worker.tomcat.type=ajp13
worker.tomcat.host=127.0.0.1
worker.tomcat.port=8009

또한, `httpd.conf` 파일이 존재하는 경로에 `workers.properties` 파일을 생성해야 한다.

이 파일은 Apache가 Tomcat으로 요청을 전달하는 방식을 정의한다.

 

4. Tomcat - server.xml 파일

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443"
               maxParameterCount="1000"
               />
    -->

Tomcat과 Apache가 AJP 프로토콜을 통해 통신할 수 있도록 주석을 해제한다.

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector protocol="AJP/1.3"
               address="127.0.0.1"
               port="8009"
               redirectPort="8443"
               maxParameterCount="1000"
               secretRequired="false"
               />
  • `address="::1"` → `address="127.0.0.1"` 변경
  • `secretRequired=false` 속성 추가
   <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               />

Tomcat의 기본 8080 포트는 사용하지 않으므로 주석 처리한다.

 

5. Tomcat - web.xml 파일

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

필자는 웹 페이지 파일의 이름을 `index.jsp`로 작성했다.

현재 설정에서는 Tomcat의 기본 `index.html`이 `index.jsp`보다 우선적으로 인식되므로, `index.jsp`가 최우선으로 적용되도록 순서를 변경하거나 다른 항목을 삭제해야 한다.

 

결과

3-Tier Architecture(웹 서버 ↔ WAS ↔ DB)를 성공적으로 구축할 수 있었다.