66krap 2024. 1. 23. 23:12

타임리프 특징

  • 서버 사이드 HTML 렌더링 (SSR)
  • 네츄럴 템플릿
    더보기

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

    타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹 브라우저에서 파일을 직접 열어도 내용을 할 수 있고, 서버를 통해서 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다.

    JSP를 포함한 다른 뷰 템플릿들은 해당 파일을 열면, 예를 들어서 JSP파일 자체를 그대로 웹 브라우저에서 열어보면 JSP 소스코드와 HTML이 뒤죽박죽 섞여서 웹 브라우저에서 정상적인 HTML 결과를 확인할 수 없다.

    오직 서버를 통해서 JSP가 렌더링 되고 HTML 응답 결과를 받아야 화면을 확인할 수 있다.

    반면에 타임이르포 작성된 파일은 해당 파일을 그대로 웹 브라우저에서 열어도 정상적인 HTML 결과를 확인할 수 있다.

    물론 이러한 경우 동적으로 결과가 렌더링 되지는 않지만,

    HTML 마크업 결과가 어떻게 되었는지는 파일만 열어봐도 알 수 있다.

    이렇게 순수한 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 네츄럴 템플릿(natural templates)이라 한다.

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

 

기본 표현식

더보기
 • 간단한 표현:
 ◦ 변수 표현식: ${...}
 ◦ 선택 변수 표현식: *{...}
 ◦ 메시지 표현식: #{...}
 ◦ 링크 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: _

 

텍스트 - text, utext

타임리프의 가장 기본 기능인 텍스트를 출력하는 기능 먼저 알아보자.

 

HTML 태그의 콘텐츠에 데이터를 출력할 때 에는 다음과 같이 사용하면 된다.

th:text="${data}"

 

HTML 태그의 속성이 아니라 콘텐츠 영역안에서 직접 데이터를 출려갛고 싶으면 다음과 같이 [[...]]를 사용하면 된다.

 컨텐츠 안에서 직접 출력하기 = [[${data}]]

 

Escape

HTML 문서는 < ` , ` > ` 같은 특수 문자를 기반으로 정의된다. 따라서 뷰 템플릿으로 HTML 화면을 생성할 때는 출력하는 ` 데이터에 이러한 특수 문자가 있는 것을 주의해서 사용해야 한다. 

 

<b> </b> 를 사용하면 글자를 진하게 나오게 할 수 있다.

 

HTML 엔티티

웹 브라우저는 <를 HTML 태그의 시작으로 인식한다. 따라서 <를 태그의 시작이 아니라 문자로 표현할 수 있는 방법이 필요한데, 이것을 HTML 엔티티라고 한다. 그리고 HTML에서 사용하는 특수 문자를 HTML 엔티티로 변경하는 것을 이스케이프(escape)라고 한다. 그리고 타임리프가 제공하는 th:text, [[...]]는 기본적으로 이스케이프를 제공한다.

 

Unescape

이스케이프 기능을 사용하지 않으려면 어떻게 해야할까?

th:inline="none" : 타임리프는 [[...]] 를 해석하기 때문에, 화면에 [[...]] 글자를 보여줄 수 없다.

이 태그 안에서는 타임리프가 해석하지 말라는 옵션이다

 

변수 - SpringEL

타임리프에서 변수를 사용할 때는 변수 표현식을 사용한다

변수 표현식 : ${...}

 

유틸리티 객체와 날짜

타임리프는 문자, 숫자, 날짜, URI등을 편리하게 다루는 다양한 유틸리티 객체들을 제공한다.

 

타임리프 유틸리티 객체들

더보기

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

#uris : URI 이스케이프 지원

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

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

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

#numbers : 숫자 서식 지원

#strings : 문자 관련 편의 기능 

#objects : 객체 관련 기능 제공

#bools : boolean 관련 기능 제공

#arrays : 배열 관련 기능 제공

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