스프링 MVC

SEPTEMBER·2025년 2월 6일

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 흐름

  1. 클라이언트 요청이 DispatcherServlet으로 들어옴.
  2. HandlerMapping을 이용해 적절한 컨트롤러를 찾음.
  3. 컨트롤러(@Controller)에서 요청을 처리하고 Model을 반환함.
  4. ViewResolver가 어떤 View를 렌더링할지 결정함.
  5. 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)를 사용하면 완전한 리액티브 프로그래밍도 가능.

0개의 댓글