3-Tier ๊ตฌ์กฐ๋ก ์๋ฒ๋ฅผ ๊ตฌ์ฑํด ๋ถํ ํ ์คํธ๋ฅผ ์ํํ์ ๋ ๋จ์ผ ์๋ฒ๋ก๋ง ๊ตฌ์ฑํ์ฌ ํธ๋ํฝ ๊ณผ๋ถํ๋ก ์๋ฒ ๋ค์คํ๊ฐ ์ ํ์ํ์ง ๊นจ๋ฌ์์ผ๋ mod_proxy๋ก ํ๋ ๋ฐฉ๋ฒ๊ณผ HAProxy์ Keepalived๋ฅผ ํ์ฉํด์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ ํด๋ณด๋ ค๊ณ ํ๋ค.
2026.02.04 - [OS&Server/WEB | WAS] - [WEB/WAS] Apache ↔ Tomcat ์ฐ๋(Reverse Proxy)
[WEB/WAS] Apache ↔ Tomcat ์ฐ๋(Reverse Proxy)
์ผ๊ฒฝํ ์ธํดํ์ ํ์ง๋ง ๋ฐ๋ก ์ ๋ฌด๋ฅผ ๋ฐ์ง๋ ์์์ ๊ต์ก๋ค๋๋ฉด์ ๋ ์๊ฐ์ ๋ฐํ์ผ๋ก ํด๋ณด๊ณ ์ถ์ ๊ฑธ ๊ธฐํํด์ ๊ฐ๋จํ ์ฅ์ ํ ์คํธ๋ฅผ ํ๋ ค๊ณ ํ๋ค. ๊ทธ๋์ ํ ์คํธ ํ๊ฒฝ์ ๋ง๋ค๊ธฐ ์ํด Apache, Tom
lucy-devblog.tistory.com
๋จผ์ ์ด์คํ๋ฅผ ํ๋ ค๋ฉด ์๋ฒ๊ฐ ๋ ๋๋ก ๊ตฌ์ฑ๋์ด ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ 1๋๋ฅผ ๋ ๋ง๋ค์ด์ผ ํ๋ค. ๋๋ ์๋ VMware Workstation์ผ๋ก ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ Clone ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ ์๋ฒ 1๋๋ฅผ ๋ณต์ ํ๋ค. VMware ESXi๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Template์ ์ฌ์ฉํด ์๋ฒ๋ฅผ 2๋๋ก ์ฒ์๋ถํฐ ๋ง๋ค ์ ์๋ค๊ณ ํ๋ค! (๋ฐ์คํฌํ์์ ๊ดํ ESXi ์ฌ์ฉํ๋ค๊ฐ ์ปดํจํฐ์ ๋ฌธ์ ์๊ธธ๊น๋ด ์์ง ๋์ ์ ๋ชปํด๋ดค๋ค..)
1๏ธโฃ mod_proxy ํ์ฉ
๋จผ์ mod_proxy๋ฅผ ์ฌ์ฉํด ๋ก๋๋ฐธ๋ฐ์ฑ์ ํด๋ณด๋ ค๊ณ ํ๋ค. ๋ค์ ๋ด์ฉ์ /etc/httpd/conf.d ํ์์ ๋ง๋ค์๋ ํ์ผ ๋ด์ฉ์ ์๋์ ๊ฐ์ด ๋ฐ๊พธ๋ฉด ๋๋ค.
<Proxy "balancer://tomcat_cluster"> # "balancer://tomcat_cluster"๋ ๋ก๋๋ฐธ๋ฐ์ ๊ทธ๋ฃน๋ช
BalancerMember {{ WAS1 }} route=was1
BalancerMember {{ WAS2 }} route=was2
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass /board balancer://tomcat_cluster/board
ProxyPassReverse /borad balancer://tomcat_cluster/board
{{ WAS1 }}๊ณผ {{ WAS2 }} ์๋ ๊ฐ๊ฐ์ ๋๋ฉ์ธ ์ฃผ์๋ IP๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค. ์๋๋ฉด /etc/hosts์ IP๋ฅผ ๋๋กํ๊ณ ํธ์คํธ๋ช ์ ์ ๋ ฅํด๋ ๋๋ค.
2๏ธโฃ HAProxy+Keepalived ํ์ฉ
HAProxy์ Keepalived๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ๋จผ์ ๋ณ๋์ ์๋ฒ 2 ๋๋ฅผ ์ค๋นํ๋ค. Apache๊ฐ ์๋ WEB ์๋ฒ๋ Tomcat์ด ์๋ WAS ์๋ฒ์ ์ค์นํ๋ฉด ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋ HAProxy์๋ ๊ฐ์ด ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ HAProxy๋ฅผ ํ ๋๋ง ์์ผ๋ฉด ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋ ๊ทธ๋ฌ๋ฏ๋ก ๋ณ๋์ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ ํ ๋ค์ ํจํค์ง๋ฅผ ์๋ฒ์ ์ค์นํด ํ์ฑํํ๋ค.
1. HAProxy ์ค์น
# HAProxy ์ค์น
sudo dnf update -y
sudo dnf install -y haproxy
# HAProxy ํ์ฑํ
sudo systemctl enable haproxy
sudo systemctl start haproxy
2. ๋ฐฉํ๋ฒฝ ์ค์
# ๋ฐฉํ๋ฒฝ ์ค์
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
3. HAProxy ์ค์
ํน์ ๋ชจ๋ฅผ ์ํฉ์ ๋๋นํด ๋จผ์ ๊ธฐ์กด ์ค์ ์ ๋ฐฑ์ ํ๋ค.
# ๊ธฐ์กด ์ค์ ๋ฐฑ์
sudo cp \
/etc/haproxy/haproxy.cfg \
/etc/haproxy/haproxy.cfg.bak
๊ทธ๋ฆฌ๊ณ /etc/haproxy/haproxy.cfg๋ฅผ ํ๊ฒฝ์ ๋ง๊ฒ ๋ณ๊ฒฝํ๋ค.

