웹 서버와 WAS

📁 웹 서버

HTTP 프로토콜을 기반으로 클라이언트의 요청을 받아 정적 컨텐츠를 제공하는 서버, 프로그램

동작 과정

웹 서버는 클라이언트의 HTTP 요청을 받고, 응답 데이터를 만들어 응답한다.

여기서 웹 서버가 보낼 수 있는 응답 데이터는 html, css, js파일, 이미지 파일 등 프로그램에 저장되어 있는 정적 리소스로 한정된다.

정적 요청과 동적 요청

Static Page

바뀌지 않는 정적 페이지

과거의 뉴스 페이지를 생각해보자.

특정 내용이 담긴 웹 페이지를 저장해놓고 요청이 들어오면 저장된 파일을 사용자에게 보여준다.

단순히 링크를 통해 HTML로 이루어진 페이지로 이동하는 순수한 웹사이트 형태에 불과한 것이다.

Dynamic Page

인자에 따라 바뀌는 동적 페이지

시간이 지나면서 뉴스에는 댓글, 좋아요, 검색 등 복잡한 기능이 생겼고, 요청 인자에 따른 동적 컨텐츠를 제공해야 했다.

이는 정적 페이지만을 제공하는 기존의 웹사이트, 웹 서버로는 처리할 수 없었다.

이처럼 클라이언트의 동적 요청에 대한 처리가 필요해지면서 대두된 개념이 웹 애플리케이션WAS이다.

📁 WAS

Web Application Server
클라이언트에게 동적인 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버

 

WAS는 애플리케이션에서 필요한 기능을 수행하고 그 결과를 웹 서버로 전달하는 미들웨어이다.

JSP/Servlet 구동환경을 제공하기 때문에 웹 컨테이너 혹은 서블릿 컨테이너로 불리기도 한다.

 

WAS는 프로그램 실행 환경과 데이터베이스 접속 환경을 제공하며 비즈니스 로직 처리가 가능하다.

따라서 정적 요청만을 처리하는 웹 서버의 단점을 보완해 클라이언트에게 동적 리소스를 제공한다.

WAS의 구조

클라이언트로부터 요청이 들어오면 우선 웹 서버에서 받고 정적 요청을 처리해 응답한다.

그러나 동적 요청은 자체적으로 처리할 수 없어 서블릿 컨테이너로 권한을 위임한다.

서블릿 컨테이너는 요청을 처리한 데이터를 웹 서버로 보내고, 웹 서버는 클라이언트에게 응답을 보낸다.

🤔 왜 함께 사용하는가?

WAS는 웹 서버가 가진 대부분의 기능을 가지고 있어 정적, 동적 요청을 모두 처리할 수 있다.

따라서 웹 서버 대신 WAS만을 단독 사용할 수도 있겠으나, 실제로는 둘을 분리하지 않고 함께 사용한다.

(1) 서버 부하 방지

만약 WAS가 단순한 정적 요청까지 처리한다면 서버에 부하가 발생하고 동적 요청에 대한 처리가 지연되어 수행 속도가 저하된다.

이에 따라 페이지 노출 시간이 길어지고 효율성이 크게 떨어지게 된다.

따라서 단순한 요청은 웹 서버에서 처리하고 WAS는 DB를 조회하고 다양한 비즈니스 로직을 처리하는 데에 집중하는 것이다.

(2) 보안 강화

웹 서버와 WAS를 물리적으로 분리하면 보안을 강화할 수 있다.

SSL에 대한 암복호화 처리에 웹 서버를 사용한다.

공격이 들어오더라도 웹 서버를 앞단에 두면 DB나 로직같이 중요한 정보가 담긴 WAS에 도달하는 것을 막을 수 있다.