웹 브라우저가 HTTP 요청을 서버에 전달하면, 서버는 해당 요청을 처리하여 응답을 생성한다
이때 서버에서 동적으로 사용자의 요청을 처리하는 대표적인 자바 기술이 서블릿(Servlet)이다
Servlet(서블릿)이란?
Servlet은 웹 서버에서 동적인 웹 페이지를 생성하고 클라이언트의 요청을 처리하기 위해 사용되는 Java 클래스이다
요청-응답 프로그래밍 모델을 기반으로 하며, 주로 웹 서버에서 동적 웹 페이지(JSP 등)를 생성하거나 HTTP 요청을 처리하는 데 사용됨
예를 들어, 사용자가 정보를 입력하고 검색 버튼을 누르면 서블릿이 그 검색어에 맞는 결과를 처리해 웹 페이지에 표시한다
++
JSP(JavaServer Pages)
JSP(=자바 서버 페이지)는 웹 페이지를 만들기 위해 HTML과 Java 코드를 함께 사용할 수 있는 기술로, 서버에서 실행되어 동적인 컨텐츠를 생성함
서블릿은 클라이언트 요청을 처리하고 그 결과를 JSP에 전달해 사용자에게 보여주는 역할을 한다
💡동적인 콘텐츠란? 사용자의 행동이나 상황에 따라 웹 페이지의 내용이 달라지는 것
서블릿의 주요 특징
javax.servlet와 javax.servlet.http 패키지의 API를 임포트 한다(서블릿 작성을 위한 인터페이스와 클래스를 제공함)
모든 서블릿은 Servlet 인터페이스를 구현해야 하며, 생명주기 메서드(라이프 사이클 메서드)를 정의한다
HTTP 프로토콜 상에서 사용자의 요청을 처리하는 서블릿 클래스를 작성하려면 HttpServlet 클래스를 상속해야 함
서블릿 클래스는 반드시 public으로 선언되어야 하고, 반드시 기본 생성자가 필요하다
doGet(), doPost()등의 메서드를 오버라이드 하여 요청을 처리함
서블릿 컨테이너
서블릿 객체는 서블릿 컨테이너에 의해 생성되고 관리된다
톰캣 서버 구동 시 콘솔에 출력되는 "서버 엔진을 시작합니다"에서 서버 엔진에 서블릿 컨테이너가 포함된다 ⇒ 이 시점에 서블릿 컨테이너의 초기화도 같이 이루어짐
서블릿 컨테이너는 내부적으로 스레드 풀을 생성하고 관리해 성능을 최적화한다
클라이언트 요청이 들어오면 스레드 풀에서 스레드를 할당받아 서블릿의 service() 메서드를 호출해 요청을 처리함
서블릿의 .class파일 로딩, 객체 생성, 그리고 init() 메서드 호출은 최초의 서블릿 요청 시 한 번만 이루어짐 ⇒ 최초 요청은 오래 걸리지만 이후부터는 service() 메서드만 실행되므로 처리 속도가 빨라진다
이 service() 메서드에서 사용자가 요청한 로직이 실행됨
서블릿의 생명주기
서블릿은 생성, 요청 처리, 소멸 과정을 거치며 동작한다
메서드명 | 호출 시점 | 역할 |
init() | 서블릿 객체가 생성된 직후 | 멤버 변수 초기화 |
service() | 브라우저가 요청할 때 마다 | 서블릿이 처리해야 할 구체적인 작업 처리. 주로 doGet()이나 doPost() 호출 |
destroy() | 서블릿 객체가 삭제되기 직전 | 자원 해제 |
서블릿 설정
web.xml 파일에 서블릿을 등록하거나 어노테이션(@WebServlet)을 사용할 수 있음
예를 들어 @WebServlet({"/test1".do, "/test2.do"})
++
web.xml은 웹 애플리케이션 전체 환경을 기술하는 환경설정 파일이다
web.xml 파일을 수정한 후에는 서버 재시작해야 함
web.xml이 위치한 WEB-INF 디렉터리는 외부에서 직접 접근할 수 없는 보안 디렉터리로 web.xml과 애플리케이션 실행에 필요한 외부 라이브러리(jar) 파일 등을 포함한다
Tomcat Server(톰캣 서버)란?
Apache에서 개발한 톰캣 서버는 자바 언어로 구현된 웹 서버이자 서블릿 컨테이너이다
톰캣 서버 = 웹 서버+서블릿 컨테이너
(서버와 서블릿 컨테이너의 역할을 모두 수행)
웹 서버: HTTP 요청을 처리하고 정적 컨텐츠(HTML, CSS, 이미지 등)를 제공
서블릿 컨테이너: 동적 컨텐츠 생성을 위해 서블릿 클래스의 객체를 생성 및 관리, JSP 페이지를 처리
ㄴ서버 시작 시 서블릿 컨테이너가 초기화됨
ㄴweb.xml 파일을 읽어 서블릿 매핑(mapping) 정보를 로드
ㄴ클라이언트의 요청에 따라 해당 서블릿 인스턴스를 생성하거나 재사용함
톰캣 서버의 주요 기능
서블릿의 생명주기 관리: 서블릿의 생성, 초기화, 요청 처리 및 소멸 과정을 관리
web.xml 파일 해석 및 설정 적용: 서블릿 컨테이너는 자신이 생성하고 관리할 클래스들에 대한 정보를 web.xml을 통해 얻음
요청에 따른 스레드 생성 및 관리: 스레드 풀을 사용하여 요청을 처리해 성능을 향상 시킴
보안 및 세션 관리: 클라이언트의 인증과 세션 상태를 관리해 보안 강화
톰캣 서버의 배포
웹 애플리케이션을 WAR(Web Application Archive) 파일로 패키징하여 배포할 수 있음
출처
'Back-end' 카테고리의 다른 글
[Spring Boot] 스프링부트에서 SQL 로그 출력하기 - logback, log4jdbc (0) | 2024.10.24 |
---|---|
[Spring Boot] 스프링부트에서 JSTL 사용하기 (0) | 2024.10.11 |
HTTP란? HTTP프로토콜 이해하기 (0) | 2024.09.12 |
MVC 패턴이란? - Model View Controller 디자인 패턴 알아보기 (0) | 2024.08.30 |
[Database] OracleDB 주요 SQL 정리 (0) | 2024.08.22 |