기존에 스프링 부트로 작업을 해온 나는 웹 서버나 WAS에 대해 잘 알지 못했다. 내장 톰캣만 사용했으니까.
공부할 때 AWS 서버로 배포하는 것도 배우긴 했지만, 뭘 가입하고 설치하는 등 매뉴얼만 따라서 해봤을 뿐 정확히 알고 넘어가진 못했다.
그래서 이번 기회에 한번 공부해보려 한다. 실제 설정이나 환경 구축까지는 어디서부터 봐야할지 감이 잡히지 않아서 못할지는 몰라도, 개념만큼은 확실히 하고 가보도록 하겠다!

이해를 돕기 위해 간단한 구조도를 만들어 왔다.
이를 바탕으로 어떻게 굴러가는지 단계별로 살펴보자.
우리가 어떤 사이트에 접속한다고 하자.
접속하기 위해 해당하는 주소를 주소창에 입력하고 엔터를 누르면,
클라이언트는 http 요청을 웹 서버에 보낸다.
웹 서버는 이 요청을 받아서,
WAS는 DB와 연동하여 데이터를 처리하고 요청에 대한 응답을 웹 서버로 전달한다.
웹 서버는 이를 클라이언트에게 전달한다.
| 구분 | 웹 서버 | WAS |
|---|---|---|
| 역할 | 정적 컨텐츠 제공 | 동적 요청 처리, 비즈니스 로직 실행 |
| 주요 처리 내용 | HTML, CSS, JS, 이미지, 동영상 등 | DB 연동, 세션 관리, 로직 처리 |
| 대표 기술 | Nginx, Apache | Tomcat, WildFly, WebLogic |
| 확장성 | 정적 요청 분산에 적합 | WAS 부하를 줄이는 구조와 함께 확장 가능 |
| 트래픽 관리 | 캐싱, 로드 밸런싱 지원 | 로직 처리에 집중 |
왜 분리해서 사용할까?🤔
1. 역할 분리로 성능 최적화
정적 컨텐츠는 처리 속도가 빠르고, 웹 서버에서 바로 응답할 수 있으므로 WAS의 부하를 줄이고, 전체 처리 속도를 향상시키기 위해 분리한다.
2. 보안 강화
웹 서버가 클라이언트와 직접 통신하는 역할을 하고, WAS는 내부 네트워크에서만 동작하도록 구성하여 WAS를 외부로부터 숨길 수 있다.
3. 확장성
웹 서버는 정적 파일 처리에 최적화된 추가 서버를 배포하고, WAS는 더 많은 동적 요청을 처리할 수 있도록 별도로 확장하는 등 각 계층을 독립적으로 확장할 수 있다.
4. 장애 분리
한쪽에서 문제가 생겨도 전체 서비스가 중단되지 않는다.
5. 캐싱 및 로드 밸런싱
웹 서버는 정적 콘텐츠를 캐싱하거나, 트래픽을 균등하게 분산하여 WAS의 과부하를 방지한다.
참고로 우리나라에선 WAS라고 하는데, 영어권에서는 Application Server(AS)로 불린다고 한다. 검색할 때 참고할 것!