IT/Web & WAS

Apache httpd + Tomcat 연동하기

잼니크 2022. 7. 3. 22:40
반응형

안녕하세요 잼니크 입니다. 

이 글은 Apache httpd와 Tomcat(톰켓) 연동 과정을 남깁니다. 

 

Apache http + Tomcat을 연동해 봅시다~!

 

Apache http는 아파치 재단에서 관리하는 웹 서버 프로젝트이고 톰캣은 동일한 아파치 재단에서 만든 자바 웹 컨테이너입니다. 자바 기반 웹 애플리케이션을 개발하기 위해 오픈소스이면서 가장 많이 사용되는 톰켓을 한번쯤 사용해 보셨을 것이라 생각합니다. 

 

이 글에서는 아파치 웹서버와 톰켓을 연동하여 WAS(wab application server)를 구축하는 내용을 다룹니다. 웹 애플리케이션을 개발할 때를 생각해 보면 웹서버를 설치하지 않고 개발하셨을 겁니다. 그 이유는 톰켓이 웹서버처럼 HTTP 프로토콜의 응답을 처리할 수 있기 때문입니다. 그런데 왜 아파치 웹 서버를 설치해야 할까요? 

 

과거에는 톰켓의 웹 처리 성능이 아파치 웹 서버보다 많이 낮았습니다. 따라서 톰켓이 필수적으로 처리해야 하는 JSP 같은 동적 콘텐츠를 제외한 나머지는 성능이 좋은 웹 서버가 처리하도록 했습니다. 지금은 어느 정도 성능이 나올지 모르겠지만 톰켓의 정적 콘텐츠 처리 성능이 높아지면서 성능 문제보다는 웹서버가 제공해주는 기능을 사용하기 위해 연동하고 있습니다. 이 글의 범위를 넘어가긴 하지만 나중에 시간이 되면 아파치 웹 서버와 톰켓의 처리 성능을 비교해 보는 것도 좋을 것 같네요.

 

그럼 연동을 시작하기 앞서 아파치 웹 서버 설치하기글과 Tomcat 설치 글을 참고하셔서 준비하신 다음 따라오시면 됩니다. 

 

레드햇 계열 리눅스에서 아파치 HTTP 서버 설치하기

안녕하세요 잼니크입니다. 이 글에서는 아파치 HTTP를 설치하려고 합니다. 패키지 설치 명령을 통해 복사 & 붙여넣기 만으로 빠르게 따라할 수 있는 글입니다. 저는 CentOS 8 stream 버전을 기준으로

gam1532.tistory.com

 

CentOS에서 Tomcat 설치

안녕하세요 잼니크입니다. 이 글에서는 CentOS 에서 Tomcat을 설치하고 세팅하는 방법을 설명합니다. 중간 중간에 명령을 통해 복사 & 붙여넣기 만으로 빠르게 할 수 있는 방법을 알려 드립니다. 저

gam1532.tistory.com

 


아파치 웹 서버와 톰캣을 연동하기 위해 전체적인 과정을 한번 설명하고, 넘어가겠습니다.

전체적인 연결과정 내용

위 그림에서 사용자는 웹 브라우저 같은 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 소스를 받아 컴파일합니다.

톰켓 홈페이지 링크를 남겨 드립니다. 

 

Apache Tomcat® - Welcome!

The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the

tomcat.apache.org

링크로 들어 간 다음 좌측 탭에서 Tomcat Connecters를 클릭한 다음 뜬 페이지에서 운영체제에 맞는 소스 링크를 다운로드합니다. 저는 리눅스에서 할 예정이라 리눅스 소스의 링크를 알아두겠습니다.

톰켓 홈페이지에서 mod_jk를 찾습니다

# 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 설치 완료!

위 그림과 같은 화면이면 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"
               />

아래와 같이 되도록 작성하면 됩니다

mod_jk와 연결할 커넥터 설정

 

그다음 웹브라우저로 톰캣 접속 포트인 8080를 없에서 80 포트로 접속하면 톰켓 화면을 볼 수 있습니다 

아파치 웹서버를 통한 WAS 접속 확인!

여기까지 따라오면서 궁금증 있으시면 댓글로 남겨주세요!

반응형