WebServer와 WAS
웹 애플리케이션을 개발하다보면 항상 언급되는 개념이 WAS, Servlet과 같은 단어들이다. 학교 수업때 들어봤던 개념들이긴 하지만 가물가물 해졌기에 다시 한번 복습해보며 웹 애플리케이션이 어떻게 동작되는 지에 대해 공부한 내용을 작성해보겠다.
Web Server
클라이언트에서 HTTP 요청을 했을 때 그 요청을 받아 정적 컨텐츠(HTML, CSS, JS)를 제공하는 서버를 의미한다.
또한 클라이언트로부터 동적 컨텐츠를 요청 받았을 경우 WAS에게 요청을 넘겨주고 WAS가 처리한 결과를 클라이언트에게 전달하는 중간자 역할도 한다.
대표적인 웹서버로는 Apache, NginX가 있다.
WAS
클라이언트가 DB와 관련된 일이나 다양한 로직 처리와 같은 동적 컨텐츠를 요청할 때 처리해주는 미들웨어
JSP, Servlet 구동환경을 제공하기도 해서 웹 컨테이너, 서블릿 컨테이너라고도 불린다.
대표적인 WAS로는 Tomcat이 있다.
▪︎ Servlet
: 클라이언트의 Request에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트이며, Java의 스레드를 이용 하여 동작한다.
▪︎ 미들 웨어
: 클라이언트와 DB 서버 사이에서 비즈니스 로직을 처리하는 담당
역할
- 프로그램 실행 환경과 DB 접속
- 여러 개의 트랜잭션 관리
- 비즈니스 로직 수행
🤔 WAS와 Web Server를 구분 짓는 이유는 무엇일까
사실 웹서버에서 수행하는 정적 컨텐츠 제공을 WAS에서 처리할 수 있을 것 같다는 생각이 들지만 WAS가 정적, 동적 컨텐츠를 모두 처리하게 해버리면 서버에 과부하를 줄 수 있다.
정적 컨텐츠과 동적 컨텐츠의 처리 역할을 분리 함으로써 수행을 빠르게 할 수 있게 하는 것이 좋다.
또한 물리적으로 분리함으로써 보안상에도 안전하다는 장점이 있다.
Web Service Architecture
Client - Web Server - WAS - DB 구조

- 클라이언트가 웹 서버로 HTTP 요청을 보낸다.
- 웹 서버는 받은 요청을 WAS에 보낸다.
- WAS는 Servlet을 메모리에 올린다.
- WAS는 web.xml을 참조해서 Servlet에 대한 thread를 생성한다.
- HttpServletRequest와 HttpServletResponse 객체를 생성해서 Servlet에 전달한다.
- thread는 Servlet의 service() 메서드를 호출한다.
- service 메서드는 doGet(), doPost() 메서드를 호출한다.
- doGet()과 doPost()는 인자에 맞게 생성된 적잘한 동적 페이지를 Response 객체에 담아 WAS에 전달한다.
- WAS는 Reponse 객체를 HttpResponse 형태로 바꾸어 웹 서버에 전달한다.
- 생성된 thread를 종료하고 HttpServletRequest와 HttpServletResponse 객체를 제거한다.