웹 서버와 WAS의 차이 (Web Server, Web Application Server)
한눈에 보기
웹 서버는 정적 자원을 그대로 응답하고, WAS는 애플리케이션 코드를 실행해 동적 응답을 만든다. 두 계층을 나누는 이유와 리버스 프록시, 로드 밸런싱, 최신 클라우드 환경에서의 변형까지 다룬다.
최종 업데이트 2026.09.17
웹 서버(Web Server)는 HTTP 요청을 받아 HTML, 이미지, 자바스크립트(JavaScript) 파일 같은 정적 자원을 그대로 응답하는 소프트웨어이고, WAS(Web Application Server)는 애플리케이션 코드를 실행해 데이터베이스 조회와 비즈니스 로직 처리를 거친 동적 응답을 만들어 내는 소프트웨어다. 엔진엑스(Nginx)와 아파치(Apache)가 전자의 대표이고 톰캣(Tomcat)이 후자의 대표다. 실무에서는 두 계층을 겹쳐 배치해 정적 처리와 동적 처리를 분담시키는 구조가 표준이다.
정적 콘텐츠와 동적 콘텐츠
정적 콘텐츠는 누가 언제 요청해도 같은 내용이 반환되는 파일이다. 로고 이미지, CSS, 빌드된 자바스크립트 번들이 여기에 속하며, 디스크의 파일을 읽어 보내기만 하면 되므로 처리 비용이 매우 작다. 동적 콘텐츠는 요청자와 요청 시점, 파라미터에 따라 내용이 달라지는 응답이다. 로그인한 사용자의 주문 내역 페이지나 JSON(JavaScript Object Notation)을 반환하는 API 응답이 그 예로, 코드 실행과 데이터베이스 접근이 필요해 비용이 크다. 웹 서버는 전자를 빠르게 흘려보내는 데 특화되어 있고, WAS는 후자를 만들어 내는 실행 환경, 즉 스레드 풀(Thread Pool), 데이터베이스 커넥션 풀(Connection Pool), 트랜잭션과 세션 관리 기능을 갖추고 있다. 자바(Java) 진영에서는 서블릿(Servlet) 컨테이너인 톰캣이 WAS 역할을 하며, 스프링 부트(Spring Boot)는 톰캣을 내장해 애플리케이션 하나로 실행되게 만든 형태다. 참고로 정적 파일 전송은 WAS도 할 수 있지만 웹 서버만큼 효율적이지 않고, 반대로 웹 서버는 애플리케이션 코드를 실행하지 못한다는 것이 역할의 경계다.
왜 웹 서버를 WAS 앞에 두는가
WAS 혼자서도 서비스는 가능하다. 그런데도 웹 서버를 앞단에 두는 이유는 여러 가지다. 첫째, 부담 분리다. 정적 요청을 웹 서버가 끊어 주면 WAS는 비싼 동적 처리에만 자원을 쓸 수 있다. 둘째, 리버스 프록시(Reverse Proxy)와 로드 밸런싱(Load Balancing)이다. 웹 서버가 요청을 받아 뒤의 여러 WAS 인스턴스에 분배하면 수평 확장과 무중단 배포가 가능해지고, 특정 WAS가 죽어도 나머지로 서비스를 잇는 장애 격리(Failover)가 된다. 셋째, 보안이다. WAS와 내부 구조를 외부에서 감추고, TLS(Transport Layer Security) 암호화 처리를 웹 서버가 대신 끝내는 TLS 종료(TLS Termination)로 WAS의 연산 부담을 던다. 넷째, 부가 기능이다. 응답 압축, 캐싱, 요청 제한, 접근 로그 같은 공통 기능을 애플리케이션 코드 밖에서 일괄 처리할 수 있다. 이런 이유로 전형적인 구성은 다음과 같은 계층이 된다.
클라이언트
-> (CDN: 정적 자원 캐시)
-> 웹 서버 (Nginx: TLS 종료, 정적 파일, 리버스 프록시)
-> WAS 여러 대 (Tomcat: 애플리케이션 실행)
-> 데이터베이스
웹 서버와 WAS 비교
| 구분 | 웹 서버 | WAS |
|---|---|---|
| 주 역할 | 정적 자원 응답, 프록시 | 동적 응답 생성, 로직 실행 |
| 처리 대상 | 파일 전송 | 코드 실행과 DB 연동 |
| 대표 제품 | 엔진엑스, 아파치 | 톰캣, 제이보스(JBoss), 웹로직(WebLogic) |
| 자원 소비 | 가볍다 | 무겁다 |
| 제공 기능 | TLS 종료, 캐싱, 로드 밸런싱 | 트랜잭션, 커넥션 풀, 세션 관리 |
| 배치 위치 | 외부와 맞닿는 앞단 | 웹 서버 뒤의 내부망 |
구조의 변형과 최신 흐름
이 고전적 구조는 환경에 따라 변형된다. 노드(Node.js)나 고(Go)로 만든 서버는 서블릿 컨테이너 같은 별도 WAS 없이 애플리케이션 자체가 HTTP를 직접 처리하므로, 웹 서버와 WAS의 구분보다 리버스 프록시와 애플리케이션 서버의 구분으로 이해하는 편이 정확하다. 클라우드 환경에서는 웹 서버의 역할 상당 부분을 관리형 서비스가 대체한다. 정적 자원은 CDN(Content Delivery Network)이 세계 각지에서 캐시해 주고, 로드 밸런싱은 클라우드의 로드 밸런서가, 쿠버네티스(Kubernetes) 환경에서는 인그레스(Ingress) 컨트롤러가 맡는다. 형태는 달라져도 정적과 동적의 분리, 프록시 계층을 통한 보안과 확장이라는 원리는 그대로 유지되므로, 면접에서는 제품 이름의 암기보다 계층을 나누는 이유를 설명할 수 있어야 한다.
면접에서 이렇게 물어본다
- 웹 서버와 WAS의 차이를 정적과 동적 콘텐츠 개념으로 설명해 보라.
- WAS만으로도 서비스가 되는데 웹 서버를 앞에 두는 이유는 무엇인가.
- 리버스 프록시가 무엇이고 포워드 프록시와 어떻게 다른가.
- TLS 종료를 웹 서버에서 처리하는 구조의 장점을 말해 보라.
- 스프링 부트의 내장 톰캣 구조에서도 엔진엑스를 앞단에 두는 이유는 무엇인가.
웹에서 같이 읽기
- 웹 인증 방식 총정리 (Authentication)웹 서비스의 인증은 요청을 보낸 사용자가 누구인지 확인하는 절차다. HTTP는 무상태 프로토콜이므로 로그인 이후 요청마다 사용자를 식별할 수단이 필요하며, 세션, 토큰, API 키, OAuth를 비교해 각 방식의 적합한 상황을 정리한다.
- 쿠키와 세션 (Cookie, Session)쿠키는 서버가 브라우저에 저장하도록 지시하는 작은 키와 값의 쌍이고, 세션은 쿠키를 운반 수단으로 삼아 사용자별 상태를 서버 저장소에 보관하는 기법이다. 두 개념의 동작 원리와 보안 속성, 위협 대응을 다룬다.
- CSR과 SSR (Client Side Rendering, Server Side Rendering)CSR은 브라우저가 자바스크립트로 화면을 그리는 방식, SSR은 서버가 완성된 HTML을 내려보내는 방식이다. 초기 로딩, SEO, 서버 부하 관점의 차이와 SSG, ISR을 포함한 혼합 전략까지 정리한다.
- CSRF와 XSS (Cross Site Request Forgery, Cross Site Scripting)XSS는 공격자의 스크립트를 피해자 브라우저에서 실행시키는 공격이고, CSRF는 로그인된 브라우저를 속여 피해자 명의의 요청을 보내는 공격이다. 두 공격이 악용하는 신뢰 관계의 차이와 방어 수단을 정리한다.
이 개념, 내 코드에서는 어떻게 물어볼까요
데브핏(DevFit)에 채용공고 URL을 붙여 넣고 레포지토리를 연결하면, 내가 쓴 커밋에서 예상 질문과 어필 포인트를 만듭니다. 하루 10회까지 무료입니다. 합불 판정이나 지원자 랭킹은 만들지 않고, 최종 판단은 사람이 합니다.
공고 넣고 시작하기