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를 분리한 이유
- 정적 컨텐츠를 제공하는 서버와 동적 프로그래밍을 수행하는 서버를 분배하여, 서버의 과부하를 방지할 수 있다.
- WAS에 장애가 발생하더라도 웹 서버를 통해 오류 화면을 노출시킬 수 있다.
- 여러 대의 WAS를 연결하고 웹 서버에서 로드밸런싱을 수행하면, 무중단 운영이 가능하다.
- 여러 웹 어플리케이션을 서비스할 수 있다. (PHP 어플리케이션, Java 어플리케이션 등)
- 물리적으로 분리하여 보안을 강화할 수 있다.
전체적인 동작 과정
- Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받는다.
- Web Server는 HTTP 요청을 Web Container(Servlet Container)에게 위임한다.
- Web Container는 관련된 web.xml 설정에서 클라이언트의 요청 URL과 매핑되어 있는 Servlet을 확인한다.
- Web Container는 해당 Servlet 객체를 메모리에 올린다.
- 메모리에 로드될 때, Servlet 객체를 초기화하는
init()
메서드가 호출된다.
- Web Container는 Request가 올 때마다 스레드를 생성한다.
- 이때, 스레드 풀을 사용하여 기존 스레드를 재활용한다.
request마다 스레드를 생성하면 CPU, 메모리 임계점을 넘어 서버가 사망할 수 있다.
또한, 생성가능한 스레드 수가 정해져있으므로 너무 많은 요청이 들어와도 안전하게 처리할 수 있다.
HttpServletRequest
와 HttpServletResponse
객체를 생성하여 Servlet에 전달한다.
5-1. Thread는 Servlet의 service()
메서드를 호출한다.
5-2. service()
메서드는 요청에 맞게 doGet()
또는 doPost()
메서드를 호출한다.
5-3. protected doGet(HttpServletRequest request, HttpServletResponse response)
doGet()
또는 doPost()
메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달한다.
- WAS는 Response 객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
- 생성된 Thread를 종료하고,
HttpServletRequest
와 HttpServletResponse
객체를 제거한다.
- Web Application이 갱신되거나 WAS가 종료될 때
destory()
가 호출되어 생성한 Servlet 객체를 제거한다.
Reference