WAS와 Web Server를 분리하는 이유 (Web WAS 연동 이유)
구글에 검색을 해보면 아래와 같은 이유로 많이 나올 것입니다.
1) 정적과 동적 처리를 나누기 위해서
2) WAS의 Web Server 역할은 성능상 좋지 않기 때문에
사실 위의 두가지의 경우가 틀린 이유는 아닙니다.
하지만 두번째의 "WAS의 Web Server 성능이 기존의 Apache나 Nginx보다 좋지 않기 때문에" 사실 이렇게만 말한다면 틀리다고 말할 수 있습니다.
최근 Tomcat의 경우는 많은 업데이트를 거치고나서 정적 페이지 처리 기능은 사실 기존의 Web Server와 크게 다르지 않습니다. 어떻게 보면 성능보다는 설정에 관한 것들이 많은 동접자 처리를 처리하기에 애매한 부분이 있기 때문입니다.
Apache의 세션 관리 튜닝이나 동접자 튜닝 및 접근 제어 관련된 설정은 Apache Tomcat에서 하기에는 애매한 부분이 많습니다.
또 한가지 생각해보면 Tomcat에는 동적 자료들은 정적 자료들과 비교하면 무거운 파일들이고 정적 자료는 다소 가벼운 파일들일 것입니다. 근데 페이지 상 정적 자료들이 많은 페이지도 많을 것입니다.
이 접속자가 10,000명이 넘는 대규모 서비스라고 가정하면 "이 정적 콘텐츠들이 많은 페이지 때문에 Tomcat의 "MaxThread"를 늘려서 많은 사용자를 받는다?" 리소스 낭비가 심할 것이고 이 톰캣 역시 단독으로 돌아가지는 않고 이중화를 해줘야되기 때문에 리소스 사용량이 감당이 안될 것입니다.
이럴 경우는 Apache에 정적 자료들을 분리하고 mod_jk 등을 이용해 Apache가 처리하게 하는 과정을 가지고 MaxClients 같은 동접자 관련 설정을 올려주는 것이 좋다고 생각합니다.
계속해서 관리하다 보면 KeepAlive, workers.properties의 lbfactor, sticky session 등 관리 부분에서 알아야될 옵션들이 많이 생길 것입니다. 이 부분은 나중에 소개해드리겠습니다.
위의 이유는 정적 콘텐츠와 동적 콘텐츠 분리의 이유도 될 수 있겠네요.
그리고 이 부분을 생각하다보면 CDN 역시 고려하게 될 것입니다. 규모가 작다면 CDN까지는 고려하지 않아도 됩니다.
WAS와 Web Server를 분리하는 이유 - 보안성
그리고 실무적인 이유에서 봤을 때 가장 큰 이유는 보안성 때문입니다.
위와 같이 클라이언트가 바로 Tomcat으로 붙으면 뒷 단에 있는 DB에 대한 정보를 클라이언트 및 해커들이 알 수 있는건 시간 문제입니다.
클라이언트가 Tomcat에 붙으려면 DMZ라는 외부 통신이 되는 구간에 서버를 위치해야하기 때문입니다.
▣ WAS에 존재하는 DB 정보가 그렇게나 위험한 것일까?
아래와 같은 Datasource 정보가 노출되면 위험하니 WEB Server과 WAS는 분리를 하는 것이 좋습니다.
DataSource를 참고하면 외부 침입자가 이 서버와 연결된 DB 계정과 암호를 알아내는건 시간 문제이겠죠?
<Context> ...
<Resource name="jdbc/<DB Database 명>"
auth="Container"
type="javax.sql.DataSource"
username="DB 계정명"
password="DB 암호"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://<DB 서버 주소>:<DB포트>/<DB Database 명>"
maxActive="NN"
maxIdle="NN"/>
...
</Context>
이렇게 앞 단에 Web Server를 두게 되면 클라이언트는 DMZ 대역에 구성된 Web Server에만 접속을 할 수 있게 됩니다.
나머지 WAS, DB는 내부망에 위치하면 됩니다.
WAS의 경우는 JK 연동이 되어 있기 때문에 WEB의 주소와 특정 포트로만 통신을 하게 하고 나머지는 다 막아버리면 됩니다. 이런 구조를 가져가면 최소한 Tomcat만 구성한 서버보다는 훨씬 안전한 구성이됩니다.
기업에서는 방화벽 장비, 방화벽 솔루션, 접근 제어 솔루션 등 외부의 위협으로부터 서버를 안전하게 보호해주는 솔루션들이 하기 때문에 걱정을 덜어줍니다.
만약 이 장비나 솔루션이 없다면 OS 자체의 방화벽인 "iptables, firewall-cmd"를 이용해 접근제어를 해야됩니다.
이 방법만으로 기업에서 서버를 운영하게된다면 위험할 수도 있으니 되도록이면 방화벽 장비 및 디도스 장비 도입을 고려하는 것이 좋아보입니다.
'WEB&WAS > Apache Tomcat' 카테고리의 다른 글
WAS) WAS에 대한 이야기 (7) - 개발 소스 관리 (0) | 2022.01.02 |
---|---|
WAS) WAS에 대한 이야기 (6) - WAS 구성도 설계 (0) | 2021.12.22 |
WAS) WAS에 대한 이야기 (4) - WAS의 종류 (0) | 2021.07.31 |
WAS) WAS에 대한 이야기 (3) - WAS란? (0) | 2021.07.31 |
WAS) WAS에 대한 이야기 (2) - 미들웨어란? (0) | 2021.07.31 |