[SPRING] MVC 란❓

수경·2025년 3월 22일

SpringFrameWork

목록 보기
6/24
post-thumbnail

MVC 란❓

Spring MVC(Spring Model-View-Controller)는 웹 애플리케이션을 효과적으로 개발할 수 있도록 지원하는 프레임워크

  • MVC 패턴을 기반으로 동작
  • 클라이언트(브라우저) 요청을 처리하고 응답을 반환하는 구조
  • Controller, Service, DAO, View 로 나누어 개발

MVC 구조도

클라이언트 (브라우저)  
       ↓  
📩 1. 요청 (Request)  
       ↓  
🌐 DispatcherServlet (프론트 컨트롤러)  
       ↓  
🛤 2. 핸들러 매핑 (HandlerMapping)  
       ↓  
🎮 3. 컨트롤러 (Controller)  
       ↓  
🗂 4. 서비스 (Service)  
       ↓  
💾 5. DAO (Data Access Object)  
       ↓  
🗄 6. 데이터베이스 (DB)  
       ↓  
📤 7. 결과 반환 (Model)  
       ↓  
🎨 8. 뷰 리졸버 (ViewResolver)  
       ↓  
📜 9. 화면 (JSP, HTML)  
       ↓  
🎉 클라이언트 응답 (Response)  

MVC 흐름

Client (User)

  • 사용자가 웹 브라우저나 HTTP 클라이언트를 통해 요청을 보낸다.

예를 들어, URL로 GET, POST 요청을 보내거나 폼을 제출한다.

DispatcherServlet

  • Spring MVC의 핵심 역할을 하며 프론트 컨트롤러 역할을 한다.
    사용자가 보낸 요청을 가장 먼저 받아들이고, 요청을 처리할 수 있는 적절한 Controller를 찾아서 전달 한다.

모든 요청은 DispatcherServlet을 거쳐서 처리된다.

HandlerMapping

  • DispatcherServlet이 요청을 받으면 HandlerMapping을 통해 어떤 Controller가 이 요청을 처리할지 결정한다.

@RequestMapping , @GetMapping , @PostMapping 등의 어노테이션을 통해 URL 패턴과 매핑된 Controller 메서드를 찾는다.

Controller

Controller는 요청을 받아 비즈니스 로직을 처리하고 결과를 반환한다.
@Controller 또는 @RestController 로 정의되며, @RequestMapping 등의 어노테이션으로 URL을 매핑(연결)한다.

Controller는 Service와 연동하여 비즈니스 로직을 처리하고, Model에 데이터를 담아 View에 전달한다.

Model (Business Logic)

Model은 비즈니스 로직을 처리하는 부분으로, 주로 Service 계층에 해당한다.
비즈니스 로직을 실행하여 필요한 데이터를 Controller에 반환한다.
DAO를 통해 데이터베이스와 연동할 수도 있다.

View

View는 데이터를 어떻게 표현할지 정의하는 부분이다.
Controller에서 전달된 Model 데이터를 View에서 사용하여 최종적으로 사용자에게 HTML 형식으로 결과를 보여준다.
즉, 사용자에게 화면을 보여준다.

MVC 요청 처리 과정 🌟

  1. 사용자가 DispatcherServlet에 URL로 접근하여 해당 정보를 요청한다.
GET http://localhost:8080/user/list
  1. HandlerMapping에서 해당 요청에 대해 매핑된 컨트롤러가 있는지 요청한다.
@Controller
@RequestMapping("/user") 
public class UserController {
    @GetMapping("/list")  // "/user/list" 요청을 처리할 컨트롤러 메서드
    public String userList(Model model) {
        model.addAttribute("users", List.of("Alice", "Bob", "Charlie"));
        return "userList";  // View 이름 반환
    }
}
  • HandlerMapping은 /user/list 요청이 UserController의 userList() 메서드와 연결되어 있음을 확인한다.
  1. 매핑된 컨트롤러에 대해 처리를 요청한다.
@GetMapping("/list")
public String userList(Model model) {
    model.addAttribute("users", List.of("Alice", "Bob", "Charlie"));  // 데이터 저장
    return "userList";  // View 이름 반환
}
  • Model 객체에 "users"라는 데이터를 추가하고, userList라는 View 이름을 반환한다.
  1. 컨트롤러가 클라이언트의 요청을 처리한 결과와 View 이름을 ModelAndView에 저장하여
    DispatcherServlet으로 반환한다.
@GetMapping("/list")
public ModelAndView userList() {
    ModelAndView mav = new ModelAndView("userList"); // View 이름 설정
    mav.addObject("users", List.of("Alice", "Bob", "Charlie")); // 데이터 추가
    return mav;
}
  1. DispatcherServlet에서는 컨트롤러에서 보내온 View 이름을 ViewResolver로 보내 View를 요청한다.
@Bean
public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
}
  • userList → /WEB-INF/views/userList.jsp 로 변환
  1. ViewResolver는 요청한 View를 보낸다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
    <title>User List</title>
</head>
<body>
    <h2>User List</h2>
    <ul>
        <c:forEach var="user" items="${users}">
            <li>${user}</li>
        </c:forEach>
    </ul>
</body>
</html>
  1. View의 처리 결과를 DispatcherServlet으로 보낸다.
<html>
<head>
    <title>User List</title>
</head>
<body>
    <h2>User List</h2>
    <ul>
        <li>Alice</li>
        <li>Bob</li>
        <li>Charlie</li>
    </ul>
</body>
</html>
  1. DispatcherSerlvet은 최종 결과를 사용자로 전송한다.

🎯 한 줄 요약!

DispatcherServlet는 요청을 받아서 컨트롤러로 보내고, 결과를 사용자에게 돌려주는 역할을 한다! 🚀

profile
개발 공부중•••

0개의 댓글