공개 글

Web Server와 WAS

영발개발 2025. 3. 17. 15:24
 Web Server와 WAS, 그들의 역할

 

Web Server

 웹 서버는 정적인 요청(HTML, CSS, JavaScript, image 등)을 처리하는 서버다. 대표적인 웹 서버로는 Apache HTTP Server, NginX, Microsoft IIS 등이 있다.

 

WAS(Web Application Server)

 WAS는 동적인 요청(서버에서 처리해야 하는 로직이 필요한 요청)을 처리하는 서버로, Servlet과 JSP를 처리할 수 있는 Web Container를 제공한다. 대표적인 WAS로는 Tomcat, JBoss, WebLogic, WebSphere 등이 있다.

 

출처 : https://taes-k.github.io/2019/05/24/webserver/

 

 클라이언트로부터 요청이 Web Server로 들어오면 정적인 요청일 경우 WAS까지 가지 않고 Web Server에서 처리한다. 하지만 동적인 요청이 들어올 경우 Web Server는 해당 요청을 WAS에게 전달한다. WAS는 해당 요청을 처리 후에 Web Server에게 전달하고 Web Server는 클라이언트에게 응답을 주는 것이다.

 

 홈페이지의 목록을 조회하는 상황을 예시로 보자.

 

홈페이지 목록 조회 요청의 처리 과정 (WAS & Web Server 역할 정리)

💡 가정: 사용자가 https://example.com/list 페이지에서 목록을 조회한다고 해보자.

1️⃣ 사용자 요청 (클라이언트 → 웹 서버)

  • 사용자가 브라우저에서 https://example.com/list 페이지를 요청
  • 이 요청이 웹 서버(Apache, Nginx 등) 에 도착

2️⃣ 웹 서버 → WAS 요청 전달

  • 웹 서버는 정적 리소스(HTML, CSS, JS 등)가 아니라 동적인 데이터 조회 요청이므로,
  • 이 요청을 WAS(Tomcat, JBoss 등) 에게 전달

3️⃣ WAS가 서블릿을 실행하고 DB 조회

  • WAS 내부의 웹 컨테이너(Web Container) 가 요청을 받을 서블릿을 실행
  • 서블릿은 비즈니스 로직(Service) 을 호출하여 DB에서 데이터 조회
  • 조회된 데이터(예: 게시글 목록)를 JSP/Thymeleaf 같은 템플릿 엔진과 결합해서 HTML 생성

4️⃣WAS → 웹 서버 → 사용자에게 응답 반환

  • WAS가 생성한 동적인 HTML 페이지를 웹 서버에 전달
  • 웹 서버는 클라이언트(브라우저)에게 응답을 반환
  • 사용자는 목록이 출력된 웹 페이지를 확인

Web Server와 WAS를 따로 두는 이유

 

 웹 서버와 WAS에 대해서 찾아보다가 궁금한 점이 생겼다.

 

출처 : https://ecsimsw.tistory.com/

 

 해당 그림에서 보이는 것처럼 WAS 안에는 WS(웹서버) 기능이 포함되어 있다. 그럼에도 독립된 WS를 두는 이유가 궁금했다.

 

WebServer와 WAS를 따로 두는 이유

1️⃣ 정적 리소스 처리 최적화

  • 웹 서버(Apache, Nginx)는 정적 리소스(HTML, CSS, JS, 이미지 등)를 빠르게 처리할 수 있도록 최적화되어 있음.
  • 하지만 WAS는 이런 정적 리소스 처리를 최적화하는 데 초점이 맞춰져 있지 않음.

2️⃣ 부하 분산 (로드 밸런싱)

  • 웹 서버가 먼저 요청을 받고, 여러 개의 WAS로 부하를 분산(Load Balancing)할 수 있음.
  • 예: Nginx → 여러 개의 Tomcat

3️⃣ 보안 강화

  • WAS를 직접 외부에 노출하지 않고 웹 서버를 프록시 역할로 둬서 보안을 강화할 수 있음.
  • 예: WAS는 내부 네트워크에서만 접근 가능하도록 하고, 웹 서버가 외부 요청을 필터링한 후 전달

4️⃣ WAS 성능 향상

  • WAS는 비즈니스 로직(DB 조회, 연산 등)만 집중적으로 처리할 수 있도록 최적화됨.
  • 웹 서버에서 정적 요청을 걸러주기 때문에 불필요한 요청을 줄여 성능이 향상됨.

 

 그럼 여기서 추가로 궁금한 점이 생긴다. 이렇게 WS와 WAS를 따로 둘 경우, WAS에 있는 WS는 작동을 안하고 따로 둔 WS만 작동할까? 기본적으로는 WAS 안에 있는 WS 기능을 비활성화하고, NginX나 아파치 같은 외부 웹 서버에서만 요청을 처리하도록 구성한다. 

 

 그렇다고 WAS에 있는 WS 기능을 아예 안 쓰는 것은 아니다. 보통 트래픽이 상대적으로 적고 부하가 크지 않은 소규모 프로젝트에서는 웹 서버와 WAS를 따로 둘 필요가 굳이 없기 때문에 WAS만 단독 사용한다. 반대로 트래픽이 많고 부하가 큰 대규모 프로젝트에서는 위에서 말한 이점들을 위해 웹 서버와 WAS를 따로 두어 실행한다.

'공개 글' 카테고리의 다른 글

트랜잭션(Transaction)  (0) 2025.04.28
JavaScript 기본  (1) 2025.03.24
CSS 기본 - 2  (0) 2025.03.13
CSS 기본 - 1  (1) 2025.03.12
@GetMapping? @PostMapping?  (0) 2025.02.19