WEB ์๋ฒ๊ฐ 80ํฌํธ์ด๊ธฐ ๋๋ฌธ์ bind ๋ถ๋ถ์ 80์ผ๋ก ์์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ Apache๋ก WEB ์๋ฒ๊ฐ ๋ฐ๋ก ๊ตฌ์ฑ๋์ด์์ด์ backend static์ ์ฃผ์์ฒ๋ฆฌํ๋ค.
4. Keepalived ์ค์
# keepalived ์ค์น
sudo dnf install keepalived -y
keepalived๋ฅผ ๋จผ์ ์ค์นํ๊ณ /etc/keepalived/keepalived.conf๋ฅผ ์์ ํ๋ค. ๋๋ ์์ ํ๊ธฐ ์ ์ ํน์ ๋ชจ๋ฅผ ์ํฉ์ ๋๋นํด ๋ฐฑ์ ์ฉ์ผ๋ก ๋ณต์ฌ๋ณธ์ ๋ง๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.\
# Master ์๋ฒ ์ค์
! Configuration File for keepalived
vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface { ip addr๋ก ํ์ธํ ํ์ฌ ๋ด ๋คํธ์ํฌ ์ธํฐํ์ด์ค }
virtual_router_id 51
priority 100
advert_int 1
unicast_src_ip { HAProxy1 IP ์ฃผ์ }
unicast_peer {
HAProxy2 IP ์ฃผ์
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
{ ๊ฐ์ IP ์ฃผ์ }
}
track_script {
chk_haproxy
}
}
๋ค๋ฅธ HAProxy ์๋ฒ์ keepalived.conf๋ ์์ฑํ๋๋ฐ state๋ BACKUP์ผ๋ก ์์ฑํ๊ณ priority๋ MASTER ์๋ฒ๋ณด๋ค ๋ฎ์ ๊ฐ์ผ๋ก ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ multicast๋ก ํ ๋ ์ ์์ ์ผ๋ก ์๋ํ์ง ์์ ๋๋ unicast๋ก ๋์ํ๋๋ก ์ถ๊ฐํ๋ค. ๊ทธ๋์ unicast๋ฅผ ์ฌ์ฉํ๋ค๋ฉด HAProxy1์ ์์ฒ๋ผ ํ๊ณ HAProxy2๋ unicast_src_ip๋ฅผ HAProxy2 IP ์ฃผ์๋ฅผ ์์ฑํ๊ณ unicast_peer์๋ HAproxy1 IP ์ฃผ์๋ฅผ ์์ฑํ๋ค.


