[10분 테코톡] 🌻타미의 Servlet vs Spring
웹 애플리케이션을 만들 때 필요한 인터페이스
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("/hello") // URL 매핑
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>");
}
}
✔ 실행 흐름
/hello 경로로 HTTP 요청이 오면 doGet() 메서드가 실행되고, response.getWriter().println()을 사용해서 응답을 생성
Servlet을 기반으로 한 MVC(Model-View-Controller) 아키텍처를 제공하는 프레임워크.
개발자가 직접 요청과 응답을 관리하는 것이 아니라 Spring이 이를 자동으로 처리해서 더 간결하고 유지보수하기 쉽게 만들어준다.
Spring Web MVC는 DispatcherServlet을 중심으로 동작한다.
✔ 요청 흐름
1. 클라이언트가 HTTP 요청을 보냄.
2. DispatcherServlet이 요청을 받아 적절한 Controller로 전달.
3. Controller에서 요청을 처리한 후 Service Layer를 호출하여 비즈니스 로직을 수행.
4. 서비스에서 데이터를 가공한 후에 View Resolver를 통해 적절한 View(JSP, Thymeleaf 등)를 선택.
5. 응답을 생성해서 클라이언트에게 반환.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring MVC!";
}
}
✔ 실행 흐름:
/api/hello 경로로 요청이 들어오면 sayHello() 메서드 실행.
"Hello, Spring MVC!" 문자열을 반환.
✅ Servlet보다 유지보수가 쉬움
비즈니스 로직, 데이터 처리, UI가 분리되어 있어 코드 관리가 편리하다.
✅ Spring이 객체 생성을 관리 (IoC, DI)
Servlet에서는 객체를 직접 생성해야 하지만 Spring에서는 의존성 주입(DI)을 통해 자동으로 객체를 관리할 수 있음
✅ Spring Boot를 사용하면 Servlet 설정 없이 쉽게 웹 애플리케이션을 개발할 수 있다.
✅ 보안, 트랜잭션 관리 등 다양한 기능을 쉽게 적용
Spring Security를 통해 로그인, 인증, 권한 관리 기능을 쉽게 추가할 수 있다.
Spring Transaction을 통해 데이터베이스 트랜잭션을 간편하게 관리할 수 있다.