새발블로그

[Spring] Spring MVC 본문

Server/Spring

[Spring] Spring MVC

EUG 2025. 7. 8. 23:07

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 렌더링