3월 06, 2024

Spring MVC, 템플릿 엔진 동작방식

1. Spring MVC 방식

지난 포스팅에서 Spring의 정적 컨텐츠 방식에 대하여 다루어보았다. 

https://www.programmingstory.com/2024/02/spring-boot.html

오늘은 한 단계 더 나아가서 Spring의 MVC 방식에 대하여 다루어보려고 한다. 

MVC는 모두가 알고 있겠지만 model, view, controller 방식을 지칭하며 기술면접이나 기술필기시험에 단골로 등장하는 개념이기도 하다. 하지만 Spring 초보자에게는 MVC 방식을 정확히 이해하기 어렵기에 오늘 한 번 자세히 다루어보려고 한다. 

2. Spring MVC diagram 



일단 스프링의 MVC 방식을 하나의 그림으로 정리하면 위와 같다. 


3. Spring MVC 소스 예제 

그리고 Controller java source와 html 파일이 하나 필요하여 두 가지 소스를 먼저 정리하고 방식을 설명해보도록 하겠다. 

 

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

@Controller
public class ExampleController {

    @GetMapping("example-mvc")
    public String ExampleMvc(@RequestParam("name")String name, Model model){
        model.addAttribute("name", name);
        return "example-template";
    }
}

 

먼저 예시로 만들어준 ExampleController이다. 

 

여기서 @GetMapping("example-mvc") 를 통해 

http://localhost:8080/example-mvc.html

url로 들어오게 되면 

 

내장된 Tomcat Server를 거쳐 Controller의 처리가 들어가게 된다. 

 

해당 메서드에서는 name이라는 parameter를 받고 있으므로 url에 name 도 포함하여 넣어주어야 한다. 

 

아니면 이렇게 whitelabel error page가 뜰 것이다. 

 

url을 통해 name parameter를 전달 받게 되면 model.addAttribute를 통해 model에도 name parameter를 전달해주게 되고 

return으로 example-template이라는 template을 반환한다. 

 

 

이렇게 되면

templates/example-template.html

이라는 경로의 template을 참고하게 되고 viewResolver를 통해 템플릿엔진 처리를 하게 된다. 

 

그러면 example-template.html 파일을 templates라는 폴더 아래 만들어주어야 한다. 

 

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

간단하게 위와 같이 html 을 만들어보았다. 

 

그러면 전달받은 name이라는 모델의 값이 html로 전달이 되는 것이다. 

 

그러면 위 name을 치환하여 html을 변환하고 이를 다시 웹 브라우저에 전달하여 변환된 html이 보여지는 것이다. 정적 컨텐츠로 보여주는 것과는 다른 부분이라고 할 수 있다. 

 



name=Tom이라는 parameter까지 url에 넣어서 전달하면 

이렇게 변환된 html이 web browser에 보여지는 것을 알 수 있다.

 

이렇게 해서 오늘은 간단한 Spring의 mvc 방식에 대하여 알아보았다.