MVC 패턴
Spring MVC는 Model-View-Controller (MVC) 패턴을 기반으로 웹 애플리케이션을 구조화함
- Model (모델): 데이터와 비즈니스 로직을 처리하는 부분 (ex. Service, Repository, DTO, Entity 등)
- View (뷰): 사용자에게 데이터를 표시하는 부분 (ex. Thymeleaf, JSP, HTML, JSON 등)
- Controller (컨트롤러): 사용자 요청을 받고, Model을 호출한 후, 결과를 View로 전달하는 역할
DispatcherServlet (디스패처 서블릿)
- Spring MVC의 진입점
- 모든 HTTP 요청을 가로채서 적절한 컨트롤러로 전달함
- web.xml 또는 @SpringBootApplication을 통해 자동으로 등록됨
DispatcherServlet 흐름
- 클라이언트 요청이 DispatcherServlet으로 들어옴.
- HandlerMapping을 이용해 적절한 컨트롤러를 찾음.
- 컨트롤러(@Controller)에서 요청을 처리하고 Model을 반환함.
- ViewResolver가 어떤 View를 렌더링할지 결정함.
- View가 클라이언트에게 HTML, JSON 등의 응답을 보냄.
주요 어노테이션
1. Controller 관련
- @Controller: 클라이언트 요청을 처리하는 클래스에 사용
- @RestController: JSON 응답을 반환하는 컨트롤러 (REST API에 사용)
- @RequestMapping: URL을 특정 메서드에 매핑
- @GetMapping, @PostMapping, @PutMapping, @DeleteMapping: HTTP 메서드별 요청 매핑
2. 데이터 바인딩 및 검증
- @RequestParam: 쿼리 파라미터를 메서드 매개변수로 바인딩
- @PathVariable: URL 경로 변수를 메서드 매개변수로 바인딩
- @ModelAttribute: 폼 데이터를 객체에 자동 매핑
- @RequestBody: JSON 요청 본문을 객체로 변환
- @ResponseBody: 객체를 JSON 형태로 변환해 반환
- @Valid: 데이터 검증
HandlerInterceptor (핸들러 인터셉터)
- 요청 전/후에 공통 작업을 수행하는 기능
- 로그인 체크, 로깅 등에 사용됨
- preHandle(), postHandle(), afterCompletion() 메서드 지원
Exception Handling (예외 처리)
- @ExceptionHandler: 특정 예외를 처리하는 메서드
- @ControllerAdvice: 전역적으로 예외를 처리하는 클래스
- ResponseEntity를 이용해 JSON 형태로 에러 응답을 반환 가능
Spring MVC의 비동기 처리
- @Async: 비동기 메서드 실행
- DeferredResult, Callable: 비동기 응답을 처리하는 방법.
- WebFlux (spring-boot-starter-webflux)를 사용하면 완전한 리액티브 프로그래밍도 가능.