[Spring Boot #16] 스프링 웹 MVC : Thymeleaf 템플릿

2021. 3. 15. 03:40 Spring Framework/Spring boot #2

| Thymeleaf란?

  • Thymeleaf는 스프링 부트가 자동 설정을 지원하는  웹 템플릿 엔진입니다. HTML문서에 HTML5 문법으로 서버쪽 로직을 수행하고 적용시킬 수 있습니다.
  • HTML 디자인에 전혀 영향을 미치지 않고 웹 템플릿 엔진을 통해 HTML을 생성할 수 있습니다. 
  • 독자적으로 HTML을 생성하기 때문에 테스트 시 렌더링 결과를 확인하기 좋습니다.

 

| Thymeleaf 스프링 부트에서 사용하기

 

프로젝트 구조

+---src
| +---main
| | +---java
| | | \---com
| | | \---tutorial
| | | \---sptringbootmvc
| | | SampleController.java
| | | SpringBootMvcApplication.java
| | |
| | \---resources
| | | application.properties
| | |
| | +---static
| | \---templates
| | hello.html
| |
| \---test
| \---java
| \---com
| \---tutorial
| \---sptringbootmvc
| \---user
| SampleControllerTest.java

 

테스트 코드

@RunWith(SpringRunner.class)
@WebMvcTest(SampleController.class)
public class SampleControllerTest {

    @Autowired
    MockMvc mockMvc;

    @Test
    public void hello() throws Exception {
        /*
        * 요청 "/hello"
        * 응답
        * 모델 name : saelobi
        * 뷰 이름 : hello
        * */
        mockMvc.perform(get("/hello"))
                .andExpect(status().isOk())
                .andDo(print())
                .andExpect(view().name("hello"))
                .andExpect(model().attribute("name", is("saelobi")))
                .andExpect(content().string(containsString("saelobi")));
    }
}
  • 위 테스트 코드는 view, model, 그리고 Thymeleaf 템플릿에서 만들어진 HTML 컨텐츠 문서를 확인하는 테스트입니다.
  • 요청을 /hello 보냈을 때 뷰와 모델 네임이 각각 hello, saelobi를 반환하는 것을 체크하는 테스트입니다.

 

소스 코드

@SpringBootApplication
public class SpringBootMvcApplication {

    public static void main(String[] args) {
        SpringApplication.run(SptringBootMvcApplication.class, args);
    }

}
@Controller
public class SampleController {

    @GetMapping("/hello")
    public String hello(Model model){
        model.addAttribute("name", "saelobi");
        return "hello";
    }
}
  • Model 객체에 속성값 name: saelobi를 추가한 후 반환합니다.
  • 이 Model 객체에 포함된 값을 통해 Thymeleaf 템플릿 엔진이 해당 템플릿에서 명시한 값을 변환합니다.

 

hello.html

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1 th:text="${name}">Name</h1>
</body>
</html>
cs

 

  • xmlns:th="http://www.thymeleaf.org" 를 명시해야 템플릿이 제대로 렌더링됩니다.
  • th:text="${name}"에서 Model에서 넘어온 값을 변환합니다.

 

 

참고자료 : https://www.inflearn.com/course/스프링부트



출처: https://engkimbs.tistory.com/774?category=767865 [새로비]