개발강의정리/Spring

[스프링 부트 개념과 활용] 4-9. 스프링 웹 MVC 7부: Thymeleaf

nineDeveloper 2019. 11. 11.
728x90

스프링 부트 개념과 활용

4. 스프링 부트 활용

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/springboot-concept-uses/tree/chap04-09-07-mvc-thymeleaf

 

freespringlecture/springboot-concept-uses

백기선님의 스프링 부트 개념과 활용 강의 내용 정리. Contribute to freespringlecture/springboot-concept-uses development by creating an account on GitHub.

github.com

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

스프링 부트 개념과 활용 - 인프런

스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다. 중급 프레임워크 및 라이브러리 Spring Spring Boot 온라인 강의

www.inflearn.com

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

9. 스프링 웹 MVC 7부: Thymeleaf

스프링 웹 MVC로 동적 컨텐츠를 생성하는 방법

스프링 부트가 자동 설정을 지원하는 템플릿 엔진

View, Code Generation, Email Template 등에 사용
기본적인 템플릿은 같은데 값들이 경우에 따라 달라지는 동적인 컨텐츠를 표현해야 하므로 사용

  • FreeMarker
  • Groovy
  • Thymeleaf
  • Mustache

JSP를 권장하지 않는 이유

JSP는 자동설정을 지원하지 않는데다가 SpringBoot가 지향하는 바와 달라서 권장하지 않음
SpringBoot는 기본적으로 독립적으로 실행가능한 임베디드 톰캣으로 빠르고 쉽게 만들어 배포하길 바람
JAR JSP에 대한 의존성을 넣으면 의존성 문제가 생기는 등 여러가지 제약사항으로 잘 사용하지 않음

Thymeleaf 사용하기

Thymeleaf 를 사용하면 테스트시 본문 확인이 가능하지만 JSP는 힘듬
실제 렌더링된 결과는 Servlet 엔진이 해야되는 것인데
Thymeleaf는 Servlet에 독립적인 엔진이기 때문에 View에 렌더링되는 결과를 확인할 수 있음

 

thymeleaf/thymeleafexamples-stsm

Spring Thyme Seedstarter Manager - Companion application for the "Thymeleaf + Spring 3" tutorial downloadable at the Thymeleaf website: http://www.thymeleaf.org/documentation.html - thym...

github.com

테스트 코드

View 이름과 Model만 확인하는 간단한 테스트

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

    @Autowired
    MockMvc mockMvc;

    @Test
    public void hello() throws Exception {
        // 요청 "/hello"
        // 응답
        // - 모델 name : freelife
        // - 뷰 이름 : hello
        mockMvc.perform(get("/hello"))
                .andExpect(status().isOk())
                .andDo(print())
                .andExpect(view().name("hello"))
                .andExpect(model().attribute("name", is("freelife")));
    }
}

Controller 코드

@Controller
public class SampleController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("name", "freelife");
        return "hello";
    }
}

resources/template 폴더에 hello.html 생성

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Title</title>
</head>
<body>
    <h1 th:text="${name}">Name</h1>
</body>
</html>
728x90

댓글

💲 추천 글