반응형
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 구조에서 요청이 처리되는 순서
- Application(Service)을 사용하는 User가 Request를 보냄
- Spring의 Dispatcher Servlet이 요청을 받아 Controller에 전송
- Controller에서 비지니스 로직을 통해 DB에서 값을 받아서 Model에 넣음
- Model을 넣을 View의 이름을 배정 => View Name
- Model과 View Name을 묶은 ModelAndView를 View Resolver로 전송
- View Resolver에서 View Name을 통해 View를 가져오고 Model을 가져온 View에 넣음
- 완성된 View 반환
- View를 User에게 보여줌
간단한 MVC 예제
라이브러리 추가
- spring-boot-starter-web
- 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 구조 순서
- User가 GET /hello 요청을 보냄
- Spring의 Dispatcher Servlet이 요청을 받아 HelloController에 전송
- HelloController에서 name을 "Spring"이라고 정하고(비지니스 로직) Model에 넣음
- View Name = hello-page
- ModelAndView를 View Resolver로 전송
- View Resolver에서 hello-page를 가져오고 Model을 넣음 ( ${name} )
- 완성된 View 반환
- View를 User에게 보여줌
반응형
'Spring Boot > 문법 정리' 카테고리의 다른 글
[Spring Boot] DI, @Autowired, @RequiredArgsConstructor (0) | 2022.05.17 |
---|---|
[Spring Boot] 테스트 코드 작성 예제 (0) | 2022.05.12 |
[Spring Boot] @RestController, lombok (0) | 2022.04.29 |
[Spring Boot] 정적 페이지 생성 예제 (0) | 2022.04.26 |
[Spring Boot] 프로젝트 생성 및 실행, Java 버전 에러 해결 방법 (0) | 2022.04.26 |