Servlet을 들어가기 전에..
서버란?
- 서브(Serve)는 말 그대로 배드민턴, 탁구를 칠 때 공격 측이 먼저 공을 상대편 네트 위로 전달하는 행위를 말한다.
- 그럼 서버(Server)란 뭘까? 그냥 말 그대로 뭔가를 전달해주는 역할을 하는 녀석이다.
- 여기서 웹 서버는? 어떤 녀석이 어떤 요청을 하면 요청에 대한 리소스를 요청한 측으로 전달해주는 역할을 한다.
웹 서버
- 사용자가 브라우저로 요청한 주소에 따라 정적인(이미지, HTML 파일 등) 리소스만 전달한다.
웹 애플리케이션 서버
- 사용자가 브라우저로 요청한 주소에 따라 여러가지 연산 처리를 하고 그에 따라 재가공된 리소스를 전달한다
그럼 재가공이란 뭘까?
- 기본적인 HTML 파일을 어떤 연산 과정을 거쳐 추가하거나 삭제하는 것을 말한다.
물론 HTTP 프로토콜을 이용한다.
웹 요청 흐름
브라우저 -> DNS -> HTTP 요청 메시지 생성 -> DNS를 통해 IP, PORT를 전달 받으면, 소켓 라이브러리를 통해 TCP/IP 연결을 하고 생성된 요청 메시지 전달 -> 서버 -> HTTP 응답 메시지 생성 -> 브라우저
서블릿으로.
Servlet
- 간단설명: 자바 진영의 기본 웹 사양이다.
- 자바 엔터프라이즈 에디션 플랫폼에서 웹과 상호작용하기 위한 JCP 표준 기술이다.
- 이를 구현한 측은 소위
WAS
라고 불리는 Tomcat
등의 웹 애플리케이션 서버이다.
- 이 웹 애플리케이션 서버는
Servlet
컨테이너 역할을 한다.
대충 읽고 넘기자..
서블릿 컨테이너의 역할
-
웹서버와의 통신 지원
서블릿 컨테이너는 서블릿과 웹서버의 통신을 손쉽게 지원해준다.
앞서 설명했듯이, 일반적으로 우리는 소켓을 만들고 listen, accept 등을 해야하지만 서블릿 컨테이너는 이러한 기능을 API로 제공하여 이러한 과정들을 생략할 수 있도록 지원한다.
-
서블릿 생명주기(Life Cycle) 관리
서블릿 컨테이너는 서블릿의 생성과 죽음을 관리하게 된다.
-
멀티쓰레드 지원 및 관리
서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성하는데, HTTP 서비스 메소드를
실행하고 나면, 쓰레드는 자동으로 죽게 된다. 이렇듯 원래는 개발자가 쓰레드를 관리해야하지만 서블릿 컨테이너가 쓰레드 관리를 대신 해준다.
서블릿 컨테이너 동작
- 톰캣 서버 생성
- 톰캣 서버는 서블릿 컨테이너 생성한다.
HttpServlet
을 상속받은 클래스를 인스턴스화 해서 컨테이너 내에 등록한다.
- 지정한 endpoint로 http 요청이 들어오면, 해당하는 클래스의
service()
메서드를 호출하면서 request
, response
를 파라미터로 전달.
- 그리고
response
를 만들어서 응답해준다.
정리
- 서블릿은 자바 진영의 기본 웹 사양이다.
- 서블릿은 단독으로 사용되지는 않고, 서블릿 컨테이너와 함께 사용된다.
- 서블릿 컨테이너는 서블릿과 웹 통신을 지원해준다.
- 서블릿 컨테이너는 서블릿 생명주기를 관리해준다.
- 서블릿 컨테이너는 요청에 대한 멀티쓰레드 지원과 관리를 해준다.