백엔드/Spring

[Spring] 타임리프 Thymeleaf

kwang2134 2024. 8. 1. 22:05
728x90
반응형

타임리프 Thymeleaf

  • 서버 사이드 HTML 렌더링 (SSR)
    • 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용
  • 내추럴 템플릿
    • 순수 HTML을 유지하는 특성으로 HTML 파일로 열람이 가능
    • 파일을 직접 열 경우 동적으로 결과가 렌더링 되지는 않지만 마크업 결과가 어떻게 되는지는 확인 가능
    • 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용가능한 특징
  • 스프링 통합 지원
    • 스프링과 통합되고 스프링의 다양한 기능을 편리하게 사용할 수 있게 지원

기본 기능

사용 선언 

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

 

기본 표현식

Tutorial: Using Thymeleaf

 

Tutorial: Using Thymeleaf

1 Introducing Thymeleaf 1.1 What is Thymeleaf? Thymeleaf is a modern server-side Java template engine for both web and standalone environments, capable of processing HTML, XML, JavaScript, CSS and even plain text. The main goal of Thymeleaf is to provide a

www.thymeleaf.org

 

텍스트 - text, utext

  • HTML의 콘텐츠에 데이터를 출력할 때 사용
  • 타임리프 태그와 함께 사용
  • ex) th:text="${data}" 또는 [[${data}]]

차이점

  • text
    • <와 같은 특수 문자가 포함될 경우 HTML 코드에 렌더링 되지 않게 HTML 엔티티로 변경하는 이스케이프 제공
    • 텍스트를 알아서 안전하게 이스케이프 하여 HTML로 잘못 렌더링 되지 않게 함
  • utext
    • 특수문자가 HTML 엔티티로 변경되지 않음
    • HTML 콘텐츠를 직접 삽입하여 태그와 HTML 코드가 실제로 렌더링 됨
    • HTML이 정상 렌더링 되지 않는 수 많은 문제가 발생할 수 있음

표현식 - SpEL (Spring Expression Language)

  • 변수 표현식 : ${...} 
    • 다양한 자료구조 사용 가능(Object, List, Map등)
    • th:with를 통해 지역 변수 선언 가능
  • URL 표현식 : @{...}
    • 쿼리 파라미터 : @{/hello(param1=${param1}, param2=${param2})} () 부분은 쿼리 파라미터로 대체
    • 경로 변수 : @{/hello/{param1}/{param2}(param1=${param1}, param2=${param2})} URL 경로상 변수 처리
    • 경로 + 파라미터 : @{/hello/{param1}(param1=${param1}, param2=${param2})} 함께 사용 가능
  • 리터럴
    • 문자 리터럴은 ' (작은 따옴표)로 감싸야함
    • 공백이 없다면 작은따옴표 생략 가능
    • 중간에 공백이 있을 경우 하나의 의미 있는 토큰으로 인식되지 않음
    • |...| 리터럴 대체 문법을 사용하여 작은따옴표를 대체 가능함
  • 연산
    • 비교연산 : > (gt),  < (lt),  >= (ge),  <= (le),  ! (not),  == (eq),  != (neq, ne)
    • 조건식 : 자바의 3항 연산자와 유사 ex) th:text="${condition} ? '참' : '거짓'"
    • Elvis 연산자 : 자바의 널 병합 3항 연산자와 유사 ex) th:text="${data}?: '데이터 없음'"
    • No-Operation : _인 경우 타임리프가 실행되지 않는 것처럼 동작 ex) th:text="${data}?: _"
  • 속성 값 설정
    • th:*로 속성 지정 시 기존 속성 대체 또는 새로 생성
    • <input type="text" name="mock" th:name="user" />의 경우 타임리프로 렌더링 시 name의 속성 값이 user로 대체
    • th:attrappend : 속성 값의 뒤에 값을 추가
    • th:attrprepend : 속성 값 앞에 값을 추가
    • th:classappend : class 속성에 자연스럽게 추가
  • 반복
    • th:each를 사용하여 반복 처리
    • <tr th:each="user : ${users}"> 반복 시 오른쪽 컬렉션 ${users}의 값을 하나씩 꺼내 user 변수에 담아 태그를 반복 실행
    • 반복의 두 번째 파라미터를 설정해 반복 상태를 확인 가능
    • index : 0부터 시작하는 값
    • count : 1부터 시작하는 값
    • size : 전체 사이즈
    • even, odd : 홀수, 짝수 여부(boolean)
    • first, last : 처음, 마지막 여부(boolean)
    • current : 현재 객체
  • 조건부 평가
    • if, unless(if의 반대)를 사용하여 조건 평가
    • 해당 조건이 맞지 않으면 태그 자체를 렌더링 하지 않음
    • 조건이 false인 경우 해당 부분 자체가 렌더링 되지 않고 삭제됨
    • switch문 사용 가능
  • 주석
    • 표준 HTML 주석 : 표준 HTML 주석은 그대로 남겨둠, 렌더링 된 페이지에 주석이 보임
    • 타임리프 파서 주석 : 렌더링에서 주석 부분을 제거, 렌더링 된 페이지에서 주석내 내용이 보이지 않음
    • 타임리프 프로토타입 주석 : HTML 파일을 그대로 열어 볼 경우 주석처리 되지만 타임리프를 렌더링 한 경우 데이터가 보임
  • 블록
    • 타임리프의 유일한 자체 태그
    • 블록 자체를 지정해 재사용하거나 조건부 렌더링에 사용
  • 자바스크립트 인라인
    • 타임리프가 자바스크립트 코드 내에서 타임리프 표현식을 처리하고, 서버 측 데이터를 적절하게 클라이언트 측 자바스크립트로 변환
    • 자동 이스케이프 처리
    • 데이터 타입을 자바스크립트에서 사용할 수 있는 문자열로 변환함

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 | 김영한 - 인프런(inflearn.com) 강의 내용 참고

 

 

 

728x90

'백엔드 > Spring' 카테고리의 다른 글

[Spring] 검증 Validation  (0) 2024.08.19
[Spring] 메시지 국제화  (0) 2024.08.03
[Spring] Spring MVC  (0) 2024.07.27
[Spring] 서블릿 & JSP MVC  (0) 2024.07.22
[Spring] 자바 Servlet & JSP  (3) 2024.07.22