운영중입니다

Apache + Tomcat + mod_jk 연동 가이드2 본문

리눅스

Apache + Tomcat + mod_jk 연동 가이드2

https443 2025. 11. 18. 12:10

이전 내용

https://https443.tistory.com/28


5. Apache mod_jk 설정

#5.1. mod_jk.conf 생성
#mod_jk.conf는 Apache와 Tomcat 사이의 연결 다리 역할을 수행하는 핵심 설정 파일입니다.

vim /etc/httpd/conf.d/mod_jk.conf


-----------------------포함 내용 -----------------------

# mod_jk 모듈 로드
LoadModule jk_module modules/mod_jk.so

# 워커 파일 경로
JkWorkersFile /etc/httpd/conf.d/workers.properties

# mod_jk 로그 설정
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info

# 특정 URL을 Tomcat으로 포워딩
JkMount /app/* worker1
--------------------------------------------------------


#5.2. workers.properties 파일 생성
#Tomcat 서버의 위치와 통신 방식(AJP)을 정의하는 파일입니다.

vim /etc/httpd/conf.d/workers.properties

-----------------------포함 내용 -----------------------

# Define worker
worker.list=worker1

# Worker 1 configuration
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=9009
worker.worker1.lbfactor=1

--------------------------------------------------------

#5.3 uri.properties 파일 생성
#Apache가 수신한 요청 중 Tomcat으로 전달할 특정 확장자나 URL 패턴을 관리합니다.

-----------------------포함 내용 -----------------------
/*.do=worker1
/*.jsp=worker1

--------------------------------------------------------

6. 서비스 재시작
설정 파일을 수정한 후에는 변경 범위에 따라 서비스를 재시작해야 안전하게 적용됩니다.

#mod_jk 설정만 변경한 경우 → Apache 재시작

systemctl restart httpd


T#omcat 설정/웹앱 변경한 경우 → Tomcat 재시작

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh


#전체적인 구조 변경 시 → Apache와 Tomcat 모두 재시작을 권장합니다.


7. Apache + mod_jk + Tomcat으로 홈페이지가 동작하는 전체 흐름
연동이 완료된 후 데이터가 처리되는 전체 프로세스는 다음과 같습니다.

#1. 사용자가 브라우저에서 홈페이지 접속

https://www.example.com/index.jsp



#2. HTTP 요청이 Apache HTTPD로 먼저 도착

Apache는 웹 서버로서 80/443 포트에서 모든 HTTP 요청을 가장 먼저 받습니다.

Apache -> 프론트엔드
Tomcat -> 어플리케이션 엔진



#3. Apache는 mod_jk 모듈을 읽고 동작 방식 결정

/etc/httpd/conf.modules.d/ 혹은 conf.d/ 에 지정된 다음 설정이 로드.

#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>
---------------------------------------------

#의미:

Apache가 시작되면 mod_jk.so 모듈을 로드 후

Tomcat과 연결할 worker 설정을 읽습니다.

이후 어떤 URL을 Tomcat에 보낼지 uri.properties를 읽습니다.

 

#4. Apache는 URL이 JSP/Servlet 요청인지 판단합니다.

#uri.properties

-----------------내용------------------------
/*.do=worker1
/*.jsp=worker1
---------------------------------------------

.jsp파일, .do 로 끝나는 URL 은 Apache에서 처리하지 않고 worker1 (Tomcat)으로 넘깁니다.

/home.do → worker1
/index.jsp → worker1

#반면
/index.html, /style.css, /images/logo.png etc 같은 정적 파일은 Apache가 직접 처리합니다.


# 5. Apache → Tomcat 로 요청을 연결 (AJP 프로토콜)

#worker1 정의: workers.properties

-----------------내용------------------------
worker.list=worker1
worker.worker1.port=9009
worker.worker1.host=localhost
worker.worker1.type=ajp13
---------------------------------------------

#의미:

Tomcat AJP Connector는 9009 포트로 열려 있습니다.

Apache는 mod_jk를 통해 AJP 프로토콜로 Tomcat과 통신합니다.

worker1 = Tomcat instance 1

AJP는 Apache–Tomcat 연동을 위한 고속 바이너리 프로토콜입니다.
HTTP보다 빠르고 메타데이터를 더 많이 전달합니다.

#Apache는 이 worker1을 통해 Tomcat에 요청을 보냅니다.:
Apache → mod_jk → AJP 9009 → Tomcat

#6. Tomcat이 Servlet/JSP 엔진으로 요청을 처리합니다.
Tomcat은 요청을 받아 다음을 실행합니다.:

JSP 요청 처리 과정

#1. JSP 파일을 서블릿(Java 코드)로 변환합니다.
#2. 그 서블릿을 컴파일합니다. (최초 1회)
#3. 서블릿 실행합니다.
#4. 결과 HTML 생성합니다.
#5. 생성된 HTML을 AJP로 Apache에게 반환합니다.

Servlet (.do) 요청 처리 과정
예: /login.do

#1. web.xml 또는 Spring DispatcherServlet에 매핑된 컨트롤러가 실행합니다.
#2. 비즈니스 로직 처리합니다. (DB접속 등)
#3. 결과 JSP 혹은 JSON 생성합니다.
#4. HTML 또는 JSON을 Apache로 반환합니다.


#7. Apache는 Tomcat에서 받은 응답을 사용자에게 전달합니다.
Apache는 Tomcat(9009)에서 받은 HTML 응답을 HTTP 형태로 클라이언트에게 전달합니다.:
Tomcat → Apache → 브라우저
 브라우저는 Tomcat에 직접 요청을 보내지 않습니다..

#8. 최종적으로 사용자의 브라우저에 완성된 페이지가 출력됩니다.
JSP/Servlet으로 생성된 HTML 결과를 브라우저가 렌더링합니다..