Spring

[Web] Web Server 과 WAS

lala9663 2022. 10. 20. 01:29

Web Server

  • 클라이언트가 서버 페이지에 요청하면 요청을 받아 정적 컨텐츠(.html, .css 등)를 제공하는 서버
  • HTTP 프로토콜을 기반 클라이언트의 요청을 서비스 하는 기능 담당
  • 동적 컨텐츠 제공이 필요한 경우 HTTP Request를 Was에게 릴레이함

대표적으로 Apache가 가장 많이 사용되는 웹 서버 이다.

  • 정적인 데이터 처리(단순 이미지나 html 파일과 같은 리소스만을 제공하는 서버는 빠르고 안정적이게 활용)
  • 아파치 소프트웨어 재단에서 관리하는 http 웹 서버(구축 쉬움, 다양한 추가 기능, 무료)

WAS(Web Application Server)

  • 비즈니스 로직을 처리하여 동적 컨텐츠를 제공하는 서버
  • 정적 & 동적 컨텐츠 처리가 모두 가능함
    • 아파치 웹 서버보다는 느림
    • 웹의 모든 정적 & 동적 데이터를 모두 WAS가 처리한다면 결과적으로 사용자 요청 응답이 느려짐
  • WAS의 비즈니스 로직은 DB 조회나 다양한 로직 처리를 요구하는 경우가 많음
    • 수행 시간이 늘어남
    • 정적 컨텐츠의 경우 웹 서버에서 제공하는 것이 로드 분산에 효율적
  • 웹 서버 없이 WAS에 직접 접근할 경우 WAS port number가 노출되어 보안상 좋지 않음
  • 하나의 웹 서버에서 여러 WAS를 통해 서비스함으로써 failover에 유리하도록 설계

대표적으로 Tomcat 이 있다.

  • 아파치 재단의 WAS
  • 웹 서버 + 서블릿 컨테이너
  • 서블릿을 실행시켜 JSP 코드가 포함된 웹 페이지를 만듦
  • 웹 서버에서 넘어온 동적인 페이지를 읽어 들여 프로그램을 실행하고 그 결과를 html 재구성하여 아파치에게 돌려줌

웹 서버와 WAS 동작 과정

Client -> Web Server -> WAS -> DB 구조를 가진다고 가정했을 때

웹 서버와 WAS 동작 과정

  1. Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받음
  2. Web Server는 클라리언트의 요청(Request)을 WAS에 보냄
  3. WAS는 관련된 Servlet을 메모리에 올림
  4. WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성(Thread Pool 이용)
  5. HttpServletRequestHttpServlerResponse 객체를 생성하여 Servlet에 전달
    • 5.1 Thread는 Servlet의 service() 메서드 호출
    • 5.2 serviec() 메서드의 요청에 맞게doGet()또는doPost()` 메서드를 호출
      protected doGet(HttpServletRequest request, HttpServletResponse response)
      protected doPost(HttpServletRequest request, HttpServletResponse response)
  6. doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 동적 페이지를 Response 객체에 담아 WAS에 전달
  7. WAS는 Response 객체를 HttpResponse 형태로 바꿔 Web Server에 전달
  8. 생성된 Thread를 종료하고 HttpServletRequestHttpServletResponse 객체 제거