5. Apache ์์
WEB ์๋ฒ ์ฆ, Apache์์ ๊ธฐ์กด์ Tomcat์ผ๋ก ์ง์ ์ฐ๊ฒฐ๋๋ ๊ฒ์ HAProxy๋ฅผ ๊ฑฐ์ณ์ ์ฐ๊ฒฐ๋๋๋ก ํ๋ค. ์ด๋ ์ฃผ์๋ keepalived๋ก ํ ๋นํ ๊ฐ์ IP์ฃผ์๋ก ์์ฑํ๋ค.
# ProxyPass ๋์์ HAProxy๋ก ๋ณ๊ฒฝ
ProxyPass /board http://{ Keepalived๋ก ํ ๋นํ ๊ฐ์IP }:8080/board
ProxyPassReverse /board http://{ Keepalived๋ก ํ ๋นํ ๊ฐ์IP }:8080/board
3๏ธโฃํ ์คํธ ๊ฒฐ๊ณผ

HAProxy1 ์๋ฒ๋ฅผ ์ข ๋ฃํ๋๊น HAProxy2 ์๋ฒ๊ฐ MASTER๋ก ์น๊ฒฉํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด๋ฅผ ํตํด HAProxy ๋จ์ผ ์ง์ ์ฅ์ ๋ฌธ์ ๋ ํด๊ฒฐ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ WAS ์ด์คํ๋ JMeter๋ก ํ ์คํธ๋ฅผ ํด์ ์ถํ์ ๋ค์ ์ถ๊ฐํ๊ฒ ๋ค!
4๏ธโฃmod_proxy์ HAProxy ๋น๊ต
| ํญ๋ชฉ | Apache(mod_proxy) | HAProxy |
| ์ฃผ ์ญํ | ์น ์๋ฒ + ๊ฐ๋จํ ๋ก๋๋ฐธ๋ฐ์ | ์ ์ฉ ๋ก๋๋ฐธ๋ฐ์ |
| ์ฑ๋ฅ | ๋ณดํต | ๋งค์ฐ ๋์ |
| ๋๋ ๋์ ์ ์ | ๊ฐ๋ฅ | ๋งค์ฐ ๊ฐํจ |
| Health Check | ๊ธฐ๋ณธ ์ง์ | ๋ค์ํ ๋ฐฉ์ ์ง์ |
| ์ธ์ ์ ์ง | ์ง์ | ์ง์(์ค์ ๋ค์) |
| ๋ก๋๋ฐธ๋ฐ์ฑ ์๊ณ ๋ฆฌ์ฆ | ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์ | ๋งค์ฐ ๋ค์ |
| ํต๊ณ ํ์ด์ง | ์ ํ์ | ํ๋ถํ ํต๊ณ ์ ๊ณต |
| ์ค๋ฌด ์ฌ์ฉ | ์๊ท๋ชจ | ๋๊ท๋ชจ ์๋น์ค์์ ๋ง์ด ์ฌ์ฉ |
๐กํ๊ณ
์ด์ ์ ๋ฏธ๋๋ด์ผ์ผ๊ฒฝํ์ ํตํด์ ์ธํด์ ํ ๋ ์์ ๊ณ์ ๋๋ฆฌ๋๊ป์ DB๋ฅผ ์ฐ๊ฒฐํ ๋ ๊ฐ์ IP๋ฅผ ํ์ฉํด์ ์ฐ๊ฒฐํ๋ค๊ณ ๋ง์ํด์ฃผ์ จ๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ์IP๋ฅผ ์ด๋ป๊ฒ ํ ๋นํ๋์ง ๋๋ ๋ฐฉ๋ฒ์ ์์ง ๋ชปํด์ ๊ถ๊ธํดํ๊ณ ์์๋๋ฐ ์ด์คํํ๋ฉด์ ์ด๋ป๊ฒ ๊ฐ์IP๋ฅผ ํ ๋นํ๋์ง ๋ฐฉ๋ฒ์ ์ ์ ์์ด์ ์ข์ ํ์ต๊ฒฝํ์ด์๋ค๊ณ ์๊ฐํ๋ค!๐
๐์ฐธ๊ณ ์ฌ์ดํธ
'OS&Server > WEB | WAS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [WEB/WAS] Apache โ Tomcat ์ฐ๋(Reverse Proxy) (0) | 2026.02.04 |
|---|---|
| [WEB/WAS] NGINX๋? (2) | 2025.07.03 |