티스토리 뷰
목차
✅1. Spring MVC란?
Model-View-Controller 아키텍처를 기반으로 하는 웹 프레임워크
- Model : 데이터와 비즈니스 로직
- View : 사용자에게 보여지는 UI
- Controller : 사용자 요청을 받고 적절한 응답을 돌려주는 역할
2. 요청 처리 흐름 한눈에 보기
Client
↓
DispatcherServlet
↓
HandlerMapping
↓
HandlerAdapter
↓
Controller
↓
ModelAndView
↓
ViewResolver
↓
View (JSP, Thymeleaf 등)
↓
Response to Client
3. DispatcherServlet : Spring MVC의 핵심 진입점
web.xml 또는 Spring Boot에서는 자동 등록되는 Front Controller
@WebServlet(name = "dispatcherServlet", urlPatterns = "/")
public class DispatcherServlet extends FrameworkServlet {
// 요청을 중앙에서 받아 처리함
}
📌 역할
- 모든 요청을 받음
- 알맞은 Controller를 찾고 실행함
- 반한된 데이터를 View로 변환해서 응답
4. HandlerMapping : 어떤 컨트롤러가 처리할까?
URL 요청에 대해 어떤 Handler(= 컨트롤러 메서드)를 호출할지 결정
- @RequestMapping 기반으로 매핑된 컨트롤러 목록을 보유
- 요청 URL에 가장 적합한 핸들러를 찾아 반환
HandlerExecutionChain handler = handlerMapping.getHandler(request);
5. HandlerAdapter : Handler를 실행할 수 있는 Adapter 선택
찾은 Handler를 실제로 실행할 수 있도록 도와주는 어댑터
- Controller가 어떤 타입이든 실행 가능하도록 추상화
- @Controller, @RestController, HttpRequestHandler, SimpleController 등 다양한 핸들러 처리 가능
6. Controller : 비즈니스 로직 수행
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("msg", "Hello, Spring!");
return "helloView";
}
- 요청 처리 후 View 이름 또는 데이터를 반환
- 반환값은 ModelAndView 또는 ResponseEntity, @ResponseBody
7. ModelAndView : 모델과 뷰 정보 담는 객체
ModelAndView mav = new ModelAndView("helloView");
mav.addObject("msg", "Hello, Spring!");
return mav;
- View 이름 + Model 데이터를 함께 담음
8. ViewResolver : 어떤 뷰를 보여줄까?
ViewResolver는 View 이름을 기반으로 실제 뷰 파일(JSP, Thymeleaf 등)을 찾아 반환
InternalResourceViewResolver → /WEB-INF/views/helloView.jsp
- 여러 ViewResolver를 체인으로 등록 가능
9. View : 최종 응답 처리 (렌더링)
JSP, Thymeleaf, JSON 등 클라이언트에게 실제 보여지는 결과물 생성
- 모델 데이터를 바탕으로 HTML 또는 JSON 생성
- @ResponseBody나 RestController의 경우 -> ViewResolver 없이 JSON 직접 반환
10. Spring MVC 요청 흐름 예제
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
return ResponseEntity.ok(userService.findById(id));
}
- /users/1 요청 도착
- DispatcherServlet이 요청 받음
- HandlerMapping이 getUser() 컨트롤러 메서드 매핑
- HandlerAdapter가 메서드 실행
- 컨트롤러 로직 실행 -> User 객체 반환
- JSON 형태로 변환 후 응답
11. 실무 포인트
| 항목 | 설명 |
| URL 패턴 충돌 | 동일 URL에 대한 중복 매핑 피해야 함 |
| ViewResolver | Thymeleaf/JSP 등 우선순위 설정 필요 |
| REST API | @RestController, @ResponseBody는 ViewResolver 패스 |
| 인터셉터/필터 | DispatcherServlet 전/후단에 위치, 요청 전처리/후처리 가능 |
| 예외 처리 | @ControllerAdvice + ExceptionHandler 사용 |
✅ 마무리 요약
| 단계 | 컴포넌트 | 역할 요약 |
| 1 | DispatcherServlet | 모든 요청의 진입점 |
| 2 | HandlerMapping | 어떤 컨트롤러를 실행할지 결정 |
| 3 | HandlerAdapter | 핸들러 실행을 지원 |
| 4 | Controller | 요청 처리 및 데이터 생성 |
| 5 | ViewResolver | View 이름 -> 실제 뷰 변환 |
| 6 | View | HTML/JSON 결과 응답 생성 |
'IT > Spring' 카테고리의 다른 글
| Spring Scheduler & Async 처리 흐름 - 정기 작업과 비동기 실행 완전 정복 (0) | 2025.07.15 |
|---|---|
| Spring Boot 자동 설정 원리 완전 정복 - @EnableAutoConfiguration 내부에서 벌어지는 일 (0) | 2025.06.25 |
| 🔐 Spring Security & JWT 인증 흐름 완전 정복 - 로그인 인증부터 토큰 발급, 필터 구조 (0) | 2025.06.24 |
| ⚠️Spring 예외 처리 완전 정복 - @ControllerAdvice, @ExceptionHandler, 그리고 실무 예외 전략 (0) | 2025.06.18 |
| 🔄 Spring의 @Transactional 완전 정복 - 개념, 원리, 동작 방식, 트러블 슈팅까지 (0) | 2025.06.11 |