서블릿(Servlet)과 스프링(Spring)은 자바 기반 웹 애플리케이션 개발에 사용되는 두 가지 주요 기술입니다. 둘은 서로 보완적인 관계에 있으며, 목적과 사용 방식에서 차이가 있습니다.
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.setContentType("text/plain");
resp.getWriter().write("Hello, Servlet!");
}
}
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public String sayHello() {
return "Hello, Spring!";
}
}
| 항목 | 서블릿(Servlet) | 스프링(Spring) |
|---|---|---|
| 개발 수준 | 저수준 HTTP 요청/응답 처리 | 고수준 애플리케이션 개발 지원 |
| API 제공 | HttpServlet, HttpServletRequest, HttpServletResponse | Spring MVC, Spring Boot, Spring Data 등 |
| 코드 작성 방식 | 요청과 응답 처리 로직을 직접 작성 | 선언적 방식 (애너테이션 및 설정으로 처리) |
| MVC 지원 | 직접 구현해야 함 | Spring Web MVC 모듈 제공 |
| 확장성 | 제한적 | 다양한 모듈과 외부 라이브러리 통합 지원 |
| 학습 난이도 | 비교적 쉬움 | 상대적으로 높음 |
서블릿(Servlet)의 탄생 배경과 CGI의 문제, 그리고 CGI를 보완한 서블릿의 특성 및 Spring Web MVC에서의 서블릿 사용 방식을 단계별로 설명하겠습니다.
CGI는 초기 웹 서버와 애플리케이션 간의 동적 콘텐츠 처리를 위한 인터페이스로, 서버가 클라이언트 요청을 처리하기 위해 CGI 프로그램(일반적으로 스크립트 언어로 작성)을 실행합니다.
프로세스 생성 비용
스레드 미사용
상태 유지 어려움
복잡한 유지보수
CGI의 문제를 해결하기 위해 Java EE(당시 J2EE) 표준 기술로 서블릿이 등장했습니다. 서블릿은 자바 기반으로 웹 서버 내에서 실행되는 Java 클래스로 구현되며, CGI의 단점을 크게 보완했습니다.
스레드 기반 처리
상태 관리 가능
자바 기반의 안전성과 플랫폼 독립성
풍부한 API 제공
재사용성과 유지보수성
Spring MVC는 서블릿을 기반으로 동작하며, DispatcherServlet이라는 프론트 컨트롤러(Front Controller) 서블릿을 활용합니다.
서블릿 등록
Spring Boot를 사용하는 경우, @SpringBootApplication이 자동으로 DispatcherServlet을 등록합니다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
DispatcherServlet이 요청을 수신
웹 서버(Tomcat 등)는 모든 요청을 DispatcherServlet에 전달합니다.
HandlerMapping에 따라 컨트롤러 매핑
DispatcherServlet은 HandlerMapping을 통해 적절한 컨트롤러를 찾습니다.
컨트롤러 실행
컨트롤러는 요청을 처리하고, 결과 데이터를 반환합니다.
@RestController
@RequestMapping("/example")
public class ExampleController {
@GetMapping
public String example() {
return "Hello, Spring MVC!";
}
}
응답 생성
CGI: 프로세스 기반으로 비효율적이고, 상태 유지가 어려운 초기 기술.
Servlet: CGI의 단점을 극복한 Java 기반의 요청 처리 기술. 스레드 기반으로 동작하며, 자원 사용이 효율적.
Spring Web MVC: 서블릿의 DispatcherServlet을 활용해 고수준의 MVC 패턴을 구현. 서블릿의 기능을 추상화하여 개발자가 비즈니스 로직에 집중할 수 있도록 지원.
Servlet은 웹 애플리케이션 개발의 기초적인 기술로, 간단한 요청/응답 처리가 필요한 경우 유용합니다.
스프링은 서블릿의 한계를 극복하고, 확장성과 생산성을 높이는 고수준 프레임워크로, 복잡한 애플리케이션 개발에 적합합니다.
따라서, 서블릿은 Spring MVC의 기반 기술로 사용되지만, Spring MVC를 통해 서블릿의 복잡한 작업은 대부분 자동화됩니다.
추가 학습 자료