Java 웹 애플리케이션에서 클라이언트 요청을 처리하고 동적으로 응답을 생성하기 위한 기술
HTTP요청과 응답을 다룰 수 있는 핵심 컴포넌트
주요 특징
1. HTTP 요청/응답 처리
- HTTP 프로토콜을 기반으로 GET, POST 등의 요청을 처리한다
2. 서버 측 동작
- 클라이언트가 요청하면 서버에서 Servlet이 실행되고, 동적으로 결과를 생성해 클라이언트로 응답을 보낸다
3. 플랫폼 독립성
- Java로 작성되므로 다양한 플랫폼에서 실행 가능하다
4. 확장성
- 다양한 기능을 추가할 수 있어 웹 애플리케이션 개발에 적합하다
5. JSP와 연계
- JSP(Java Server Pages)와 함께 사용되어, Servlet은 주로 로직을 처리하고 JSP는 응답 화면을 구성하는데 사용된다
동작 원리
1. 클라이언트 요청
- 브라우저가 URL을 통해 요청을 보낸다
2. 컨테이너가 요청 처리
- Servlet 컨테이너(Tomcat, Jetty 등)가 HTTP요청을 받고 적절한 Servlet으로 전달한다
3. Servlet이 요청 처리
- 요청을 처리하고 동적 결과를 생성하여 응답으로 보낸다
4. 클라이언트로 응답 전송
- 생성된 응답이 브라우저로 전달되어 화면에 표시된다
생명주기(Lifecycle)
1. init()
- Servlet이 최초로 호출될때 실행된다
- 초기화 작업을 수행한다
2. service()
- 클라이언트 요청을 처리하는 메서드
- 요청 메서드(GET, POST 등)에 따라 doGet(), doPost()가 호출된다
3. destroy()
- Servlet이 종료될때 호출된다
- 자원 정리 작업을 수행한다
주요 클래스 및 인터페이스
1. HttpServlet
- 대부분의 Servlet은 HttpServlet을 상속받아 작성된다
- HTTP 프로토콜을 기반으로 요청을 처리한다
2. HttpServletRequest
- 클라이언트의 요청 정보를 캡슐화한 객체
- 요청 파라미터, 헤더, URI 등을 다룰 수 있다
3. HttpServletResponse
- 서버의 응답 정보를 캡슐화한 객체
- 응답 데이터를 설정하고 전송한다
4. ServletConfig
- Servlet 초기화 파라미터와 환경 정보를 제공하는 객체
5. ServletContext
- 애플리케이션 전역 정보를 제공하며, Servlet 간에 데이터를 공유할 때 사용
기본 Servlet 예제
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/example") // URL 매핑
public class ExampleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 응답 내용 설정
response.setContentType("text/html");
response.getWriter().println("<h1>Hello, Servlet!</h1>");
}
}
주요 기능
1. 요청 처리
- 클라이언트의 요청을 받아서 파라미터를 처리한다
2. 응답 생성
- 요청 결과를 동적으로 생성하여 클라이언트에 전송한다
3. 세션 관리
- HttpSession을 사용하여 클라이언트 상태를 유지한다
4. 파일 업로드/다운로드
- 클라이언트가 업로드한 파일을 처리하거나 파일을 제공할 수 있다
5. 요청 전달 및 포워딩
- 다른 Servlet 또는 JSP로 요청을 전달할 수 있다
장점
1. Java 기반
- Java의 객체지향 기능과 표준 라이브러리를 활용할 수 있다
2. 성능
- Servlet은 서버 내에서 실행되므로 빠르고 효율적이다
3. 보안
- Java의 보안 기능과 HTTPS를 통해 안전하게 데이터를 처리할 수 있다
4. 다양한 기능
- 세션 관리, 쿠키, 요청 포워딩 등 다양한 기능을 지원한다
Servlet과 JSP의 비교
항목 | Servlet | JSP |
역할 | 로직 처리 | 화면 구성 |
코드 구조 | Java 코드로 작성 | HTML 내에 Java 코드를 포함 |
유지보수 | 코드가 복잡하고 길어질 수 있음 | 유지보수가 쉬움 |
성능 | 초기 로드가 빠름 | 초기 로드 시 컴파일 필요 |
적용 범위 | 주로 컨트롤러 역할 | 뷰(View) 역할 |
대체하는 기술
여전히 사용되지만, 더 현대적이고 생산성을 높이는 프레임워크(예 : SpringBoot) 가 등장 하면서 대체되는 경우가 많다
- Spring MVC : 컨트롤러와 요청 처리 로직을 보다 쉽게 관리
- Spring Boot : Sevlet을 기반으로 하지만 설정을 단순화하여 개발 생산성을 향상
요약
- Servlet은 Java를 사용하여 클라이언트의 HTTP 요청을 처리하고 동적으로 응답을 생성하는 서버 측 컴포넌트
- HTTP 요청 및 응답 처리, 세션 관리 등 다양한 기능 제공
- Servlet은 보통 JSP와 함께 사용되며, 현대에는 Spring MVC 같은 프레임워크로 대체되는 경우가 많음
- Servlet은 여전히 Java 기반 웹 애플리케이션의 핵심 요소로 활용됨
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
[Java] Java Collections Framework (0) | 2025.03.06 |
---|---|
[Java] Mockito (0) | 2025.01.21 |
[Java] HttpServletRequest (0) | 2025.01.08 |
[Java] Jackson 라이브러리 (0) | 2025.01.07 |
[JPA] N + 1 문제 (0) | 2025.01.06 |