봉봉의 개인 블로그
2018-09-12(WS & WAS / Container) 본문
Web Server & Web Application Server
동적 웹 페이지를 서비스 하기 위해서는 WAS(웹 어플리케이션 서버)가 필요하다. 하지만 정의하는 기준에 따라 다르게 어떤건 WAS가 아니라고 하는 경우가 있지만 이는 해석하는 기준의 차이므로 무의미한 논쟁일 뿐이다. 일반적인 정의에 대하여 정리하자면
웹서버(Web Server)
- 클라이언트의 요청을 받아 정적인페이지(웹페이지, 이미지)를 HTTP 프로토콜을 통해 전송한다.
- 클라이언트의 요청 중 자체적으로 처리할 수 없는 정보에 대해서는 WAS에 처리를 요청한다.
- 요청이 많을 경우 웹서버에서는 웹문서를 WAS에서는 JSP페이지를 양분하여 처리 함으로서 서버의 부담을 줄여주는 역할도 한다.
웹어플리케이션서버(Web Application Server)
- 웹서버에서는 처리할 수 없는 동적인 정보를 처리하여 웹서버에 정적인 정보를 제공한다.
- 일반적으로 웹서버의 기능을 내제하고 있어 웹서버 없이도 서비스가 가능하다.
- PHP의 경우 WAS의 역할을 하지만 웹서버의 모듈형태로 작동하므로 WAS라 불리는데 이견이 많다.
WAS의 내부구조
1. 웹서버로 부터 요청이 들어오면 제일먼저 컨테이너가 이를 알맞게 처리한다.
2. 컨테이너는 배포서술자(web.xml)를 참조하여 해당 서블릿에 대한 스레드를 생성하고 요청(httpServletRequest)및 응답 (httpServletResponse) 객체를 생성하여 전달한다.
3. 다음으로 컨테이너는 서블릿을 호출한다.
4. 호출된 서블릿의 작업을 담당하게 된 스레드(이미 생성된 스레드)는 요청에 따라 doGet() 또는 doPost() 을 호출한다.
5. 호출된 doPost() 또는 doGet() 메소드는 생성된 동적페이지를 Response 객체에 실어서 컨테이너에 전달한다.
6. 컨테이너는 전달받은 Response 객체를 HTTPResponse 형태로 전환하여 웹서버에 전달하고 생성되었던 스레드를 종료하고 요청 및 응답 객체를 소멸시킨다.
Container
WAS별로 다양한 종류의 컨테이너를 내장하고 있으며 이들중 서블릿에 관련된 기능을 모아놓은 것을 서블릿 컨테이너라 부른다. 이외에도 여러 종류의 컨테이너가 있으며(Servlet Container , JSP Container , EJB Container 등) 다양한 컴포넌트 들을 내장하고 있다.
Servlet Container
서블릿컨테이너는 WAS 내부구조 에서와 같이 Servlet을 실행하고 관리하는 역할을 하는데 개발자가 신경써야할 복잡한 부분을 대신 처리하여 주기 때문에 편리하다. 한가지 예로 Java Application 개발시 필요한 main() 메소드가 존재하지 않는 것이 이때문이다. 다음은 서블릿컨테이너의 주된 역할이다.
- 생명주기 관리 : 서블릿을 로드해 초기화(init 메소드) 한다. 또 클라이언트의 요청으로 서블릿 메소드를 호출하며, 서블릿 컨테이너가 종료되면 서블릿을 종료시키고 (destroy 메소드 호출) 메모리를 정리한다.
- 통신 지원 : 웹서버로부터 받은 요청을 분석해 서블릿을 실행시키고 서블릿에서는 웹서버의 정보를 확인할 수 있도록 하는 기능을 제공한다.
- 멀티스레딩 지원 : 클라이언트의 요청에 따라 서블릿을 생성하고, 이미 생성된 서블릿에 대한 요청은 스레드를 생성해 실행한다.
Component
- 특정 기능이나 관련된 기능이 재사용 가능한 형태로 만들어진 프로그램 빌딩 블록으로 스프트웨어 개발을 레고 블록 쌓듯이 진행할 수 있도록 하는 기술을 말한다.
출처 : http://myblog.opendocs.co.kr/archives/425
'입사후 공부한내용' 카테고리의 다른 글
2018-09-18(JSTL의 기본적인 사용 문법) (0) | 2018.09.18 |
---|---|
2018-09-17(리눅스의 퍼미션) (0) | 2018.09.17 |
2018-09-11(동적인 웹페이지를 위한 CGI) (0) | 2018.09.11 |
2018-09-06(intellij JavaScript Version 변경) (0) | 2018.09.06 |
2018-09-05(JavaScript 클래스를 정의하는 3가지 방법) (0) | 2018.09.06 |
Comments