WAS와 WebServer의 차이

- 웹 서버 (Web Server) : Apache, nginx

웹 서버는 정적인 컨텐츠( html, css, js )를 제공하는 서버입니다.

클라이언트에서 요청이 올 때 가장 앞에서 요청에 대한 처리를 한다.

정적 컨텐츠를 요청(request)했나?

  1. 정적 컨텐츠구나! 내가 제공해줄게 => .html, .png 등 응답(response)
  2. 정적 컨텐츠가 아니구나.. 웹서버에서 간단히 처리 못하겠군. WAS에게 처리를 부탁해야겠다! => 결국 WAS가 처리해준 컨텐츠를 받은 웹서버는 응답(response)을 해줌

- WAS (Web Application Server) : Tomcat, Jeus, JBoss

WAS는 DB 조회나, 어떤 로직을 처리해야 하는 동적인 컨텐츠를 제공하는 서버입니다.

동작 프로세스

  1. 웹서버로부터 요청이 오면 컨테이너가 받아서 처리
  2. 컨테이너는 web.xml을 참조하여 해당 서블릿에 대한 쓰레드 생성하고 httpServletRequest와 httpServletResponse 객체를 생성하여 전달한다.
  3. 컨테이너는 서블릿을 호출한다.
  4. 호출된 서블릿의 작업을 담당하게 된 쓰레드(2번에서 만든 쓰레드)는 doPost()또는 doGet()을 호출한다.
  5. 호출된 doPost(), doGet() 메소드는 생성된 동적 페이지를 Response객체에 담아 컨테이너에 전달한다.
  6. 컨테이너는 전달받은 Response객체를 HTTPResponse형태로 바꿔 웹서버에 전달하고 생성되었던 쓰레드를 종료하고 httpServletRequest, httpServletResponse 객체를 소멸시킨다.

WAS와 웹 서버 차이

- 동적 컨텐츠 처리를 수행 가능한가 아닌가.

WAS 자체로 웹 서버의 역할을 수행하기 때문에,무조건적으로 웹 서버를 WAS 앞에 둘 필요는 없다.

하지만 그럼에도 불구하고 웹 서버를 사용하는 이유를 알아보자.

1) WAS의 부담을 줄이기 위해서

WAS 앞에 웹 서버를 둬서 웹 서버에서는 정적인 문서만 처리하도록 하고, WAS는 애플리케이션의 로직만 수행하도록 기능을 분배하여 서버의 부담을 줄이기 위한 것입니다.

img

2) WAS의 환경설정 파일을 외부에 노출시키지 않도록 하기 위해서.

클라이언트와 연결하는 포트가 직접 WAS에 연결이 되어 있다면 중요한 설정 파일들이 노출될 수 있기 때문에 WAS 설정 파일을 외부에 노출시키지 않도록 하기 위해서 웹 서버를 앞단에 배치시킵니다.

웹 서버와 WAS에 접근하는 포트가 다르기 때문에, WAS에 들어오는 포트에는 방화벽을 쳐서 보안을 강화할 수도 있습니다.

* WAS, Web Server를 따로 두고 쓰는 이유가 성능때문이라고 하는 건 잘못되었다.

톰캣5.5 이상부터는 httpd의 native모듈을 사용해서 정적파일을 처리하는 기능을 제공하는데 이것이 순수 아파치 Httpd만 사용하는 것과 비교해서 성능이 전혀 떨어지지 않기 때문이다.

그럼에도 톰캣앞에 아파치를 두는 이유는 하나의 서버에서 php애플리케이션과 java애플리케이션을 함께 사용하거나, httpd 서버를 간단한 로드밸런싱을 위해서 사용해야 할 때 필요하기 때문.