서버를 배포하고 네트워크를 구성하기 위해 이것저것 알아보다보면 Web Server와 Web Application Server라는 단어를 심심치 않게 볼 수 있다.
우선 Web Server와 WAS(Web Application Server)는 모두 HTTP 요청을 받을 수 있는 서버다.
비슷한 이름을 가진, 그리고 HTTP 통신이 가능한 두 서버는 어떤 차이점을 가질까?
Apache, Nginx 등과 같은 소프트웨어로 유명한 웹 서버는 정적 콘텐츠를 제공하는 역할을 주로 담당한다.
정적 콘텐츠란 사용자와의 상호작용 없이 제공할 수 있는 콘텐츠를 이야기한다.
정적 콘텐츠
어떤 상황에서도 클라이언트가 항상 같은 응답을 기대할 수 있는 콘텐츠
- HTML 문서
- CSS
- JS 파일
- Image 파일
그렇다면 사용자의 입력값, 동작에 따라 응답이 유동적으로 변화해야 하는 동적 콘텐츠는 어디서 관리할까?
웹 애플리케이션 서버는 DB와 상호작용이 필요하거나, 연산을 진행하는 등 동적인 로직의 실행을 담당한다.
프로그래밍 언어로 작성된 서버측 애플리케이션(PHP, Java, NodeJS)를 실행하고 클라이언트 측 요청에 따른 동적 콘텐츠 생성, 전달이 주 역할이다.
그 응답은 주로 HTML과 DB에서 추출한 데이터를 조합하여 생성하는데, 바로 웹 페이지다.
대부분의 웹 애플리케이션은 웹 서버를 내장하고 있다.
즉, WAS 또한 정적 콘텐츠를 응답으로 돌려주는 것도 가능하다는 이야기.
그렇다면 WAS에서 웹 서버의 역할이 대체 가능하기 때문에 웹 서버는 사용되지 않는걸까?
정적 콘텐츠와 동적 콘텐츠의 제공을 모두 WAS에만 의존한다면 과도한 부하를 야기 시킨다.
이는 곧바로 성능의 저하와 같은 문제를 마주하게 될 것이다.
때문에 정적 콘텐츠는 웹 서버, 동적 콘텐츠는 WAS, 명확하게 분리하여 사용하는 것이 더 유리할 것이다.
각 역할을 분리, 조합하여 가장 높은 시너지를 낼 수 있는 방식 중 하나는 바로
Web server를 WAS의 Reverse proxy로 활용하는 것이다.
Reverse proxy
실제 로직을 처리하는 Web Application Server 앞 단계에 배치된 서버
- 로드 밸런싱: 리버스 프록시는 클라이언트 요청을 여러 웹 애플리케이션 서버로 분산시키는 로드 밸런싱 역할을 수행합니다. 이를 통해 부하를 분산하고 시스템의 안정성을 높일 수 있습니다.
- SSL 암호화: 리버스 프록시는 클라이언트와의 통신에서 SSL 암호화를 처리할 수 있으며, 이를 통해 보안 연결을 제공할 수 있습니다.
- 캐싱: 리버스 프록시는 정적 콘텐츠를 캐싱하여 반복적인 요청에 대한 응답 성능을 향상시킬 수 있습니다.
- 보안 및 인증: 리버스 프록시는 웹 애플리케이션 서버에 대한 인증을 처리하고, 보안 정책을 적용하여 악성 요청을 필터링할 수 있습니다.
클라이언트(브라우저)와 WAS 간의 중간 계층 역할을 Web server에게 일임한다면 보안, 성능 측면에서 이점을 기대할 수 있을 것이다.
| 이름 | 역할 | 제공 콘텐츠 |
|---|---|---|
| Web Server | 정적 콘텐츠의 서빙, Reverse proxy | 정적 콘텐츠 |
| WAS | 동적 로직 수행, 동적 데이터 생성 | 정적, 동적 콘텐츠 |
초기 단계의 작은 서비스는 WAS 하나로 충분히 운영이 가능할 것이다.
서비스가 성장함에 따라 보안, 부하 분산 등 여러 상황을 고려해야 하는 때가 온다면 이 내용은 반드시 알고 있어야 할 내용일 것이다.