MVC란 Model, View, Controller를 의미한다. 애플리케이션이나 프로젝트를 구성할 때 그 구성요소를 세가지 역할로 구분한 것이다.
View는 사용자가 보는 화면으로 text, inputbox, textarea가 있는 인터페이스 요소를 나타낸다. 즉, 데이터를 화면에 보여주는 담당이다.
Model은 애플리케이션의 데이터를 나타낸다. 그래서 View는 Model의 데이터를 랜더링 하여 사용한다.
Controller는 앞에서 말한 화면(View)과 데이터(Model)을 잇는 역할을 한다. 사용자가 화면에서 데이터를 활용해 조회하고 수정하고 저장하는 등 이러한 이벤트들을 처리한다.
그래서 View는 화면을 그리는 것에 집중하고, Model,Controller는 비즈니스 로직 또는 내부로직 처리에 집중한다!
@Controller
public class HelloController {
@GetMapping("hello-name")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'안녕하세요 ' + ${name}">안녕하세요!</p>
</body>
</html>
위의 소스를 보면 Controller와 내부에 Model 그리고 Html(View)가 있다.
소스에 대한 부연설명을 하자면,
1. @GetMapping("hello-name")이라고 있는데 이 의미는, GET방식이고 "hello-name"으로 호출하는 것으로 정의해놓은 것이다. (예시 url: http://localhost:8080/hello-name?name=jin2rang )
2. @RequestParam(value="",required="")는 호출할 때 파라미터를 정의한 것이다.
required의 default는 true이고, 파라미터가 필수가되어야하는 의미이기 때문에 false를 넣어주면 있어도 없어도 동작할 수 있다.
소스에서 보면 @RequestParam("name") String name으로 되어있다. 즉, 파라미터를 name라는 key로 String 데이터를 받겠다 라는 의미다. 그래서 실행하는 url을 보면 name=jin2rang으로 호출하고, 데이터 처리를 할 때는 jin2rang이라는 데이터가 들어와 동작하게되는 것이다.
3. 템플릿엔진이다.
name이라는 데이터가 넘어왔을 때 '안녕하세요, jin2rang'이 보여지고 만약 데이터가 없다면 그냥 '안녕하세요!'가 보여진다. (서버없이 html을 볼 때 보여지는 부분을 작성해 놓은 것이다.)
서버를 이용하여 템플릿엔진을 동작하면 컨트롤러에서 넘어온 데이터로 데이터가 치환되어 동적으로 변경된다!
https://jin2rang.tistory.com/entry/Spring-Boot-thymeleaf-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%97%94%EC%A7%84
* 동작원리
1. Get요청
http://localhost:8080/hello-name?name=jin2rang
스프링 프로젝트에서 해당 컨트롤러를 생성한 후에, 브라우저에서 작성한 주소를 호출하는 것이다.
2. 내장톰캣서버에 요청 후 스프링컨테이너에 전달한다.
3. 스프링 컨테이너에서는 HelloController에 맵핑되어있는 것을 확인하고 hello-template에 모델을 리턴한다.
4. ViewResolver가 리턴한 hello-template을 찾아서 템플린엔진에게 처리해달라고 요청한다.
(ViewResolver는 화면을 찾아주고, 템플릿엔진을 연결시켜주는 역할을 한다.)
4. 템플릿 엔진은 동적으로 넘어온 데이터를 치환하여 변경하고, html로 변환하여 전달한다.
'Spring > Spring Boot 기초' 카테고리의 다른 글
Spring Boot - 웹개발 기초 - ① 정적컨텐츠 (0) | 2022.06.27 |
---|---|
Spring Boot 기초 - 라이브러리 살펴보기 (0) | 2022.06.27 |
Spring Boot - thymeleaf ( 템플릿 엔진 ) (0) | 2022.06.25 |
Spring Boot - Welcome Page 만들기 (0) | 2022.06.25 |
Spring Boot - Import projects (0) | 2022.06.25 |