Web Server 와 WAS 차이

Updated:

Static Page / Dynamic Page

image

Static Pages

Web Server 는 파일 경로의 이름을 요청 받아 경로와 일치하는 File Contents 를 반환합니다. 그래서 항상 동일한 페이지를 반환합니다.

보통 Image, HTML, CSS, JavaScrip 같이 정적인 파일을 반환합니다.

Dynamic Pages

요청 인자의 내용에 맞게 동적인 File Contents 를 반환합니다.

예를 들어, Web Server 에 의해서 실행되는 프로그램을 통해서 만들어진 결괌루이나, WAS 위에서 돌아가는 Java Program 인 Servlet 을 이용합니다. 개발자는 이 Servlet 에 doPost()doGet() 같은 메소드를 구현합니다.

WEB / WAS

image

Web Server

Web Server 는 클라이언트가 웹 브라우저에서 서버에 페이지 요청을 하면 WEB 서버에서 요청을 받아 정적 페이지(.html .jpeg .css 등..) 컨텐츠를 제공하는 서버입니다. WAS 를 거치지 않고 바로 자원을 제공하거나 클라이언트의 Request 를 WAS 에 보내고 WAS 에서 처리한 결과를 클라이언트에게 Response 합니다.

대표적인 Web Server 에는 Apache, NGINX 와 Windows 전용 WEB 서버인 IIS 가 있습니다.

image

WAS (Web Application Server)

HTML 만으로는 할 수 없는 데이터베이스 조회나 다양한 로직처리 같은 동적인 컨텐츠를 제공하기 위해 만들어진 어플리케이션 서버입니다. HTTP 를 통해 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어라고도 합니다.

Web Container / Servlet Container 라고도 불리며, Web Server + Web Container 의 역할을 수행합니다.

대표적인 WAS 에는 Tomcat, Jeus, JBoss, Web Sphere 등이 잇습니다.

image

Web Server vs WAS

Web Server 와 WAS 를 서로 분리한 이유는 여러가지가 있습니다.

첫 번째로 보안입니다. SSL / TLS 에 대한 암복호화 처리에 Web Server 를 사용합니다. 또한 Web Server 는 Proxy 같은 역할도 수행할 수 있습니다.

두 번째로 기능을 분리하여 서버 부하방지입니다. WAS 는 계속 DB 를 조회하고 다양한 비즈니스 로직을 처리하느라 바쁘기 때문에 단순한 정적 컨텐츠는 Web Server 에서 빠르게 처리하는게 좋습니다.

마지막으로 여러대의 WAS 를 연결할 수 있습니다. 흔히말해 Web Server 에서 Load Balancing 을 수행할 수 있습니다. 따라서 Fail Over, Fail Back 처리에 유용하여 무중단 배포를 위한 장애 극복에 쉽게 대응할 수 있습니다.

Web Server / WAS Architecture

그래서 Web Server 와 WAS 의 아키텍처는 다양한 구조를 가지는데 보편적인 아키텍처는 아래입니다.

image

TIER 1 은 Web SERVER, TIER 2 는 WAS 라 생각하시면 됩니다. TIER 3 는 MySQL, Oracle, MongoDB 와 같은 데이터베이스라고 생각하시면 됩니다.

전체적인 동작 과정을 살펴보겠습니다.

  1. Client 가 Web Server 로 HTTP Request 를 전송한다.
  2. Web Server 는 Client 의 Request 를 WAS 로 전송한다.
  3. WAS 는 관련된 Servlet 을 메모리에 올린다.
  4. WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성한다.
  5. HttpServletRequest 와 HttpServletResponse 객체를 생성하여 Servlet에 전달한다.
  6. Thread 는 Servlet 의 service() 메서드를 호출한다.
  7. service() 메서드는 요청에 맞게 doGet() 또는 doPost() 메서드를 호출한다.
    1. protected doGet(HttpServletRequest request, HttpServletResponse response)
  8. WAS 는 해당 로직을 수행하다 DB 접근이 필요하면 Database 에 SQL Query 를 한다.
  9. Database 는 SQL Query 에 따른 결과값을 Response 에 담아서 반환한다.
  10. doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지와 쿼리 결과를 Response 에 담아 WAS 에 전달한다.
  11. WAS 는 Response 를 HttpResponse 형태로 바꾸어 Web Server 에 전달한다.
  12. 생성된 Thread 를 종료하고, HttpServletRequest 와 HttpServletResponse 객체를 제거한다.
  13. Web Server 는 HTTP Response 를 Client 에게 응답한다.

References

  • https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
  • https://www.researchgate.net/figure/A-Typical-3-Tier-Server-Architecture-Tier-1-Web-Server-Tier-2-Application-Server-Tier_fig1_221147997

Leave a comment