Java Servlet, JSP을 설명하는 글입니다.
Servlet
정의 : Servlet은 클라이언트의 요청을 처리하고 동적으로 응답을 생성하는 Java 클래스입니다.
등장 배경
CGI (Common Gateway Interface) 한계를 극복하기 위해 개발되었다.
- CGI 방식으로 개발한 웹 애플리케이션은 웹 서버가 요청하면 개별 프로세스를 생성하여 이를 처리
- 프로세스(process)는 간단하게 실행 중인 프로그램.
- 하나의 프로세스는 코드, 정적 데이터, 스택, 힙 등과 같은 메모리 구조를 가진다.
- 실행 코드뿐만 아니라 데이터의 중복으로 인해 메모리 사용이 크게 증가하여 시스템 성능이 저하된다.
개발 언어에 따라 이식성 문제가 발생.
-
C로 작성된 Windows용 CGI 프로그램은 Linux나 Mac에서 실행되지 않으므로, 다시 컴파일하고 배포해야 하는 문제가 발생.
-
웹 페이지의 구성 요소 간 구조를 정의하는 작업이 쉽지 않고, 유지보수도 어렵다.
Java 플랫폼에서 컴포넌트를 기반으로 한 웹 애플리케이션 개발에 대한 요구 증가.
특징
확장이 용이하고 플랫폼 독립적인 웹 응용프로그램 개발이 가능.
스레드 기반 : 높은 효율성 제공.
- 스레드(thread)란 가장 작은 처리 단위.
- 일반적으로 프로세스의 부분집합(subset)으로 존재
- 멀티스레드(multithread)는 하나의 프로세스안에 다수의 스레드가 존재하는 것을 의미
1) 같은 프로세스에 포함된 스레드들은 메모리, 상태 정보 등 다양한 자원을 공유하며, 주소 공간을 공유
2) 스레드 간 통신이 용이하며 스레드간 신속한 컨텍스트 스위칭 가능.
자바 기반 : 자바 API를 모두 사용할 수 있음.
- 플랫폼에 독립적이며, 이식성 문제를 발생하지 않으며 높은 생산성과 신뢰성을 기대.
- 자바 API를 모두 사용할 수 있기 때문에 강력하고 다양한 기능을 제공.
- 객체지향 프로그래밍 지원.
운영체제, 하드웨어 독립적인 개발 및 운영 환경 구축.
이제 Servlet의 내용을 본격적으로 시작해보겠습니다.
Servlet 동작 과정
1. 사용자가 웹 브라우저를 이용하여 요청을 보냅니다.
2. 웹 서버는 정적인 리소스를 찾지 못하면, 요청을 웹 컨테이너로 전달합니다.
3. 웹 컨테이너는 “HttpServletRequest” 객체와 “HttpServletResponse” 객체를 생성합니다.
4. 웹 컨테이너는 서블릿 객체를 생성하거나 기존 서블릿을 재사용하여, 요청을 처리할 스레드를 생성하고 요청, 응답 객체를 전달합니다.
5. 서블릿의 service() 메서드를 호출하여 요청된 HTTP 메서드(GET, POST 등)를 처리합니다.
6. 요청에 따라 동적인 콘텐츠를 생성하고, 이를 응답 객체에 저장합니다.
7. 웹 컨테이너는 생성된 응답을 웹 서버로 전달합니다.
8. 웹 서버는 응답을 웹 브라우저로 전송하고, 브라우저는 이를 화면에 표시합니다.
서블릿의 생명 주기
1.클래스 로드 및 인스턴스 생성
- 웹 컨테이너가 서블릿 클래스를 메모리에 로드하고, 기본 생성자를 호출하여 서블릿 객체를 생성합니다.
2.초기화
- init() 메서드를 호출하여 서블릿 객체를 초기화합니다. 필요한 자원 설정을 수행합니다.
3.요청 처리
- 클라이언트 요청이 들어오면, 새로운 스레드를 생성하고 service() 메서드를 호출하여 요청을 처리합니다.
4.HTTP 메서드 실행
- service() 메서드에서 요청된 HTTP 메서드에 따라 doGet() 또는 doPost() 등을 호출하여 비즈니스 로직을 실행합니다.
5.소멸
- 서블릿이 더 이상 필요하지 않을 때 destroy() 메서드를 호출하여 자원을 정리하고 서블릿을 소멸시킵니다.