Web Server vs Web Application Server (WAS)

KIMA·2022년 7월 14일
1

web

목록 보기
2/2
post-thumbnail

Web Server

Web (WWW, World Wide Web)

인터넷 기반의 정보 공유, 검색 서비스

  • 구성 요소 : URI(리소스 주소), HTTP or HTTPS(통신 규약), HTML(내용)

Server

네트워크를 통해 클라이언트에게 정보나 서비스를 제공하는 컴퓨터 시스템

Web + Server = Web Server

(하드웨어 측면) 인터넷을 기반으로 클라이언트에게 웹 서비스를 제공하는 컴퓨터
(소프트웨어 측면) 즉, 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, 정적 데이터(e.g. HTML, CSS, JavaScript, 이미지, 동영상)를 전송해주는 서비스 프로그램

WAS (Web Application Server)

Web Application

: 웹에서 실행되는 응용 프로그램

WAS (Web Application Server)

php, jsp, asp와 같은 프로그래밍 언어들을 사용해 동적인 페이지를 생성할 수 있는 서버

  • 웹 앱을 만들기 위해서는 동적인 프로그래밍(e.g. DB에서 데이터 가져오기)이 필요한데, 이를 위해서는 정적 데이터만을 전달할 수 있는 Web server에 WAS가 추가적으로 필요하다.
  • jsp, servlet 실행 환경을 제공하는 서블릿 컨테이너 역할을 수행한다.
    • 서블릿 객체 생성, 초기화, 호출, 생명주기를 관리한다.
  • 종류 : Tomcat, JEUS, IBM WebSphere

Web Server와 WAS를 분리한 이유

  1. 정적 컨텐츠를 제공하는 서버와 동적 프로그래밍을 수행하는 서버를 분배하여, 서버의 과부하를 방지할 수 있다.
  2. WAS에 장애가 발생하더라도 웹 서버를 통해 오류 화면을 노출시킬 수 있다.
  3. 여러 대의 WAS를 연결하고 웹 서버에서 로드밸런싱을 수행하면, 무중단 운영이 가능하다.
  4. 여러 웹 어플리케이션을 서비스할 수 있다. (PHP 어플리케이션, Java 어플리케이션 등)
  5. 물리적으로 분리하여 보안을 강화할 수 있다.

전체적인 동작 과정

  1. Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받는다.
  2. Web Server는 HTTP 요청을 Web Container(Servlet Container)에게 위임한다.
  3. Web Container는 관련된 web.xml 설정에서 클라이언트의 요청 URL과 매핑되어 있는 Servlet을 확인한다.
  4. Web Container는 해당 Servlet 객체를 메모리에 올린다.
    • 메모리에 로드될 때, Servlet 객체를 초기화하는 init() 메서드가 호출된다.
  5. Web Container는 Request가 올 때마다 스레드를 생성한다.
    • 이때, 스레드 풀을 사용하여 기존 스레드를 재활용한다.
      request마다 스레드를 생성하면 CPU, 메모리 임계점을 넘어 서버가 사망할 수 있다.
      또한, 생성가능한 스레드 수가 정해져있으므로 너무 많은 요청이 들어와도 안전하게 처리할 수 있다.
  6. HttpServletRequestHttpServletResponse 객체를 생성하여 Servlet에 전달한다.
    5-1. Thread는 Servlet의 service() 메서드를 호출한다.
    5-2. service() 메서드는 요청에 맞게 doGet() 또는 doPost() 메서드를 호출한다.
    5-3. protected doGet(HttpServletRequest request, HttpServletResponse response)
  7. doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달한다.
  8. WAS는 Response 객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
  9. 생성된 Thread를 종료하고, HttpServletRequestHttpServletResponse 객체를 제거한다.
  10. Web Application이 갱신되거나 WAS가 종료될 때 destory()가 호출되어 생성한 Servlet 객체를 제거한다.

Reference

profile
안녕하세요.

0개의 댓글