⭐ 서블릿(Servlet)이란?
서블릿(Servlet)은 자바 기반의 웹 애플리케이션에서 서버에서 클라이언트의 요청을 받아 그에 맞는 응답을 생성해주는 자바 프로그램으로, 웹 애플리케이션을 개발할 때 사용하는 자바 클래스입니다.
예를 들어, 어떤 사용자가 로그인 요청을 보내면, 서블릿은 그 요청을 받아서, 그 사람이 맞는지 확인하고, 성공하면 "로그인 성공!"이라는 메시지를 돌려줍니다.
즉, 클라이언트의 요청을 받아서 그에 대한 응답을 생성하는 역할을 합니다. 주로 HTTP 요청을 처리하며, 동적인 웹 페이지를 생성하거나 데이터를 처리하는 데 사용됩니다.
서블릿은 자바의 서블릿 API를 구현한 클래스로, 웹 서버나 애플리케이션 서버에서 실행됩니다. 이는 정적인 HTML 파일과는 다르게 사용자의 요청에 따라 동적으로 콘텐츠를 생성하는 데 매우 유용합니다.
⭐ 서블릿의 역할
- 요청 처리: 클라이언트(주로 웹 브라우저)로부터 HTTP 요청을 받아서 처리합니다.
- 응답 생성: 요청을 처리한 결과를 바탕으로 HTTP 응답을 생성합니다. 이 응답은 HTML, JSON, XML 등의 포맷으로 될 수 있습니다.
- 상태 관리: 서블릿은 세션을 통해 클라이언트와의 상태를 관리할 수 있습니다. 예를 들어, 사용자가 로그인했는지 여부를 추적하는 기능을 제공합니다.
⭐ 서블릿의 생명 주기
- 생성 (init 메소드): 서블릿이 처음 요청될 때, 또는 서버가 시작될 때 서블릿 객체가 생성됩니다. init() 메소드는 서블릿이 초기화될 때 한 번 호출됩니다.
- 서비스 (service 메소드): 클라이언트로부터 요청이 들어오면 service() 메소드가 호출되어 요청을 처리합니다. 이 메소드는 HTTP 요청에 따라 적절한 메소드를 호출합니다(예: doGet() 또는 doPost()).
- 소멸 (destroy 메소드): 서블릿이 더 이상 필요하지 않게 되면 destroy() 메소드가 호출되어 서블릿 객체가 메모리에서 소멸됩니다. 서버가 종료되거나 서블릿이 재시작될 때 호출됩니다.
⭐ 서블릿의 동작 방식
- 클라이언트 요청: 웹 브라우저 또는 다른 클라이언트가 HTTP 요청을 서버로 전송
- 서버 처리: 서버는 이 요청을 서블릿 컨테이너(Servlet Container)에 전달합니다. 서블릿 컨테이너는 서블릿을 관리하는 역할을 하는 서버 구성 요소로, 개발자는 서블릿을 통해 웹 요청을 처리하는 로직을 구현하지만, 이 서블릿을 실행하고 관리하는 것은 서블릿 컨테이너(예: Apache Tomcat, Jetty, WildFly 등)입니다. 컨테이너는 요청에 맞는 서블릿을 찾고, 해당 서블릿의 service() 메소드를 호출합니다.
- 요청 분석 및 처리: 서블릿은 클라이언트의 요청을 분석하고 필요한 처리를 수행합니다. 예를 들어, 데이터베이스에서 정보를 조회하거나, 다른 서비스와 통신할 수 있습니다.
- 응답 생성: 처리 결과를 바탕으로 서블릿은 클라이언트에게 보낼 응답을 생성합니다. 이 응답은 HTML, JSON, XML 등 다양한 포맷으로 표현될 수 있습니다.
- 응답 전송: 서블릿은 생성한 응답을 웹 서버를 통해 클라이언트로 전송합니다.
⭐ 서블릿과 서블릿 컨테이너
- 서블릿(Servlet): 자바 코드로 작성된 프로그램으로, 클라이언트의 요청을 처리하고 응답을 생성하는 컴포넌트입니다. 예를 들어, 브라우저에서 보내는 폼 데이터를 처리하거나, 데이터베이스에서 정보를 가져와 웹 페이지에 표시할 때 사용됩니다.
- 서블릿 컨테이너(Servlet Container): 서블릿을 실행하고 관리하는 환경입니다. 서블릿을 생성하고, 요청을 서블릿으로 전달하며, 응답을 클라이언트에게 보내는 일을 담당합니다. 서블릿 컨테이너가 없으면 서블릿은 독립적으로 실행될 수 없습니다.
간단히 말해, 서블릿은 일하는 주체, 서블릿 컨테이너는 그 일을 시키고 관리하는 관리자라고 생각할 수 있습니다.
⭐ 서블릿 예시 코드
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.getWriter().println("<h1>Hello, Servlet!</h1>");
}
}
HelloServlet은 HttpServlet 클래스를 상속받아 서블릿을 구현한 것입니다.
클라이언트가 GET 요청을 보내면, 서블릿은 "Hello, Servlet!"이라는 HTML 콘텐츠를 응답으로 전송합니다.
⭐HttpServlet 클래스
HttpServlet은 자바 서블릿 API에서 HTTP 요청을 처리하는 데 특화된 서블릿 클래스입니다.
자바 웹 애플리케이션에서 HTTP 프로토콜(GET, POST, PUT, DELETE 등)을 사용해 클라이언트(웹 브라우저나 앱)와 서버 간의 요청과 응답을 처리하는 데 사용됩니다.
HttpServlet은 javax.servlet.http.HttpServlet 클래스를 상속받아 작성할 수 있습니다.
이 클래스는 HTTP 요청에 대한 다양한 메서드들을 미리 정의해 두었습니다.
예를 들어, GET 요청이 들어오면 doGet() 메서드가, POST 요청이 들어오면 doPost() 메서드가 실행됩니다.
✅ HttpServlet의 주요 메서드
- doGet(HttpServletRequest req, HttpServletResponse res): 클라이언트가 GET 요청을 보낼 때 호출됩니다. 주로 데이터를 가져오거나 페이지를 렌더링할 때 사용됩니다.
- doPost(HttpServletRequest req, HttpServletResponse res): 클라이언트가 POST 요청을 보낼 때 호출됩니다. 보통 데이터를 서버에 전송하거나 처리할 때 사용됩니다(예: 로그인 폼 제출).
- doPut(), doDelete(): 각각 PUT, DELETE 요청을 처리하기 위한 메서드입니다. RESTful API를 만들 때 자주 사용됩니다.
✅ HttpServlet의 동작 방식
- 클라이언트 요청: 사용자가 웹 브라우저를 통해 URL을 요청하거나, 앱에서 API 요청을 보냅니다.
- 서블릿 컨테이너: 요청을 받은 서버(예: 톰캣)는 서블릿 컨테이너에서 해당 서블릿을 찾아서 실행합니다.
- HttpServlet 처리: 요청의 종류(GET, POST 등)에 따라 doGet(), doPost() 같은 메서드가 호출되어 요청을 처리합니다.
⭐ 서블릿과 JSP의 관계
서블릿과 JSP(JavaServer Pages)는 웹 애플리케이션에서 함께 사용됩니다.
서블릿은 주로 요청을 처리하고 비즈니스 로직을 담당하며, JSP는 결과를 표시하는 데 사용됩니다.
서블릿이 데이터를 처리하고 JSP로 전달하면, JSP는 그 데이터를 바탕으로 HTML 페이지를 생성해 사용자에게 보여줍니다.
⭐ 서블릿의 장점
- 플랫폼 독립성: 자바로 작성된 서블릿은 다양한 플랫폼에서 실행 가능합니다.
- 확장성: 서블릿은 여러 클라이언트 요청을 처리할 수 있어 확장성이 뛰어납니다.
- 보안: 서블릿은 보안 기능을 쉽게 구현할 수 있어 안전한 웹 애플리케이션을 만들 수 있습니다.
⭐ 서블릿을 쓰는 이유
- 동적 콘텐츠 생성: 서블릿은 사용자의 요청에 따라 웹 페이지나 데이터를 동적으로 생성할 수 있습니다.
- HTTP 요청 처리: GET, POST 등 다양한 HTTP 요청을 효율적으로 처리하는 데 특화되어 있습니다.
- 확장성과 자원 관리: 많은 요청을 동시에 처리할 수 있어 대규모 웹 애플리케이션에 적합합니다.
- 자바 생태계 활용: 자바의 강력한 기능과 라이브러리를 그대로 사용할 수 있습니다.
🚩 결론
서블릿은 자바 웹 애플리케이션에서 중요한 역할을 합니다.
서버 측에서 요청을 처리하고 응답을 생성하는 로직을 담당하는 서블릿은 동적인 웹 콘텐츠를 생성하는 데 매우 유용합니다.
서블릿의 기본적인 개념과 동작 방식을 이해하면, 더 복잡한 웹 애플리케이션 개발로 나아갈 수 있는 좋은 기반을 마련할 수 있습니다.
📌 참고
Servlet API integration :: Spring Security
The following section describes the Servlet 3 methods with which Spring Security integrates. HttpServletRequest.authenticate(HttpServletRequest,HttpServletResponse) HttpServletRequest.login(String,String) You can use the HttpServletRequest.login(String,Str
docs.spring.io
멀보송? 😼
'기술 지식 쌓아가기 📚 > Backend 🍔' 카테고리의 다른 글
[Spring] 안전한 웹 개발의 시작: 스프링의 Validation, Data Binding, Type Conversion 🍃 (0) | 2024.09.27 |
---|---|
[Spring] 스프링 MVC: 웹 개발의 기본, 쉽게 이해하기 🍃 (5) | 2024.09.22 |
[Spring] SpEL(Spring Expression Language)이란? Spring에서 표현식을 다루는 쉬운 방법 알아가기 🍃 (1) | 2024.09.16 |
[Spring] 스프링 컨테이너란? 의존성 주입의 마법 🍃 (2) | 2024.09.15 |
[Spring] 스프링 빈(Bean)이란? 초보 개발자를 위한 쉬운 설명 🍃 (3) | 2024.09.13 |