본문 바로가기
프론트엔드

스프링 MVC 요청 처리 흐름으로 알아본 스프링 MVC 설계구조

by 느바 2025. 1. 26.
반응형

스프링 MVC 요청 처리 흐름으로 알아본 스프링 MVC 설계구조

1. 스프링 MVC 요청 처리 흐름

스프링 MVC는 "Front Controller 패턴"을 기반으로 하며, 모든 클라이언트 요청은 DispatcherServlet을 통해 중앙 집중식으로 처리됩니다.

요청 흐름 단계별 설명

  1. 클라이언트 요청 (Request)
    • 사용자가 웹 브라우저에서 특정 URL로 HTTP 요청을 보냅니다.
    • 예) GET /user/list
  2. DispatcherServlet (프론트 컨트롤러)
    • 클라이언트의 요청을 가장 먼저 받으며, 해당 요청을 처리할 적절한 컨트롤러를 찾기 위해 HandlerMapping을 호출합니다.
  3. HandlerMapping (요청 매핑 탐색)
    • URL 패턴에 따라 어떤 컨트롤러와 메서드가 호출될지 결정합니다.
    • 스프링에서는 @RequestMapping, @GetMapping, @PostMapping 등의 어노테이션을 통해 요청을 특정 메서드와 매핑합니다.
  4. HandlerAdapter (컨트롤러 실행 어댑터)
    • 컨트롤러를 실행할 수 있도록 적절한 호출 방식을 제공합니다.
    • 요청된 정보를 컨트롤러 메서드의 매개변수로 바인딩합니다.
  5. Controller (비즈니스 로직 처리)
    • 컨트롤러가 요청을 처리하고, 필요한 데이터를 Model 객체에 저장한 후, 뷰 이름을 반환합니다.
    • 예) return "userList";
  6. ViewResolver (뷰 이름을 물리적 경로로 변환)
    • 반환된 뷰 이름(userList)을 실제 템플릿 파일(JSP, Thymeleaf 등)의 경로로 매핑합니다.
    • 예) /WEB-INF/views/userList.jsp
  7. View (응답 화면 렌더링)
    • 뷰 템플릿에서 모델 데이터를 이용하여 최종 HTML 페이지를 생성합니다.
  8. DispatcherServlet (응답 반환)
    • 생성된 HTML 또는 JSON 데이터를 클라이언트에게 반환합니다.

2. 스프링 MVC 요청 처리 흐름 도표

아래 도표는 스프링 MVC 요청 처리 흐름을 시각적으로 나타낸 것입니다.

+-----------------------+
|      Client (웹 브라우저) |
+-----------------------+
            |
            v
+-----------------------+
|   DispatcherServlet   |   <<-- 프론트 컨트롤러
+-----------------------+
            |
            v
+-----------------------+
|     HandlerMapping    |   <<-- 요청을 컨트롤러와 매핑
+-----------------------+
            |
            v
+-----------------------+
|     HandlerAdapter    |   <<-- 컨트롤러 실행 준비
+-----------------------+
            |
            v
+-----------------------+
|       Controller      |   <<-- 비즈니스 로직 처리
+-----------------------+
            |
            v
+-----------------------+
|        Model          |   <<-- 데이터 저장
+-----------------------+
            |
            v
+-----------------------+
|      ViewResolver     |   <<-- 뷰 결정
+-----------------------+
            |
            v
+-----------------------+
|         View          |   <<-- 화면 렌더링 (JSP, Thymeleaf 등)
+-----------------------+
            |
            v
+-----------------------+
|  DispatcherServlet    |   <<-- 응답 반환
+-----------------------+
            |
            v
+-----------------------+
|       Client          |   <<-- 최종 HTML 전송
+-----------------------+

3. 스프링 MVC의 주요 컴포넌트 요약

구성 요소 설명
DispatcherServlet 요청을 받아서 적절한 컴포넌트로 위임
HandlerMapping URL과 컨트롤러를 매핑
HandlerAdapter 컨트롤러를 실행할 수 있도록 지원
Controller 요청을 처리하고 데이터를 생성
Model 뷰에 전달할 데이터를 저장
ViewResolver 뷰 이름을 물리적 경로로 변환
View 최종적으로 화면을 렌더링

4. 스프링 MVC의 요청 처리 예시 코드

@Controller
@RequestMapping("/user")
public class UserController {

    @GetMapping("/list")
    public String getUserList(Model model) {
        List<String> users = List.of("Alice", "Bob", "Charlie");
        model.addAttribute("users", users);
        return "userList";  // 뷰 이름 반환 (ViewResolver가 처리)
    }
}

위 코드를 통해 요청이 GET /user/list로 들어오면, 컨트롤러가 호출되어 사용자 목록 데이터를 모델에 담고 "userList"라는 뷰 이름을 반환합니다.

반응형