새발블로그
[Spring] Spring MVC 본문

1. Spring MVC 프로젝트의 구조
스프링 MVC는 Model 2 아키텍처 기반으로 웹 애플리케이션을 구성한다.
- Model: 비즈니스 로직 처리 (Service, Repository)
- View: 사용자에게 보여지는 화면 (JSP, Thymeleaf 등)
- Controller: 요청 받고 응답을 조작하는 로직
Controller는 사용자의 요청을 받고, Model을 통해 처리한 결과를 View로 전달한다.
2. 스프링 MVC 구성 요소와 흐름 요약
전체 요청 처리 순서
[요청] → Filter
→ DispatcherServlet
→ HandlerMapping
→ HandlerInterceptor (선택)
→ Controller
→ Service
→ Repository (DB 접근)
→ ViewResolver
→ View (JSP, HTML 등)
→ [응답]
3. 주요 컴포넌트 설명
| 구성 요소 | 역할 설명 |
| Filter | 웹 애플리케이션 전역 필터링 (인코딩, 보안, 로깅 등) DispatcherServlet 이전에 실행됨 |
| DispatcherServlet | 스프링 MVC의 프론트 컨트롤러. 모든 요청을 가장 먼저 받음 이후 흐름을 컨트롤 |
| HandlerMapping | 요청 URL에 맞는 Controller 메서드를 찾아줌 |
| HandlerInterceptor | 컨트롤러 실행 전/후에 수행되는 추가 작업 (ex. 인증, 세션 체크) |
| Controller | 실제 요청을 받아 비즈니스 로직(Service 호출)을 실행 |
| Service | 실제 비즈니스 로직 처리, Repository를 호출하여 DB 조작 |
| Repository (DAO) | DB에 접근하여 CRUD 수행 (MyBatis, JPA 등 사용) |
| ViewResolver | Controller가 반환한 논리 뷰 이름 → 물리적 뷰 경로로 변환 |
| View (JSP 등) | 렌더링된 화면을 사용자에게 응답으로 반환 |
4. InternalResourceViewResolver 설정 예시
View 이름을 JSP 파일로 매핑할 때 사용하는 설정입니다.
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(JstlView.class);
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
registry.viewResolver(resolver);
예: 컨트롤러가 "home"을 리턴하면 → /WEB-INF/views/home.jsp로 포워딩
5. 흐름 예시
GET /product?no=1001
↓
DispatcherServlet
↓
HandlerMapping → ProductController.show()
↓
Service → ProductService.getProduct(1001)
↓
Repository → DB에서 Product 정보 조회
↓
Model에 데이터 담기
↓
ViewResolver → /WEB-INF/views/product.jsp
↓
View → 브라우저에 HTML 렌더링
'Server > Spring' 카테고리의 다른 글
| [Spring] Spring + MyBatis (0) | 2025.09.22 |
|---|---|
| [Spring] Spring 어노테이션 (0) | 2025.07.11 |
| [Spring] Bean Scope & 생명주기 (0) | 2025.07.08 |
| [Spring] 의존성 주입 (Dependency Injection) (0) | 2025.07.08 |
| [Spring] Component Scan (컴포넌트 스캔) (0) | 2025.07.08 |