반응형
Apache + Tomcat 로드밸런싱 구성 방법 (mod_jk vs mod_proxy 실무 설정 예제)
Tomcat 서버 여러 대를 운영할 때, 가장 흔하게 쓰는 방식은 Apache + Tomcat 로드밸런싱입니다.
이때 mod_jk와 mod_proxy 중 어떤 모듈을 사용하는지에 따라 성능과 설정 방식이 크게 달라집니다.
이번 글에서는 mod_jk vs mod_proxy의 차이점과 실무 설정 예제를 정리해드립니다.
✅ 목차
- Apache + Tomcat 아키텍처 기본 구조
- mod_jk vs mod_proxy 개요 및 차이
- 실제 설정 예제
- Sticky Session 여부에 따른 구성
- 실무에서의 선택 기준
📌 Apache + Tomcat 구조 개요
Apache는 정적 파일 처리 및 요청 분배를 담당하고, Tomcat은 JSP/Servlet 처리를 맡습니다.
다중 Tomcat 인스턴스를 로드밸런싱 하기 위해 Apache는 다음 중 하나의 모듈을 사용합니다:
mod_jk: AJP 프로토콜 기반mod_proxy_ajp,mod_proxy_http: HTTP 기반
📌 mod_jk vs mod_proxy 차이점
| 항목 | mod_jk | mod_proxy |
|---|---|---|
| 프로토콜 | AJP (Binary) | HTTP |
| 속도 | 더 빠름 (오버헤드 적음) | 느리지만 설정 간단 |
| 설정 난이도 | 복잡 (workers.properties 필요) | 간단 (httpd.conf 내 설정) |
| 보안 | AJP 취약점 존재 (CVE-2020-1938) | 상대적으로 안전 |
| Sticky Session | 지원 | 지원 (stickysession 파라미터 필요) |
| 추천 환경 | 고성능, 레거시 | 신규 프로젝트, 클라우드 |
✅ 실무 예제 ① — mod_jk 구성
1. httpd.conf 설정
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
2. workers.properties 예시
worker.list=app1, app2, loadbalancer
worker.app1.type=ajp13
worker.app1.host=127.0.0.1
worker.app1.port=8009
worker.app2.type=ajp13
worker.app2.host=127.0.0.1
worker.app2.port=8010
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=app1,app2
worker.loadbalancer.sticky_session=1
3. URL 매핑
JkMount /* loadbalancer
✅ 실무 예제 ② — mod_proxy 구성
1. httpd.conf 모듈 활성화
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
2. 설정 예시
<Proxy "balancer://mycluster">
BalancerMember http://127.0.0.1:8080 route=tomcat1
BalancerMember http://127.0.0.1:8081 route=tomcat2
ProxySet stickysession=JSESSIONID
</Proxy>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
📌 Sticky Session이란?
클라이언트가 최초로 접속한 WAS 인스턴스에 계속 연결되도록 만드는 방식입니다.
로그인 세션을 공유하지 않아도 유지 가능하며, 쿠키(JSESSIONID)를 기반으로 Apache가 분기 처리합니다.
✅ 실무 선택 기준 요약
| 상황 | 추천 방식 |
|---|---|
| 속도 최우선 / AJP 사용 중 | mod_jk |
| 설정 간편 / 가시성 중요 | mod_proxy |
| 신규 서비스 / 클라우드 환경 | mod_proxy |
| 레거시 시스템 유지 | mod_jk (보안 설정 주의) |
✅ 마무리
mod_jk과 mod_proxy는 환경과 목적에 따라 선택이 갈립니다.
레거시라면 mod_jk도 충분하지만, 신규 프로젝트에는 mod_proxy 기반의 HTTP 로드밸런싱을 권장합니다.
🔔 다음 글 예고
[Apache, Nginx, Tomcat의 역할 차이 — 언제 뭘 써야 할까?]
반응형
'웹개발 > 서버 운영 & 인프라' 카테고리의 다른 글
| Nginx와 Apache 차이점 총정리: 어떤 웹서버를 써야 할까? (1) | 2025.08.02 |
|---|---|
| 리눅스에서 crontab으로 서비스 자동 재시작 설정하는 방법 (실무 예제 포함) (5) | 2025.08.01 |
| AWS EC2에 WAR 파일 배포, 실무에서는 이렇게 합니다 (Tomcat 환경 기준) (1) | 2025.07.19 |
| Sticky Session 없이 Tomcat 세션 공유? 실무에서 직접 설정한 방법 정리 (4) | 2025.07.19 |
| Tomcat 세션 클러스터링, Redis 없이 DeltaManager로 구현하는 방법 (1) | 2025.06.26 |