본문 바로가기
Spring Study/MVC 패턴

[MVC 패턴] 타임리프 (Thymeleaf)

by 정재인 2023. 8. 16.

타임리프 (Thymeleaf)

타임리프는 컨트롤러가 전달하는 데이터를 이용해 동적으로 화면을 만들어주는 역할을 하는 뷰 템플릿 엔진이다.

 

 

 


 

타임리프 특징

서버 사이드 HTML 렌더링 (SSR)

- 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링하는 용도로 사용된다.

 

내츄럴 템플릿

- 타임리프는 순수 HTML을 최대한 유지하려는 특징이 있다.

- 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 의미한다.

 

스프링 통합 지원

- 타임리프는 스프링과 자연스럽게 통합되고, 스프링의 다양한 기능을 편리하게 사용할 수 있게 지원한다.

 

 

타임리프 기본 기능

타임리프 사용 선언

<html xmlns:th="http://www.thymeleaf.org">

 

기본 표현식

  • 간단한 표현:
    • 변수 표현식: ${. . .}
    • 선택 변수 표현식: *{. . .}
    • 메시지 표현식: #{. . .}
    • 링크 URL 표현식: @{. . .}
    • 조각 표현식: ~{. . .}
  • 리터럴
    • 텍스트: 'one text', 'Another one!' ...
    • 숫자: 0, 34, 3.0, 12.3 ...
    • 불린: true, false
    • 널: null
    • 리터럴 토큰: one, sometext, main ...
  • 문자 연산
    • 문자 합치기: +
    • 리터럴 대체: |The name is ${name}|
  • 산술연산
    • Binary operators: +, -, *, /, %
    • Minus sign (unary operator): -
  • 불린 연산
    • Binary operators: and, or
    • Boolean negation (unary operator): !, not
  • 비교와 동등
    • 비교: >, <, >=, <= (gt, lt, ge, le)
    • 동등: ==, != (eq, ne)
  • 조건 연산
    • If-then: (if) ? (then)
    • If-then-else: (if) ? (then) : (else)
    • Default: (value) ?: (defaultvalue)
  • 특별한 토큰
    • No-Operation: _

 

* 리터럴 작성시 주의사항

<span th:text="hello world!"></span>      X

<span th:text="'hello world!'"></span>    O

문자 리터럴은 원칙상 '   '로 감싸야 한다. 중간에 공백이 있어 하나의 의미있는 토큰으로도 인식되지 않는다.

 

 

* 리터럴 대체

<span th:text="|hello ${data}|">

마지막의 리터럴 대체 문법을 사용하면 마치 템플릿을 사용하는 것처럼 편리하다.

 

 


 

텍스트 

HTML의 콘텐츠(content)에 테이터를 출력할 때는 th:text를 사용한다.

☞ <span th:text="${data}">

 

HTML 태그의 속성이 아니라 HTML 컨텐츠 영역 안에서 직접 데이터를 출력하고 싶으면 [[. . .]]을 사용한다

☞ [[${data}]]

 

 

 

타임리프 유틸리티 객체들

#message : 메시지, 국제화 처리

#uris : URI 이스케이프 지원

#dates : java.util.Date 서식 지원

#calendars : java.util.Calendar 서식 지원

#temporals : 자바8 날짜 서식 지원

#numbers : 숫자 서식 지원

#strings : 문자 관련 편의 기능

#objects : 객체 관련 기능 제공

#bools : boolean 관련 기능 제공

#arrays : 배열 관련 기능 제공

#lists , #sets , #maps : 컬렉션 관련 기능 제공

#ids : 아이디 처리 관련 기능 제공, 뒤에서 설명

 

 

반복

- 타임리프에서 반복은 th:each를 사용한다.

- <tr th:each="user : ${users}">

- th:each는 List뿐만 아니라 배열 java.util.Iterable, java.util.Enumeration을 구현한 모든 객체를 반복에 사용할 수 있다.

 

 

if, unless

- 타임리프는 해당 조건이 맞지 않으면 태그 자체를 렌더링하지 않는다.

- 만약 다음 조건이 false인 경우 <span>. . .</span> 부분 자체가 렌더링 되지 않고 사라진다.

- <span th:text="'미성년자'" th:if="${user.age lt 20}">

댓글