Web Server와 WAS 동작 원리
웹 개발자로 일하면서 웹서버와 WAS의 동작에 대해 포스팅한 적이 한번도 없는거에 놀라서 써보려고 한다.
돌아가는 방식만 대충 알고 자세히는 알아본 적이 없는데 글 쓰면서 헷갈리는 부분이 있으면 과감하게 찾아보며 기록할 예정이다.
웹 서버와 WAS의 차이점이란?
Web Server와 WAS(Web Application Server)는 처음 들으면 두개가 무슨 차이야? 하는 의문점이 들 가능성이 크다.
웹 서버와 WAS은 큰 차이점은 어떤 컨텐츠를 다루냐이다.
우리는 클라이언트에게 정적 컨텐츠와 동적 컨텐츠를 제공해야할 필요가 있는데, 여기서 말하는 정적 컨텐츠란 우리가 웹 개발하면서 흔히 접하는 css, html 등이 있다.
우리가 홈페이지의 첫화면을 들어가면 어떤 사용자이든 상관없이 동일한 화면을 보게 되는데 이런 동일한 페이지를 보여주는 css,html 파일들을 정적 페이지라고 말한다.
그런데 만약 사용자가 마이페이지를 들어가 나만의 정보를 확인하려면 어떻게 해야할까?
사용자 입장에서는 한 페이지지만, 개발자 입장에서는 무수히 많은 사용자들에게 각자의 마이페이지를 제공해줘야한다.
그런데 사용자마다 다른 페이지를 우리가 일일히 작성해야할까? 당연히 아니다. 우리는 DB를 사용하여 똑똑하게도 사용자마다 다른 페이지를 DB에서 데이터를 가져와 사용자에게 알맞게 처리한 후 제공한다.
이렇게 사용자마다 다른 페이지를 제공하는 것이 바로 동적 컨텐츠이다.
웹서버는 정적 컨텐츠를 처리하거나 동적 컨텐츠의 요청을 WAS로 전달한다.
WAS는 동적 컨텐츠 요청을 받아 처리한다.
이렇게 설명해도 웹서버와 WAS의 명확한 차이를 알기는 어려우니 그림을 예시로 설명해보자.
이 그림은 WAS의 동작과정이라고 치면 나오는 흔한 그림이다.
보면 크게 Client, WAS (web server + web container), Database가 있다는걸 확인할 수 있다.
WAS에 괄호치고 웹서버를 넣은 이유가 뭘까? WAS가 웹서버를 포함한다는 뜻일까?
WAS는 동적 컨텐츠 요청이 들어올 경우 웹 컨테이너에게 요청을 전달한다.
웹 컨테이너는 동적 컨텐츠를 제공한다. DB에서 데이터를 가져와 비즈니스 로직을 처리하여 가공한 뒤 WAS에게 제공한다.
정리하자면 Web Container은 동적 컨텐츠를, Web Server는 정적 컨텐츠를 담당한다.
1. 클라이언트는 웹 서버로 요청을 보낸다.
2. WAS는 웹 컨테이너로 요청을 전달한다.
3. 컨테이너는 요청을 각 서블릿에게 보낸다.
3. 컨테이너는 데이터를 DB에서 불러온 후 알맞게 처리하여 웹서버에게 전달한다.
4. 웹서버는 컨텐츠를 받아 클라이언트에게 응답한다.
즉 웹서버가 모든 요청을 받지만 동적 컨텐츠의 경우 컨테이너의 도움을 받아야만한다. 하지만 정적 컨텐츠의 경우 웹 서버에서만 요청 처리가 끝나 응답한다.