Server

아파치 톰캣 연동(Apache + Tomcat)

  • -
반응형

아파치와 톰캣(정확히는 아파치 톰캣)은 자바와 자바스크립트와 같이 서로 다른 개념으로 처음 개발을 접한 분들에게는 다소 혼란스러울 수 있습니다.

간단하게 두 차이를 정리한 입니다. 참고하시길 바라며 오늘은 아파치와 톰캣을 연동하는 방법에 대해 포스팅해보려 합니다.

 

※ 테스트 환경입니다.

  • Tomcat 7.0
  • Apache 2.4
  • Windows 10

아파치(Apache) 설치

1) 파일 설치

https://www.apachelounge.com/download/에 접속하여 자신의 PC에 맞는 파일을 다운로드 받습니다.

 

내려받은 파일은 압축을 해제하고 Apache24 폴더를 C: 경로로 옮기겠습니다.

 

2) 서비스 등록

커맨드창을 실행하여 아래 명령어를 입력합니다.

cd/

cd Apache24

cd bin

httpd.exe -k install

 

The 'Apache2.4' service is successfully installed. 라는 문구가 뜬다면 정상적으로 설치된 것입니다. 아래 Errors 문구는 무시해도 됩니다.

 

3) 아파치 실행

C: 경로로 옮긴 Apache24 - bin 경로에 보면 ApacheMonitor.exe 라는 파일이 있습니다. 해당 파일을 실행합니다.

 

파일을 실행하면 작업표시줄에 아파치 모니터 아이콘이 조회됩니다.

 

실행 버튼을 클릭합니다.

 

4) 테스트

localhost 또는 본인 PC 아이피를 입력 후 아래와 같은 화면이 조회되면 성공입니다.

아파치 설치시 기본 포트는 80으로 지정되어 있습니다. 때문에 포트 번호를 입력하지 않아도 된다.

 

이제 아파치와 톰캣을 연동해보겠습니다.

아파치 톰캣 연동

 

아파치와 톰캣을 연동하는 방법은 3가지가 있습니다.

  1. mod_jk(Tomcat connector)
  2. mod_proxy
  3. mod_proxy_ajp

 

본 포스팅에서는 관련 자료가 가장 많았던 mod_jk를 이용했습니다.

mod_jk는 톰캣의 AJP 프로토콜을 사용하여 아파치와 연동하는데 필요한 모듈입니다.

(AJP : 아파치로 들어오는 요청을 위임할 수 있는 바이너리 프로토콜)

 

프로세스를 간단하게 설명하면, 사용자의 요청이 톰캣에서 처리해야하는 경우(서블렛을 필요로 하는 경우) 아파치는 AJP포트(기본 8009)에 접속해 요청을 전달합니다.

톰캣은 아파치로부터 요청을 받아 처리하고, 처리 결과는 아파치에게 되돌려줍니다. 이 때, 전달 역할을 하는 것이 mod_jk입니다.

 

1) 파일 설치(mod_jk.so)

https://www.apachelounge.com/download/에 접속하면 페이지 하단에 mod_jk & isapi_redirect.dll 이 조회됩니다.

자신의 PC에 맞는 파일을 다운로드 받습니다.

다운 받은 파일은 C: 경로에 옮긴 Apache24 - modules 경로로 옮겨준다,

 

2) 설정 파일 생성

이제 몇 가지 설정이 필요합니다.

먼저, 에디터(메모장, Editplus, Ultraedit,...)를 열어 mod_jk.conf , workers.properties라는 이름으로 파일을 생성합니다.

경로는 Apache24 - conf 로 합니다.

 

3) mod_jk.conf / workers.properties 작성

두 개의 설정 파일은 httpd.conf에서 임포트하여 사용됩니다. 따라서 반드시 설정 파일을 만들어 작성해야 하는 이유는 없습니다. 다만 관리 효율을 위해 따로 빼주는 것이 좋습니다.

 

mod_jk.conf

JkLogFile "|bin/rotatelogs.exe -l logs/mod_jk_%Y%m%d.log 86400"
JkLogLevel  Info

JkLogStampFormat "[%a %b %d %H: %M: %S %Y]"
JkRequestLogFormat "%w %V %T"

JkWorkersFile  conf/workers.properties

