웹 서버와 웹 애플리케이션 개념
웹 서버와 웹 애플리케이션 개념
웹 서버(Web Server)와 웹 애플리케이션 서버(WAS) 정리
개요
이번 글에서는 웹 서버(Web Server)와 웹 애플리케이션 서버(Web Application Server, 이하 WAS)의 개념과 차이점을 살펴봅니다.
HTTP를 기반으로 하는 웹 환경에서 이들이 어떤 역할을 담당하며, 실제 시스템 구성 시 어떻게 활용되는지 이해하는 데 도움이 될 것입니다.
웹과 HTTP
웹 환경에서는 모든 통신이 HTTP 프로토콜을 기반으로 이루어집니다.
- 클라이언트-서버 구조: 사용자가 웹 브라우저(클라이언트)에서 URL을 입력하면 서버에 요청을 보내고, 서버는 HTML 문서를 응답합니다. 웹 브라우저는 이를 화면에 렌더링하여 사용자에게 보여줍니다.
- 데이터 전송 방식: HTML, 텍스트, 이미지, 음성, 영상, 파일, 그리고 API 호출 시 자주 쓰이는 JSON, XML 등 모든 형태의 데이터가 HTTP 기반으로 전송됩니다.
- 서버 간 통신도 HTTP 활용: 서버 대 서버 간 데이터 전송에도 HTTP가 널리 사용되어, 현대 웹 환경은 HTTP의 시대라고 할 수 있습니다.
웹 서버(Web Server)란?
특징
- HTTP 기반 동작: 웹 서버는 HTTP 요청을 받아들이고, HTTP 응답을 반환하는 서버입니다.
- 정적 리소스 제공: HTML, CSS, JS, 이미지, 영상 등 미리 준비된 정적 파일을 요청에 따라 그대로 응답합니다.
- 대표적인 예: Nginx, Apache 등이 이에 해당합니다.
정적 리소스를 제공한다는 것은, 클라이언트가
index.html
을 요청하면 서버가 해당 파일을 그대로 반환하는 식의 단순한 동작을 의미합니다.
웹 애플리케이션 서버(Web Application Server, WAS)란?
특징
- HTTP 기반 동작: WAS 역시 HTTP 프로토콜 위에서 동작합니다.
- 정적 리소스 제공 가능: 웹 서버가 제공하는 정적 리소스 처리 기능도 포함하고 있습니다.
- 동적 로직 처리 능력: 가장 큰 차이점은 프로그램 코드를 실행해 애플리케이션 로직을 수행할 수 있다는 점입니다.
- 사용자별 맞춤 HTML 생성
- REST API(HTTP API) 제공
- 동적인 처리 및 DB 연동
대표 예시
- Tomcat, Jetty, Undertow 등은 WAS로 분류됩니다.
- Java 환경에서는 서블릿(Servlet) 컨테이너 기능을 포함하면 보통 WAS라고 부르며, 여기에 Servlet, JSP, Spring MVC 등이 동작합니다.
웹 서버와 WAS의 차이점 정리
- 웹 서버: 정적 리소스(HTML, CSS, JS, 이미지 등) 제공에 주력
- WAS: 애플리케이션 로직을 처리(동적 컨텐츠 생성, DB 연동 등)하고, 정적 리소스 제공 기능도 포함
- 경계는 모호해지고 있지만, WAS는 주로 애플리케이션 코드를 실행하는 데 특화되어 있습니다.
실제 시스템 구성 사례
최소 구성
- WAS + DB: 단순한 환경에서는 WAS와 DB만으로도 시스템을 운영할 수 있습니다.
- WAS: 정적/동적 리소스 모두 제공 가능
- DB: 회원가입, 주문 처리 등의 데이터 관리
하지만 WAS 혼자 모든 것을 담당하면 다음과 같은 문제가 발생할 수 있습니다.
- WAS에 과부하 발생: 정적 리소스 + 복잡한 애플리케이션 로직 처리
- 장애 발생 시 전체 서비스 영향: WAS가 죽으면 오류 화면 조차 제공이 어려움
웹 서버를 프런트로 두는 구조
일반적으로는 웹 서버를 앞단에 두고, WAS를 뒤에 두는 구조를 많이 활용합니다.
- 클라이언트 요청 → 웹 서버 도착
- 정적 리소스 요청 시: 웹 서버에서 바로 응답
- 동적 처리 필요 시: 웹 서버가 WAS로 요청 전달
- WAS 처리: DB 연동, 애플리케이션 로직 실행 후 결과 반환
- 웹 서버 응답: 최종적으로 클라이언트에게 결과 전달
장점
- 업무 분담: 웹 서버는 정적 리소스 처리에, WAS는 비즈니스 로직 처리에 집중
- 확장성 및 효율성:
- 정적 리소스 요청이 많아지면 웹 서버 인스턴스만 확장
- 애플리케이션 로직 처리량 증가 시 WAS 인스턴스를 확장
- 안정성 확보:
- 웹 서버는 단순 정적 파일 서빙에 특화되어 잘 죽지 않음
- WAS 장애 시에도 웹 서버에서 오류 화면 처리 가능
추가 확장
- CDN 사용: 정적 리소스를 캐시하기 위한 CDN(Caching 서버)을 앞단에 추가 가능
- API 서버 구성: 화면 없이 API만 제공할 경우 WAS만으로도 구성 가능 (웹 서버가 필수는 아님)
결론
- 웹 서버: 정적 리소스 제공에 초점을 맞춘 HTTP 서버
- WAS: 애플리케이션 로직 실행 및 동적 처리에 특화된 서버, 웹 서버 기능도 포함
- 실무에서는 안정성과 효율성을 위해 웹 서버와 WAS를 역할별로 구분하고, 상황에 따라 확장하며 사용합니다.
다음 시간에는 Servlet에 대해 좀 더 구체적으로 알아보겠습니다.
감사합니다.
This post is licensed under CC BY 4.0 by the author.