7. MVC와 템플릿 엔진

MVC와 템플릿 엔진

MVC : Model, View, Controller

Controller

@Controller
public class HelloController {
        @GetMapping("hello-mvc")
        public String helloMvc(@RequestParam("name") String name, Model model) {
                model.addAttribute("name", name);
                return "hello-template";
        }
}

View (resources/template/hello-template.html)

<html xmlns:th="<http://www.thymeleaf.org>">
        <body>
                <p th:text="'hello ' + ${name}">hello! empty</p>
        </body>
</html>

과거에는 컨트롤러와 뷰가 따로 분리되어있지 않았음. 뷰에서 모든걸 다했다 (JSP기반에서 ← 소위 모델 1 방식이라고 부름)

지금은 MVC 스타일로 많이함.

우리가 프론트엔드할때 관심사를 분리하라는 얘기를 많이 듣는다. 역할과 책임이란말도 들었을 거다.

VIEW는 그냥 화면을 그리는데 모든 역량을 집중해야한다. 그리고 컨트롤러나 모델과 관련된 부분은 비즈니스 로직과 관련이 있거나 내부적인걸 처리하는데 집중해야 함.

그래서 모델, 뷰, 컨트롤 로 쪼갬

컨트롤러 하나 만든다.

템플릿 엔진← html을 막 바꿔준다.

여기서 thymeleaf 템플릿 엔진의 장점이 뭐냐면 html을 쓰고 서버없이 그 파일을 바로 열어봐도 껍데기를 볼 수 있다.

근데 이게 템플릿 엔진으로 동작을 하게 되면 'hello ' + ${name} 여기있는 값으로 hello! empty대신 치환된다.

이제 실행 시켜보면

에러 발생한다.

컨트롤러의 string parameter에 name을 넣어줘야한다고 한다.

기본적으로 required는 디폴트로 true기 때문에 반드시 주소창에서 값을 넣어줘야 한다.

이게 http에서 get방식으로 파라미터를 넘겨줄 수 있다.

컨트롤러에서 name은 spring!으로 바뀌고 model안의 name도 spring!으로 바뀌면서 모델에 담긴다. 그리고 hello-template으로 넘어가면

여기서 name이 spring!으로 바뀌게 된다. 여기서 &{} 이건 model에서 값을 꺼내는 거다. 모델의 key 값이 name인 곳에서 빼내서 치환해 준다.

여기서 viewResolver는 화면과 관련한 해결자이다. 얘는 view를 찾아주고 템플릿 엔진을 연결 시켜 준다.

참고로 정적일때는 마지막에 뷰리졸버가 HTML을 변환해주지 않고 그대로 반환해줬고, 지금과 같은 템플릿 엔진에서는 변환을 해서 웹브라우저에 넘겨준다.

 

출처 : 인프런의 김영한 선생님 강의를 정리한 글입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

'Java > 스프링 입문' 카테고리의 다른 글

9. 비즈니스 요구사항 정리  (0) 2021.06.04
8. API  (0) 2021.06.04
6. 정적 컨텐츠  (0) 2021.06.04
5. 빌드하고 실행하기  (0) 2021.06.04
4. View 환경설정  (0) 2021.06.04

댓글

Designed by JB FACTORY