JkMount /* workers1
JkLogFile "|아파치 설치 폴더/bin/rotatelogs.exe -1 logs/mod_jk_%Y%m%d.log 86400" 
JkLogLevel Info
  • 로그 파일을 생성합니다.
  • 아파치 설치 폴더를 작성하지 않은 이유는 이후에 httpd.conf 설정 파일을 설명하면서 알아보겠습니다.
  • logs/mod_jk_%Y%m%d.log : logs라는 폴더에 mod_jk_20200203.log 와 같은 형태로 로그 파일을 생성합니다.
  • 86400 : 생성 주기를 의미합니다(24시간)
  • 로그 레벨은 Info로 설정합니다.

 

JkLogStampFormat "[%a %b %d %H: %M: %S %Y]"
  • JkLogStampFormat : 로그 포맷을 지정합니다.
  • %a : 요일
  • %b : 월(month)
  • %d : 일(day)
  • %H:M:%S : 시, 분, 초
  • %Y : 년도(year) 
JkRequestLogFormat "%w %V %T"
  • JkRequestLogFormat : 아파치 서버에서 톰캣으로 요청이 넘어갈 때 로그가 저장됩니다.
  • %w : 톰캣 walker의 이름
  • %V : 요청한 도메인명
  • %T : 처리 시간(소수점 초 단위)
JkWorkersFile conf/workers.properties
  • worker 프로퍼티 설정 파일 경로를 지정합니다.(worker는 톰캣 포트와 연결시켜주는 역할을 합니다)
JkMount /* workers1
  • 모든 url의 요청은 workers1에서 처리되도록 합니다.(/*.jsp, /*.php와 같은 형태도 가능하다)
  • workers1은 worker.properties 파일에 명시된 alias를 의미합니다.

 

workers.properties

worker.list=workers1
worker.workers1.port=8009
worker.workers1.host=localhost
worker.workers1.type=ajp13
worker.list=workers1
  • worker.list : 사용할 톰캣의 리스트. workes1은 alias의 개념으로 생각하면 됩니다.
worker.workers1.port=8009
  • 포트 번호는 사용 중인 톰캣의 server.xml에서 AJP 프로토콜 설정이 되어있는 포트 번호를 입력해야 합니다.

worker.workers1.host=localhost
  • 아파치가 설치된 아이피 또는 localhost를 입력합니다.
worker.workers1.type=ajp13
  • ajp13은 ajp 프로토콜을 의미합니다.

 

4) 설정 파일 임포트(httpd.conf)

이제 설정 파일을 httpd.conf에 임포트하면 마무리됩니다.

httpd.conf 파일은 Apache24 - conf 경로에 있습니다.

임포트 전에 기본 설정값으로 몇 가지 알고 넘어가야 하는 부분이 있습니다.

# least PidFile.
#
Define SRVROOT "c:/Apache24"

ServerRoot "${SRVROOT}"

#
# Mutex: Allows you to set the mutex mechanism and mutex file directory
# for individual mutexes, or change the global defaults
#
  • (37 ~ 40라인쯤)Define SRVROOT : 아파치의 설치 경로에 대한 문자열(변수)을 지정한 것입니다. 아파치 설치 파일을 C: 경로로 옮긴 이유는 이 때문입니다. 물론 사용자가 원하는 경로로 수정할 수 있습니다.
  • ServerRoot "${SRVROOT}" : ServerRoot 설정에 SRVROOT 변수를 대입했는데, 아파치 서버가 설치된 디렉토리 경로를 지정함으로써 앞서 생성한 mod_jk.conf에서 로그 파일,  worker 프로퍼티의 디렉토리 경로를 찾는데 사용됩니다. 이에 따라 아파치 설치 경로를 작성하지 않아도 됩니다.

아파치의 기본 포트는 80입니다.(57 ~ 60라인쯤)

# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80

#
# Dynamic Shared Object (DSO) Support

 

(185 ~ 190라인쯤) 1)에서 설치한 mod_jk.so 파일을 임포트 합니다.

#LoadModule xml2enc_module modules/mod_xml2enc.so

LoadModule jk_module modules/mod_jk.so

<IfModule unixd_module>

 

(라인 끝지점) mod_jk.conf를 추가합니다.

<IfModule jk_module>
Include conf/mod_jk.conf
</IfModule>

 

5) 테스트

설정이 끝나면 아파치 -> 톰캣 순으로 실행을 하고 주소창에 localhost를 입력합니다.

오른쪽이 톰캣의 8099 포트를 이용한 기존 페이지이며, 왼쪽이 아파치를 통해 접속된 페이지입니다.

포트 번호 없이(:80) 입력했을 때 페이지 접속이 된다면 성공입니다.

 


+ 피드백은 언제나 환영입니다 :)

반응형

'Server' 카테고리의 다른 글

[WAS]POST 방식에서 파라미터 개수 제한  (0) 2020.05.26
아파치 SSL 설정  (5) 2020.02.05
[WAS]Tomcat SSL 적용  (0) 2020.02.03
hosts 파일  (0) 2018.12.02
WAS 그리고 Tomcat(+웹 서버와 차이점)  (0) 2018.05.04
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.