[JSP] Servlet 개념
Servlet?
서블릿(Servlet) 은 자바 소스코드 속에 HTML 코드가 들어가는 형태입니다. JSP(Java Server Page) 는 이와 반대로 HTML 소스코드 속에 자바 소스코드가 들어가는 구조를 갖는 웹 어플리케이션 프로그래밍 기술입니다.
즉, 웹 개발시 HTML은 정적 웹페이지만 구현이 가능했는데, 동적 웹페이지를 작성하기 위한 언어로 Java가 사용되었습니다. 이것을 우리는 Servlet class 라고 합니다.
아래 그림은 servlet 동작 과정을 설명합니다. servlet은 하나의 기능이라고 생각하면 편할 것 같습니다. 개발자는 특정한 기능을 하는 서블릿 소스를 작성해 이를 컴파일합니다. 이러한 자바 클래스를 서블릿 컨테이너에 등록하면 클라이언트의 요청에 따라 특정한 기능
을 하는 서블릿 메서드가 실행됩니다.
Servlet container
서블릿이 클래스, 메소드라면 서블릿 컨테이너(Servlet Container) 는 등록된 서블릿들을 관리, 실행해주는 주체입니다. 대표적인 서블릿 컨테이너는 지난 시간까지 설치해봤던 Tomcat이 있습니다.
서블릿 컨테이너는 아래와 같은 역할을 합니다.
웹 서버와의 통신 지원
서블릿 컨테이너는 서블릿과 웹 서버가 손쉽게 통신할 수 있게 해주어 소켓을 만들고 listen, accept 등을 API로 제공하여 복잡한 과정을 생략할 수 있게 해줍니다.
서블릿 생명 주기 관리
서블릿 컨테이너는 클래스 로딩을 통한 인스턴스화, 초기화 메소드 호출, 요청에 대한 서블릿 메소드 호출, 서블릿 소멸 시 메모리 회수 등의 작업을 담당합니다.
멀티쓰레드 관리
서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성하여 동작시킵니다. 서블릿 컨테이너가 다중 쓰레드를 생성 및 운영해주기 때문에 쓰레드 안정성에 대해 걱정하지 않아도 됩니다.
선언적인 보안 관리
서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현해 놓지 않아도 됩니다.
Servlet 동작 과정
이를 순서대로 나타내면 다음과 같습니다.
- 웹 서버가 HTTP 요청을 받습니다.
- 웹 서버는 이것이 동적 웹페이지를 만들어야하는 요청일 경우 서블릿 컨테이너로 전달합니다.
- 서블릿이 컨테이너에 없다면 서블릿을 검색하여 컨테이너 주소 공간에 로드합니다.
- 컨테이너가 서블릿의 init() 메소드를 호출하여 서블릿을 초기화합니다.
- 컨테이너가 서블릿의 service() 메소드를 호출하여 HTTP 요청을 처리합니다.
- 웹 서버는 동적으로 생성된 결과를 올바른 위치에 반환합니다.
이 과정에서 service() 가 끝난 서블릿도 회수되지 않고, 동일한 요청이 올 때 같은 작업을 수행할 수 있습니다. 이 경우에는 서블릿이 컨테이너에 있으므로 검색 과정을 생략합니다.
다음 실습에서 알아보겠지만 이제 클래스 내부의 service() 를 main() 과 같은 역할이라고 생각하면 이해가 편할 것 같습니다.
Leave a comment