왜 서버가 두 종류로 나뉠까?
웹 서비스를 처음 접하면 "서버 하나면 되는 거 아닌가?" 싶다. 그런데 실제로는 웹서버와 WAS(Web Application Server)라는 두 종류의 서버가 짝을 이뤄 돌아가는 경우가 많다. 이 둘의 역할을 비유와 실제 기술 개념을 동시에 보며 알아보자.
1. 웹서버 = 홀 직원

비유: 손님(요청)이 들어오면 가장 먼저 맞이하는 사람. 물이나 물티슈, 이미 준비된 메뉴판처럼 바로 내줄 수 있는 건 직접 가져다준다. 주방에 물어봐야 하는 요청은 대신 전달해주고, 손님이 몰리면 여러 주방에 나눠서 안내하기도 한다.
실제 개념: 웹서버(대표적으로 Apache, Nginx)는 클라이언트 요청을 가장 먼저 받는 창구다. 하는 일은 크게 세 가지다.

- 정적 콘텐츠 처리: 이미지, HTML, CSS, JS처럼 이미 만들어져 있는 파일을 그대로 빠르게 돌려준다. 매번 새로 계산할 필요가 없어 처리 속도가 빠르다.
- 리버스 프록시(Reverse Proxy): 클라이언트는 웹서버 하나에만 요청을 보내는 것처럼 보이지만, 실제로는 웹서버가 뒤에 있는 WAS로 요청을 대신 전달한다. 내부 서버 구조를 외부에 감출 수 있어 보안에도 유리하다.
- 로드밸런싱(Load Balancing): WAS가 여러 대 있을 때 요청을 골고루 분산시켜준다.
최근에는 Nginx가 적은 자원으로도 훨씬 많은 동시 접속을 처리할 수 있는 구조(이벤트 기반 처리 방식) 덕분에 더 널리 쓰이는 추세다.
2. WAS = 주방장

비유: 실제로 요리를 만드는 주방. 손님마다 다른 주문을 그때그때 새로 만들고, 레시피(비즈니스 로직)대로 조리하며, 냉장고(데이터베이스)에서 재료를 꺼내오는 것도 주방의 일이다.
실제 개념: WAS(대표적으로 Tomcat, JBoss)는 실제로 로직을 계산해야 하는 요청을 처리한다.

- 동적 콘텐츠 처리: 로그인 후 마이페이지, 검색 결과처럼 사용자마다 달라지는 화면을 그때그때 계산해서 만들어낸다.
- 비즈니스 로직 실행: 장바구니 계산, 포인트 적립 같은 서비스의 핵심 규칙이 여기서 돌아간다.
- DB 연동: 데이터베이스에 접속해 데이터를 읽고 쓰는 작업도 WAS의 몫이다.
주로 자바 기반 웹 애플리케이션에서 많이 쓰인다.
3. 왜 굳이 나눠서 일할까?

비유: 물이나 물티슈까지 매번 주방장이 직접 가져다준다고 생각해보자. 손님이 몰리면 정작 중요한 요리에 집중하지 못한다. 또, 손님이 주방까지 직접 들어가서 이것저것 만지게 두면 위험하다.
실제 개념: 이론적으로는 WAS 혼자서도 정적 파일까지 다 처리할 수 있지만, 굳이 웹서버를 앞에 두는 이유는 두 가지다.
- 성능: 정적 파일 처리는 웹서버가 WAS보다 훨씬 가볍고 빠르게 처리한다. 무거운 WAS가 이미지 파일 하나 돌려주는 데까지 자원을 쓰는 건 낭비이므로, 가벼운 일은 웹서버가, 무거운 계산은 WAS가 나눠 맡는다.
- 보안: WAS를 외부 인터넷에 직접 노출하지 않고 항상 웹서버 뒤에 숨겨둔다. 외부 공격자가 직접 WAS에 접근할 수 있는 통로 자체를 차단하는 효과가 있다.
4. 실제 요청 흐름
비유: 손님이 들어와서 → 홀 직원이 맞이하고 → 간단한 건 바로 내주고 → 주방에 물어봐야 하는 건 전달하고 → 주방이 요리해서 → 다시 홀 직원을 거쳐 손님에게 전달된다.

실제 개념:
- 사용자가 요청을 보낸다
- 웹서버가 먼저 받는다
- 이미지·HTML 같은 단순 요청이면 웹서버가 바로 응답한다
- 로그인, 검색처럼 계산이 필요한 요청이면 웹서버가 WAS로 넘긴다
- WAS가 계산을 마치고 결과를 웹서버에게 돌려준다
- 웹서버가 그 결과를 사용자에게 전달한다
이 구조를 리버스 프록시 패턴(Reverse Proxy Pattern)이라고 부른다.
정리

웹서버는 손님을 맞이하고 간단한 건 바로 처리하는 홀 직원, WAS는 진짜 요리를 만드는 주방장이다.
이렇게 역할을 나누는 이유는 딱 두 가지, 더 빠르게(성능) 그리고 더 안전하게(보안) 서비스하기 위해서다.
'Web > Knowledges' 카테고리의 다른 글
| 3-Tier 구조, 그리고 이게 VPC와 만나는 지점 (0) | 2026.07.16 |
|---|