WAS vs Web Server

⛏ Web Server
- 웹 서버는 클라이언트가 요청한 html, css, 이미지와 같은 정적인 파일을 제공하는 서버
- HTTP 프로토콜을 기반으로 하여 클라이언트(웹 브라우저)의 요청을 서비스하는 기능
- 예시 : Apache, Nginx, Python의 SimpleHttpServer, IIS(Window) 등
🛠 WAS
- WAS는 DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application 서버이다.
- HTTP를 통해 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어이다.
- 프로그램 코드를 실행해서 어플리케이션 로직을 수행할 수 있다.
- JSP, servlet을 실행 시킬수 있는 소프트웨어로 컨테이너, 웹컨테이너, 서블릿 컨테이너라고도 부른다.
- 예시 : Tocat, Jeus, Web Sphere 등
그렇다면 둘의 차이는?
- 사실상 Web server는 WAS의 일부분이라 할 수 있다. WAS는 동적, 정적 컨텐츠 모두 제공할수 있기 때문에 WAS가 Web server 역할을 하고 있다할 수 있다.
- 사실 둘의 명칭을 구분하기에는 애매한 부분이 존재한다.
- Web Server도 프로그램을 실행하는 기능을 하기도 하고 WAS도 웹 서버의 기능을 제공해주기 때문이다.
그렇다면 WAS만 사용하면 되지 않는가?
WAS만 사용하기에는 많은 단점이 존재한다.
- WAS가 너무 많은 역할을 담당하기 때문에 서버에 과부하가 올 수 있다.
- 가장 중요한 애플리케이션 로직이 정적 리소스를 제공하려다 수행이 안되거나 느려질 위험성이 존재한다.
- 장애가 발생시(생각보다 자주 버그가 발생하기 때문에) 오류 화면(브라우저에 띄어주는 화면 다 500오류가 날것이기 때문에)도 노출이 불가능하다.
하지만 두 서버를 동시에 사용한다면 다양한 장점이 있다.
- Web Server와 WAS를 같이 사용하면 서버 부하를 방지할 수 있다. = 효율적인 리소스 관리
- WAS는 DB조회나 다양한 로직을 실행해야 하기 때문에 단순한 정적 컨텐츠는 Web server에서 빠르게 클라이언트에게 제공하는 것이 좋다.
- 만약 정적 컨텐츠 처리도 WAS에서 하게 된다면 정적 데이터 처리로 인해 부하가 커지게 되고 동적 컨텐츠 처리가 지연될 수 있다.
- 물리적으로 분리하여 보안을 강화할 수 있다.
- SSL에 대한 암복호화 처리에 Web Server를 사용한다.
- SSL이란..
- 여러 대의 WAS를 연결 가능
- 분산 처리를 위해 Web Server를 사용한다.
- 장애 극복(fail over), fil back 처리에 유리하다.
- 특히 대용량 웹 어플리케이션의 경우 여러 개의 서버를 사용하기 때문에 Web Server와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게대응할 수 있다.
- 여러 웹 어플리케이션 서비스 가능
- 하나의 서버에 PHP Apllication과 JAVA Apllication을 함께 사용할 수 있듯이 여려 웹 어플리케이션 서비스를 사용할 수 있다.
WAS의 동작 프로세스

1. 웹 서버로부터 요청이 오면 컨테이너가 받아서 처리한다.
2. 컨테이너는 web.xml을 참조하여 해당 서블릿에 대한 쓰레드를 생성하고 HttpServletRequest와 HttpServletResponse 객체를 생성하여 전달한다.
3. 컨테이너는 서블릿을 호출한다.
4. 호출된 서블릿의 작업을 담당하게 된 쓰레드는 doPost() 또는 doGet()을 호출한다.
5. 호출된 메소드들은 생성된 동적 페이지를 Response 객체에 담아 컨테이너에 전달한다.
6. 컨테이너는 Response 객체를 HttpResponse 형태로 바꿔 웹서버에 전달하고 생성되었던 쓰레드를 종료하고 HttpServletRequest, HttpServletRequest 객체를 소멸시킨다.
이미지 출처 : http://cybersecuritynews.co.uk/popular-web-application-attacks-and-recommendations/
참고 : https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html