Web Server & WAS(Web Application Server)


Web Server

  • 클라이언트가 서버 페이지에 요청하면 요청을 받아 정적 컨텐츠 (.html, .css 등)을 제공하는 서버
    • Static Pages (정적 페이지)
      • Web Server는 파일 경로 이름을 받아 경로와 일치하는 파일 컨텐츠 반환
      • 항상 동일한 페이지를 반환
      • ex) image, html, css, javascript 파일과 같이 컴퓨터에 저장되어 있는 파일들
  • HTTP 프로토콜을 기반 클라이언트 (웹 브라우저 또는 웹 크롤러)의 요청을 서비스 하는 기능 담당
  • 동적 컨텐츠 제공이 필요한 경우 HTTP Request를 WAS에게 릴레이함
  • 대표적으로는 Apache가 있음

Web Application Server

  • 비지니스 로직을 처리하여 동적 컨텐츠를 제공하는 서버
    • Dynamic Pages (동적 페이지)
      • 인자의 내용에 맞게 동적인 컨텐츠 반환
      • 웹 서버에 의해서 실행되는 프로그램을 통해서 만들어진 결과물
      • 개발자는 Servlet에 doGet()을 구현함
        • Servlet: WAS 위에서 돌아가는 Java Program
  • 정적 & 동적 컨텐츠 처리가 모두 가능함 (standalone 가능)
    • 아파치 웹 서버보다는 느림
    • 웹의 모든 정적 & 동적 데이터를 모두 WAS가 처리한다면 결과적으로 사용자 요청 응답이 느려짐
  • WAS의 비즈니스 로직은 DB 조회다양한 로직 처리를 요구하는 경우가 많음
    • 수행 시간이 늘어남
    • 정적 컨텐츠의 경우 웹 서버에서 제공하는 것이 로드 분산에 효율적
  • 웹 서버 없이 WAS에 직접 접근할 경우 WAS port number가 노출되어 보안상 좋지 않음
  • 하나의 웹 서버에서 여러 WAS를 통해 서비스함으로써 failover에 유리하도록 설계
  • HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어 (소프트웨어 엔진)
  • 웹 컨테이너 (Web Container) 혹은 서블릿 컨테이너 (Servlet Container)
    • 컨테이너란 JSP, Servlet을 실행시킬 수 있는 소프트웨어
    • WAS는 JSP, Servlet 구동 환경 제공

웹 서버와 WAS 동작 과정

  1. Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받음

  2. Web Server는 클라이언트의 요청 (Request)을 WAS에 보냄

  3. WAS는 관련된 Servlet을 메모리에 올림

  4. WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성 (Thread Pool 이용)

  5. HttpServletRequestHttpServletResponse 객체를 생성하여 Servlet에 전달

    5-1. Thread는 Servlet의 service() 메서드를 호출

    5-2. service() 메서드는 요청에 맞게 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 객체 제거

profile
github : https://github.com/kiaeh2323 , email : kiaeh9269@gmail.com

0개의 댓글