안녕하세요 잼니크 입니다.
이 글은 Apache httpd와 Tomcat(톰켓) 연동 과정을 남깁니다.
Apache http는 아파치 재단에서 관리하는 웹 서버 프로젝트이고 톰캣은 동일한 아파치 재단에서 만든 자바 웹 컨테이너입니다. 자바 기반 웹 애플리케이션을 개발하기 위해 오픈소스이면서 가장 많이 사용되는 톰켓을 한번쯤 사용해 보셨을 것이라 생각합니다.
이 글에서는 아파치 웹서버와 톰켓을 연동하여 WAS(wab application server)를 구축하는 내용을 다룹니다. 웹 애플리케이션을 개발할 때를 생각해 보면 웹서버를 설치하지 않고 개발하셨을 겁니다. 그 이유는 톰켓이 웹서버처럼 HTTP 프로토콜의 응답을 처리할 수 있기 때문입니다. 그런데 왜 아파치 웹 서버를 설치해야 할까요?
과거에는 톰켓의 웹 처리 성능이 아파치 웹 서버보다 많이 낮았습니다. 따라서 톰켓이 필수적으로 처리해야 하는 JSP 같은 동적 콘텐츠를 제외한 나머지는 성능이 좋은 웹 서버가 처리하도록 했습니다. 지금은 어느 정도 성능이 나올지 모르겠지만 톰켓의 정적 콘텐츠 처리 성능이 높아지면서 성능 문제보다는 웹서버가 제공해주는 기능을 사용하기 위해 연동하고 있습니다. 이 글의 범위를 넘어가긴 하지만 나중에 시간이 되면 아파치 웹 서버와 톰켓의 처리 성능을 비교해 보는 것도 좋을 것 같네요.
그럼 연동을 시작하기 앞서 아파치 웹 서버 설치하기글과 Tomcat 설치 글을 참고하셔서 준비하신 다음 따라오시면 됩니다.
아파치 웹 서버와 톰캣을 연동하기 위해 전체적인 과정을 한번 설명하고, 넘어가겠습니다.
위 그림에서 사용자는 웹 브라우저 같은 HTTP 프로토콜을 이용하는 클라이언트를 통해 웹 서버에 요청을 보냅니다. 웹 서버는 사용자의 요청을 받아 정적 콘텐츠일 경우 HTML 같은 정적 웹페이지 파일을 전달해주고, 동적 콘텐츠일 경우 아파치의 모듈인 mod_jk에게 요청을 넘겨줍니다. mod_jk는 AJP프로토콜을 이용해서 톰켓과 통신을 하고 요청에 대한 결과를 웹서버를 통해 클라이언트로 전달하게 됩니다.
저희는 mod_jk를 이용할 예정이지만 mod_proxy를 이용해서 하는 방법도 있습니다. 이 두 방법의 차이점은 톰켓에 연결할 때 어떤 프로토콜을 사용하냐의 차이입니다. AJP 라는 프로토콜을 사용할지, 아니면 리버스 프록시 방법을 이용하는 mod_proxy를 쓸지 선택을 할 수 있습니다. 이 글에서는 상대적으로 자료가 상대적으로 많은 mod_jk를 사용하기로 하겠습니다.
우선은 필요한 모듈인 mod_jk를 컴파일 부터 진행하겠습니다.
1. 사전 패키지 설치 및 컴파일
첫번 째로 mod_jk를 설치하기 위한 필수 패키지를 먼저 설치합니다.
# 필수 패키지 설치
dnf install autoconf libtool httpd-devel
그다음은 톰캣 홈페이지에서 mod_jk 소스를 받아 컴파일합니다.
톰켓 홈페이지 링크를 남겨 드립니다.
링크로 들어 간 다음 좌측 탭에서 Tomcat Connecters를 클릭한 다음 뜬 페이지에서 운영체제에 맞는 소스 링크를 다운로드합니다. 저는 리눅스에서 할 예정이라 리눅스 소스의 링크를 알아두겠습니다.
# mod_jk 다운로드
wget https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz
# 압축 해제
tar xzf ./tomcat-connectors-1.2.48-src.tar.gz
cd ./tomcat-connectors-1.2.48-src/native/
# 빌드 환경 설정 (apxs는 반드시 필요함)
./configure --with-apxs=/bin/apxs
make
# root 계정으로 실행하거나 sudo를 사용할 것
make install
위 그림과 같은 화면이면 mod_jk의 설치가 완료 된 것입니다. 혹시 잘 모르겠다면 중간에 나오는 경로인 /usr/lib64/httpd/modules/ 에 mod_jk.so 파일이 있는지 확인해 보면 됩니다.
2. 아파치 웹 서버 설정
연동의 그 다음 과정은 mod_jk와 관련된 웹 서버의 설정을 수정합니다. 이 글에서는 아파치 웹 서버를 CentOS에서 패키지로 설치된 경로를 기준입니다. /etc/httpd/ 에 가면 웹서버의 설정 파일을 볼 수 있습니다. 웹서버의 설정을 저장하는 폴더가 여러 개이기 때문에 한번 정리하고 넘어가겠습니다.
경로 | 설명 |
/etc/httpd/ | 아파치 웹서버 설정 파일이 모여있음 |
/etc/httpd/conf | 웹서버의 전체적인 설정이 있음 |
/etc/httpd/conf.d | 웹서버 모듈을 위해 필요한 설정파일을 작성하는 곳 |
/etc/httpd/conf.modules.d | 웹서버에 적용할 모듈을 설정하는 파일이 있는 곳 |
우선은 모듈 설정 부터 하겠습니다. 이 설정을 하면 아파치 웹서버가 시작할 때 mod_jk 모듈을 로딩합니다.
# mod_jk 활성화
vi /etc/httpd/conf.modules.d/10-mod_jk.conf
# 아래 내용을 10-mod_jk.conf에 저장해 주세요
LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkMountFile conf/uri.properties
</IfModule>
설정 내용을 보면 JkLogFile, JkWorkersFile와 JkMountFile을 설정하게 되어 있습니다. JkLogFile은 mod_jk 로그 파일의 위치, JkWorkersFile은 mod_jk가 동작하는 웹서버에서 톰캣과 연동하는 인스턴스를 만들고, JkMountFile은 mod_jk에서 처리할 파일 명을 정의합니다. JkWorkersFile부터 작성해 보겠습니다.
# worker 파일 작성
vi /etc/httpd/conf/workers.properties
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
# uri프로퍼티 파일 작성
vi /etc/httpd/conf/uri.properties
/*.do=worker1
/*.jsp=worker1
아파치 웹서버에서 가상 호스트를 설정합니다. 웹 서버의 설정 파일 폴더에 vhost.conf 파일을 작성합니다. 여기서 DocumentRoot는 톰캣의 웹 앱 폴더의 ROOT로 설정 했습니다. JKMount는 mod_jk에 처리 할 파일 명과 워커의 이름을 입력합니다.
# vhost 파일 작성
vi /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
ServerName localhost
DocumentRoot "/home/tomcat/apache-tomcat-10.0.22/webapps/ROOT"
ErrorLog "logs/localhost-error_log"
CustomLog "logs/localhost-access_log" common
JkMount /* worker1
</VirtualHost>
아파치 웹 서버 쪽 설정이 끝났으니 이제는 톰켓 서버 쪽 설정을 하겠습니다. 앞에서 작성한 workers.properties에서 정의한 정보를 톰캣에서 활성화 시키면 됩니다.
톰켓의 설정 파일은 톰켓 환경변수를 설정할 때 적은 CATALINA_BASE의 conf에 있는 server.xml 파일을 편집합니다
# 설정 파일
vi apache-tomcat-10.0.22/conf/server.xml
# 아래 내용의 주석 내용을 삭제
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443"
secretRequired="false"
/>
아래와 같이 되도록 작성하면 됩니다
그다음 웹브라우저로 톰캣 접속 포트인 8080를 없에서 80 포트로 접속하면 톰켓 화면을 볼 수 있습니다
여기까지 따라오면서 궁금증 있으시면 댓글로 남겨주세요!
'IT > Web & WAS' 카테고리의 다른 글
레드햇 계열 리눅스에서 아파치 HTTP 서버 설치하기(패키지) (0) | 2022.07.02 |
---|---|
CentOS에서 Tomcat 설치 (0) | 2022.07.01 |
레드햇 계열 리눅스에서 Java JRE JDK 설치 (0) | 2022.06.17 |