-
Spring MVC - 타임리프(Thymeleaf)에 대한 간단한 정리Spring/Spring MVC 2022. 1. 31. 23:01728x90반응형더보기
타임리프 메뉴얼
설정 방법(스프링 부트사용하지 않을 시)
타임리프(Thymeleaf)
타임리프는 컨트롤러가 전달하는 데이터를 이용해 동적으로 화면을 만들어주는 역할을 하는 뷰 템플릿 엔진이다. 타임리프가 갖는 대표적인 특징은 다음과 같다.
- 서버상에서 동작하지 않아도 HTML 파일의 내용을 바로 확인이 가능하다.
- 순수 HTML 구조를 유지한다.
특징
타임리프는 순수 HTML을 유지하기 때문에 Natural Template(내추럴 템플릿)이라고도 불린다. 서버를 가동하지 않으면 순수 HTML을, 서버를 구동하여 뷰 템플릿을 거쳐 동적으로 변경된 HTML을 확인할 수 있다. JSP같은 경우는 서버를 구동하지 않고 해당 파일을 열게 되면 JSP 소스코드와 HTML이 섞여있어서 정상적인 확인이 불가능했다. 즉 오직 서버를 통해서 JSP을 열어야 JSP 파일을 확인할 수 있었다. 반면에 타임리프는 화면 구성을 서버 가동없이 쉽게 파악할 수 있어 개발에 수정할 때마다 서버 재가동이 필요 없어지기 때문에 개발에 용이해진다.
위 이미지를 보면 타임리프는 순수 HTML파일을 유지하기 때문에 웹브라우저를 통해 해당 파일의 경로를 입력하면 화면이 잘 나온 것을 볼 수 있다. 반면에 JSP는 화면이 아닌 그냥 코드가 나타난 것을 볼 수 있다.
타임리프는 어떻게 순수 HTML파일을 유지하면서 동적 HTML 파일을 제공할 수 있을까?
간단하게 설명하자면 서버 가동없이 웹 브라우저를 이용해 해당 파일을 열게 되면 웹 브라우저는 타임리프가 사용하는 속성인 th:속성을 알지 못하기 때문에 타임리프 속성을 제외한 순수 HTML 속성으로 화면을 구성하여 순수 HTML파일을 유지할 수 있다. 반면에 서버가 가동이 되어 타임리프 뷰 템플릿 엔진을 이용하게 되면 서버 사이드에서 렌더링 되어 기존 HTML의 속성이 아닌 타임리프의 속성으로 대체되어 동적 HTML 파일을 제공할 수 있게된다.
반응형타임리프(Thymeleaf) 사용
타임리프 라이브러리 추가
Gradle - build.gradle
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
Maven - pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
반응형타임리프의 기본 경로
타임리프는 다음과 같이 기본 뷰 템플릿 경로로 다음과 같이 아래 코드가 자동으로 추가된다.
spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html
즉, 컨트롤러에서 String으로 반환을 하게 되면 기본 경로 패스가 붙게 된다.
@Controller public class ResponseViewController { @RequestMapping("/response-view-v2") public String responseViewV2(Model model) { model.addAttribute("data", "hello!!"); return "response/hello"; } }
/templates/response/hello.html
타임리프 문법
타임리프를 사용하기 위해서는 html 태그에 다음과 같이 추가해준다.
<html xmlns:th="http://www.thymeleaf.org">
대부분의 HTML 속성은 타임리프의 속성으로 쓰이는 th:html 속성으로 변경할 수 있다.
@{ URL 링크 } - URL 링크 표현식
- @{ URL 링크 } : 타임리프는 URL 링크를 사용하는 경우 @{...}를 사용한다.
- URL 링크 표현식을 사용하면 서블릿 컨텍스트가 자동으로 포함이 된다.
- 예시1)
th:href="@{/css/bootstrap.min.css}"
예시2)
th:href="@{/basic/items/{itemId}(itemId=${item.id}, query='test')}"
예시3) 리터럴 대체 문법을 사용해서 더 간단히 할 수 있다.
th:href="@{|/basic/items/${item.id}|}"
반응형| 리터럴 | - 리터럴 대체
- 타임리프에서 문자와 표현식 등은 분리되어 있기 때문에 더해서 사용해야 한다.
- 리터럴 대체 문법을 사용하면, 더하기 없이 편리하게 사용할 수 있다.
- 예시1)
<span th:text="'welcome to our application, ' + ${user.name} + '!' ">
<span th:text="|welcome to our application, ${user.name}!|">
예시2)
th:onclick="'location.href=' + '\'' + @{/basic/items/add} + '\''"
th:onclick="|location.href='@{/basic/items/add}'|"
${ 변수명 } - 변수 표현식
- 모델에 포함된 값이나, 타임리프 변수로 선언한 값을 조회할 수 있다.
- 프로퍼티 접근법을 사용 ( item.getPrice() -> item.price )
- 예시)
<td th:text="${item.price}">10000</td> ( 10000 대신 item.price 값이 들어간다. )
#{ 변수명 } - 외부 자원 변수 표현식
- 메시지, properties와 같은 외부 자원의 데이터를 조회
- 예시)
th:text="#{member.register}"
728x90반응형'Spring > Spring MVC' 카테고리의 다른 글
Spring MVC - 타임리프(Thymeleaf)가 제공하는 기본 객체와 편의 객체 (0) 2022.02.02 Spring MVC - 타임리프(Thymeleaf) 기본 기능 1(텍스트, 변수 표현식, 지역 변수) (0) 2022.02.02 Spring MVC - HTTP 메시지 컨버터 (0) 2022.01.30 Spring MVC - 응답 메시지를 만드는 방법 (정적 리소스, 뷰 템플릿, HTTP API 메시지 바디에 직접 입력) (0) 2022.01.29 Spring MVC - JSON으로 보낸 HTTP 요청 메시지 조회 (0) 2022.01.29