일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스택
- javascript
- 힙덤프
- math
- alter
- GC로그수집
- sql
- set
- html
- Union-find
- BFS
- Calendar
- dfs
- union_find
- NIO
- 스프링부트
- JPA
- Java
- date
- map
- scanner
- spring boot
- string
- CSS
- 리소스모니터링
- Properties
- 큐
- List
- priority_queue
- deque
- Today
- Total
매일 조금씩
Servlet 이란? Spring 에선 어떻게 사용하고 구현되는지? 본문
[목차]
1. Servlet 이란?
Servlet은 Java 기반의 웹 애플리케이션을 개발하기 위한 서버 측 프로그램으로,
주로 HTTP 요청을 처리하고 응답을 생성하는데 사용된다.
Point1. 서버 측에서 동작
Servlet은 웹 서버나 애플리케이션 서버에서 실행되며,
클라이언트(주로 웹 브라우저)로부터 들어오는 요청을 받아 처리한 뒤,
HTML이나 JSON 등의 응답을 반환하는 역할을 한다.
Point2. HTTP 프로토콜 지원
Servlet은 HTTP 프로토콜을 지원하므로, GET, POST, PUT, DELETE 등 다양한 HTTP 메서드로 요청을 처리할 수 있다.
이를 통해 동적인 웹 페이지를 생성하거나 데이터 처리 요청을 관리할 수 있다.
Point3. 생명 주기
Servlet은 서버가 시작되면 처음 한 번만 인스턴스가 생성되며, 이후에는 클라이언트의 요청이 있을 때마다 service()메서드가 호출된다.
주요 생명주기 메서드에는 init(), service(), destroy()가 있다.
Point4. 안정성과 확장성
서버 측에서 동작하기 떄문에, 동적 웹 페이지를 생성할 수 있으며, 클라이언트가 요청한 내용을 안정적으로 처리할 수 있다.
여러 클라이언트의 요청을 동시에 처리할 수 있는 멀티스레드 환경을 지원하여 확장성이 높다.
2. Spring 에선 어떻게 쓰일까?
Spring 에서는 개발자가 직접 Servlet을 구현하지 않아도,
내부적으로 Spring 이 Servlet을 사용하여 HTTP 요청을 처리하고 응답을 생성한다.
DispatcherServlet 이라는 특수한 Servlet을 핵심으로 사용하여 클라이언트 요청을 처리한다.
이 DispatcherServlet은 Spring MVC의 중앙 컨트롤러 역할을 하며, HTTP 요청을 받아서 적절한 컨트롤러로 전달하고,
처리 결과를 클라이언트에게 응답으로 반환한다.
Spring에선 Spring Framework의 서브 모듈인 Spring MVC를 사용할 수 있기에, 따로 Servlet을 구현할 필요가 없다.
Spring MVC에서는 @Controller 와 @RequestMapping 어노테이션을 사용하여 요청을 처리하는 컨트롤러를 정의한다.
이는 Servlet을 직접 구현하는 것보다 훨씬 간단하게 HTTP 요청을 처리할 수 있도록 해준다.
따라서, Spring 에서 개발자가 직접 Servlet을 구현하지 않아도 된다.
그러나 특정 상황에서는 Servlet을 직접 등록하여 사용할 수도 있다.
예를 들어, 필터나 리스너를 설정하거나, 전통적인 Servlet 방식으로 매우 세밀하게 요청과 응답을 제어해야 할 경우가 있다.
아래처럼 Spring Boot 애플리케이션에서 직접 Servlet을 등록할 수 있다.
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
@Configuration
public class ServletConfig {
@Bean
public ServletRegistrationBean<HttpServlet> customServlet() {
return new ServletRegistrationBean<>(new HttpServlet() {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("Custom Servlet Response");
}
}, "/customServlet");
}
}
즉, Servlet은 Spring에서 핵심적인 요청 처리 방식으로 여전히 사용되지만,
Spring MVC가 그 복잡성을 대부분 감춰주기 때문에 개발자는 직접 Servlet을 다룰 필요가 거의 없다.
3. @RestController와 @Controller의 차이점
- @Controller는 주로 HTML 뷰를 반환할 때 사용되며, MVC(Model-View-Controller) 패턴에서 View를 렌더링한다.
- @RestController는 데이터를 바로 반환하는 용도로 사용되며, 뷰를 렌더링하지 않는다.
- @RestController 내부에서는 기본적으로 모든 메서드에 @ResponseBody가 적용된 것으로 간주되기 때문에, 각 메서드가 JSON 형식의 응답을 자동으로 제공하게 된다.
'Java' 카테고리의 다른 글
Java EE 란? Spring framework 와 경쟁? 상호 보완? (1) | 2024.11.03 |
---|---|
유틸리티 클래스 사용 시 주의 사항 "Add a private constructor to hide the implicit public one" (0) | 2024.10.26 |
익명 클래스와 람다식의 차이 (0) | 2022.02.14 |
Thread와 synchronized (0) | 2022.02.14 |
[JPA] save와 persist차이 (save, persist, merge개념) (0) | 2022.02.07 |