Gidhub BE Developer

웹 서버(WS)와 웹 어플리케이션 서버(WAS)

2018-11-11
goodGid

웹 서버(WS)

  • 클라이언트의 요청을 받아 정적 데이터(HTML, Image 등)를 HTTP 프로토콜을 통해 전송한다.

  • 클라이언트의 요청이 동적인 데이터를 요구하는 요청이라면 WAS에 처리를 요청한다.

  • 정적인 데이터를 처리해주기 때문에 WAS의 부담을 줄여주는 역할도 한다.

  • ex) Apache, Nginx, IIS, WebtoB 등


웹 어플리케이션 서버(WAS)

동적인 데이터를 제공하기 위해선 WAS(웹 어플리케이션 서버)가 필요하다.

  • 웹 서버(WS)에게 받은 요청(동적 데이터 처리)을 처리하여 웹 서버에게 제공한다.

  • 일반적으로 웹 서버의 기능을 내제하고 있어 웹 서버 없이도 서비스가 가능하다.

  • ex) Tomcat, WebLogic, WebSphere, Jeus, JBoss 등

  • WAS의 내부 구조

WAS의 내부구조

  1. 웹 서버의 요청이 들어오면 제일 먼저 컨테이너가 이를 알맞게 처리한다.

  2. 컨테이너는 배포서술자(web.xml)를 참조하여 해당 서블릿에 대한 쓰레드를 생성하고
    요청(httpServletRequest) 및 응답(httpServeletResponse)객체를 생성하여 전달한다.

  3. 다음으로 컨테이너는 서블릿을 호출(service())한다.

  4. 호출된 쓰레드(서블릿의 작업을 담당)는 요청에 따라 doPost() 또는 doGet()을 호출한다.

  5. 호출된 doPost() 또는 doGet() 메소드는 생성된 동적 데이터를 Response객체에 담아 컨테이너에 전달한다.

  6. 컨테이너는 전달받은 Response객체를 HTTPResponse 형태로 전환하여 웹 서버에 전달하고
    생성되었던 쓰레드를 종료하고 요청(httpServletRequest) 및 응답(httpServeletResponse) 객체를 소멸시킨다.


Container

  • 컨테이너에는 여러 종류가 있으며(Servlet 컨테이너, JSP 컨테이너, EJB 컨테이너 등)
    다양한 컴포넌트들을 내장하고 있다.

서블릿 컨테이너(Servlet Container)

WAS별로 다양한 종류의 컨테이너를 내장하고 있으며
이들 중 서블릿에 관련된 기능을 모아놓은 것을 서블릿 컨테이너라 부른다.

  • 서블릿 컨테이너는 위 그림 처럼 servlet를 실행하고 관리하는 역할을 하는데
    개발자가 신경써야 할 복잡한 부분을 대신 처리하여 주기 때문에 편리하다.

  • 한가지 예로 자바애플리케이션 개발시 필요한 main()메소드가 존재하지 않는 것이 이때문이다.


  • 다음은 서블릿 컨테이너의 주된 역할이다.

  • 생명 주기 관리

    • 초기화 : 서블릿을 로드해 초기화(init)한다.

    • 호출 : 클라이언트의 요청을 받으면 서블릿 메소드를 호출한다.

    • 종료 : 서블릿 컨테이너가 종료되면 서블릿을 종료시키고(destroy 메소드 호출) 메모리를 정리한다.


  • 통신 지원

    • 웹 서버로부터 받은 요청을 분석해 서블릿을 실행시키고

    • 서블릿에서는 웹 서버의 정보를 확인 할 수 있도록 하는 기능을 제공한다.


  • 멀티스레딩 지원

    • 클라이언트의 요청에 따라 서블릿을 생성하고

    • 이미 생성된 서블릿에 대한 요청은 스레드를 생성해 실행한다.


컴포넌트(Component)

  • 특정 기능이나 관련된 기능을 재사용 가능한 형태(블록)으로 만들어

  • 소프트웨어 개발을 레고 블록 쌓듯이 진행 할 수 있도록 하는 기술을 말한다.


Reference


Index