배포 회고록: Web 서버 vs WAS, 제대로 이해하기
🚀 배포 회고록: Web 서버 vs WAS, 제대로 이해하기
신규 프로젝트를 배포하던 날이었습니다.
아키텍처는 단순했죠.
- WAS 서버: Tomcat + MySQL, war 파일 배포
- Web 서버: Nginx 설치, 정적 파일 처리 + 리버스 프록시
Tomcat이 돌아가는 WAS 서버에 Nginx를 설치해 버린 겁니다. 😅
“어차피 Nginx도 필요하잖아? 그냥 여기 깔면 되지 않을까?”
→ 이렇게 생각했던 게 화근이었죠.
결과는?
- 정적 리소스 요청이 꼬이고,
- Tomcat과 Nginx가 같은 포트를 두고 충돌하고,
- DB 연결까지 지연되는 대참사 발생.
그제서야 저는 Web 서버와 WAS의 차이를 명확히 이해하지 못했다는 걸 뼈저리게 깨달았습니다.
2. Web 서버란? (Nginx, Apache)
Web 서버는 말 그대로 정적 컨텐츠를 제공하는 서버입니다.
여기서 “정적”이란 변하지 않는, 그냥 파일 그대로의 응답을 말합니다.
예를 들면:
- HTML, CSS, JS
- 이미지(.jpg, .png)
- 동영상(.mp4)
Web 서버는 이런 요청을 처리하는 데 최적화되어 있어서, 속도도 빠르고 자원 소모도 적습니다.
대표적인 Web 서버
- Nginx: 요즘 가장 많이 쓰이는 서버. 리버스 프록시, 로드 밸런싱, 정적 파일 처리에 특화.
- Apache HTTP Server: 전통 강자. 모듈 기반으로 확장성이 뛰어나지만, 대규모 트래픽에서는 Nginx에 밀리는 추세.
👉 핵심 포인트:
Web 서버는 클라이언트 요청을 받아,
- 정적 파일은 즉시 응답하고,
- 동적 요청은 뒤에 있는 WAS로 전달해줍니다.
3. WAS란? (Tomcat, WebLogic, Jeus)
WAS (Web Application Server)는 이름 그대로 애플리케이션이 돌아가는 서버입니다.
여기서는 동적 컨텐츠를 처리합니다.
즉, 요청마다 결과가 달라지는 로직들:
- 로그인/회원가입
- 게시판 글쓰기/조회
- 장바구니/결제
- DB CRUD
대표적인 WAS
- Tomcat: 오픈소스, 가장 대중적. 서블릿 컨테이너로 JSP/Servlet 기반 동작.
- WebLogic, Jeus, JBoss: 대규모 기업 환경에서 사용되는 상용 WAS.
👉 핵심 포인트:
WAS는 비즈니스 로직 실행 + DB 연동 + 동적 HTML 생성을 담당합니다.
4. Web 서버와 WAS, 왜 따로 둘까?
여기서 궁금한 점,
“아니, Tomcat(WAS)도 정적 파일 서빙 가능한데, 왜 굳이 Nginx(Web 서버)를 따로 두는지?"
답은 역할 분리에 있습니다.
(1) 성능 최적화
정적 파일은 Web 서버가 훨씬 빠르고 가볍게 처리합니다.
Tomcat이 굳이 CSS나 JS까지 처리하면, DB 연결 같은 중요한 로직에 쓸 자원이 줄어듭니다.
(2) 안정성 (로드 밸런싱)
Nginx 같은 Web 서버는 여러 대의 Tomcat 서버로 트래픽을 분산(로드 밸런싱)시킬 수 있습니다.
한 WAS가 죽어도 다른 WAS로 연결을 넘겨, 서비스 중단을 막습니다.
(3) 보안
WAS는 보통 DB와 연결되어 있어 민감한 로직을 다룹니다.
만약 Tomcat이 외부에 직접 노출된다면 공격자가 바로 DB까지 노릴 수 있고,
그래서 Nginx(Web)를 앞단에 세워 요청을 필터링하고, WAS는 내부망에서만 돌도록 하는..?
5. 요청 흐름도 (정리)
마지막으로, 실제 요청이 어떻게 흘러가는지 보겠습니다.
- 클라이언트(브라우저)가 요청 → https://hjwjo.com/mypage
- Nginx(Web 서버)가 요청 받음
- 정적 파일이면: 바로 응답
- 동적 요청이면: WAS로 전달
- Tomcat(WAS)이 로직 처리
- DB(MySQL)에서 유저 정보 조회
- JSP/Servlet으로 HTML 생성
- 결과를 다시 Nginx에 반환
- Nginx(Web 서버)가 결과 페이지를 최종적으로 클라이언트에게 응답
- Web 서버(Nginx) = 정적 파일 처리, WAS 앞단에서 로드 밸런싱·보안 담당
- WAS(Tomcat) = 비즈니스 로직 실행, DB 연동, 동적 페이지 생성
- Web 서버 = 안내 데스크 (정적 응답, 보안, 트래픽 분산)
- WAS = 메인 셰프 (동적 응답, DB 연동, 로직 처리)