반응형

MVC 란?

  • Model View Controller의 약자
  • Application이 서비스하는 디자인 패턴 중 하나
  • Spring Boot도 MVC 디자인 패턴을 사용함

Model

  • DB와 Controller 사이에서 데이터 전달
  • Application이 포함해야 될 데이터가 무엇인지 정의
  • View 또는 Controller에 대한 정보를 알면 안됨

View

  • 레이아웃과 화면 처리
  • Application의 데이터를 보여주는 방식 정의
  • Controller와 소통
  • Model 또는 Controlle에 대한 정보를 알면 안됨
  • JSP, Thymeleaf, Groovy 등의 Template Engine이 있음

Controller

  • View와 Model 사이에서 연결하는 역할
  • View와 Model에 대한 정보를 알아야 함
  • Application 사용자의 입력에 대한 응답으로 Model 및 View를 업데이트

MVC 구조에서 요청이 처리되는 순서

  1. Application(Service)을 사용하는 User가 Request를 보냄
  2. Spring의 Dispatcher Servlet이 요청을 받아 Controller에 전송
  3. Controller에서 비지니스 로직을 통해 DB에서 값을 받아서 Model에 넣음
  4. Model을 넣을 View의 이름을 배정 => View Name
  5. Model과 View Name을 묶은 ModelAndView를 View Resolver로 전송
  6. View Resolver에서 View Name을 통해 View를 가져오고 Model을 가져온 View에 넣음
  7. 완성된 View 반환
  8. View를 User에게 보여줌

간단한 MVC 예제

라이브러리 추가

  1. spring-boot-starter-web
  2. spring-boot-starter-thymeleaf

프로젝트 구조

HelloController.java

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        String name = "Spring";
        model.addAttribute("name", name);
        return "hello-page";
    }
}

hello-page.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>Hello</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
  <p th:text="'Hello ' + ${name}" >Hello</p>
</body>
</html>

실행 결과

이 프로젝트에서의 MVC 구조 순서

  1. User가 GET /hello 요청을 보냄
  2. Spring의 Dispatcher Servlet이 요청을 받아 HelloController에 전송
  3. HelloController에서 name을 "Spring"이라고 정하고(비지니스 로직) Model에 넣음
  4. View Name = hello-page
  5. ModelAndView를 View Resolver로 전송
  6. View Resolver에서 hello-page를 가져오고 Model을 넣음 ( ${name} )
  7. 완성된 View 반환
  8. View를 User에게 보여줌
반응형

↓ 클릭시 이동

복사했습니다!