본문 바로가기
Web

타임리프

by 유서담 2024. 3. 21.

 

타임리프

 

웹 및 스탠드얼론 환경 모두에서 사용할 수 있는 모던 자바 템플릿 엔진. 

주로 웹 애플리케이션에서 HTML 뷰를 생성하는 데 사용되며, XML, JavaScript, CSS, 텍스트 등 다양한 형태의 뷰를 생성하는데에도 사용할 수 있다

 

 

타임리프의 주요 특징

 

네추럴 템플릿 

: 타임리프의 가장 큰 특징 중 하나. HTML 파일이 브라우저에서 그대로 보여질 수 있도록 지원하는 것이다

HTML 파일을 그대로 사용하기 때문에 서버에 배포하지 않고도 화면을 즉시 확인해볼 수 있어서 화면 디자인 및 테스트에 용이하다

 

스프링 MVC와의 완벽한 통합

:스프링 MVC 애플리케이션에서 뷰 레이어로 흔히 사용되며, 스프링 시큐리티, 스프링 데이터 등과 같은 스프링의 다양한 모듈과도 잘 작동한다. 그 이유는 타임리프는 JSP와 달리 별도의 추가 설정없이 의존성만 추가하면 되기 때문

 

표현식 지원

: 변수 표현식, 선택 변수 표현식, 메시지 표현식, 링크 URL 표현식 등 다양한 표현식을 지원하여 템플릿에서 동적인 데이터를 쉽게 처리할 수 있다

 

보안

: 타임리프는 XSS(Cross Site Scription) 공격을 방지하기 위해 기본적으로 텍스트를 이스케이프 처리합니다. 이를 통해 보다 안전환 웹 애플리케이션을 개발할 수 있다

 

 

 

타임리프의 장점

 

유지보수성

: 타임리프의 자연 템플릿 덕분에 HTML 파일을 그대로 유지하면서 동적인 부분만 추가할 수 있다. 이는 유지보수시 HTML 구조를 파악하기 쉽고, 디자인 변경이 필요할 때도 편리하다

 

높은 가독성

: 타임리프의 문법은 HTML 태그 안에 자연스럽게 들어가므로, 동적인 부분이 어디에 위치하는지 쉽게 파악할 수 있다

 

높은 호환성

: 순수한 HTML 파일로 작업하기 때문에, 스프링 뿐만이 아닌 다른 웹 기술이나 라이브러리와 호환성이 매우 높다

 

 

사용예시

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Example</title>
</head>
<body>
    <h1 th:text="${message}">Welcome to our site!</h1>
</body>
</html>

 

위 예시는 th:text 속성을 사용해서 모델로부터 전달받은 message  변수의 값을 <h1> 태그의 내용으로 동적으로 변경하게 하는 예시다

 

 

 

 

타임리프의 주요 기능

 

1. 프래그먼트 교체 및 타입

 

 

th:fragment

th:fragment 속성을 사용하여 HTML 코드 조각(프래그먼트)을 정의하고, 이를 다른 템플릿이나 템플릿의 다른 위치에서 재사용할 수 있다

 

프래그먼트를 정의할때 해당 HTML 요소에 th:fragment 속성을 추가하고 이름을 지정하면 된다

<div th:fragment="exampleFragment">
  <!-- 재사용하고자 하는 코드 -->
  <p>이것은 프래그먼트 예제입니다.</p>
</div>

 

여기서 fragment의 이름은 exampleFragment 이다

 

 

th:replace

th:replace는 현재 태의 내용을 지정된 프래그먼트로 완전히 대체한다. 이를 사용하면, 현재 태그는 지정된 프래그먼트의 내용으로 교체되고, 원래의 태그는 사라진다. 웹페이지에서 공통으로 사용되는 영역에 주로 사용한다

<div th:replace="~{파일경로 :: 조각이름}"></div>
<div th:replace="fragments/header :: headerFragment"></div>

 

 

th:insert

지정된 프래그먼트의 내용을 현재 태그 안에 포함시킨다. 태그의 내용을 유지하면서 추가적인 내용을 포함시킬 때 유용하다.

<div th:insert="~{파일이름 :: 조각이름}"></div>

 

 

 

2. 기본 명령어

 

th:text

HTML 태그 없이 요소의 텍스트 내용을 동적으로 설정

(비슷한 태그인 th:utext도 있는데 이건 HTML 코드를 포함한 텍스트를 출력한다)

<p th:text="${message}">기본 메시지</p>

 

 

th:each

반복문을 처리하여 컬렉션의 각 아이템에 대해 HTML 요소를 반복 생성한다

<ul>
    <li th:each="item : ${items}" th:text="${item.name}">항목 이름</li>
</ul>

 

 

th:if, th:unless

조건에 따라 HTML 요소를 포함하거나 제외한다

<div th:if="${condition}">조건이 참일 때 보여줄 내용</div>
<div th:unless="${condition}">조건이 거짓일 때 보여줄 내용</div>

 

 

th:attr

HTML 요소의 속성을 동적으로 설정한다

<a th:href="@{/login}" th:attr="title=${loginTitle}">로그인</a>

 

 

th:switch, th:case

여러 조건 중 하나를 선택하여 출력한다

<div th:switch="${user.role}">
    <p th:case="'admin'">관리자입니다.</p>
    <p th:case="'user'">사용자입니다.</p>
    <p th:case="*">알 수 없는 역할입니다.</p>
</div>

 

 

 

3. 기타

 

th:object

모델 객체에 대한 참조를 설정하는데 사용되는 속성이다. form 데이터를 바인딩하거나, 특정 객체의 데이터를 템플릿 내에서 접근하기 위해서 사용한다.

 

웹 애플리케이션에서 사용자 입력을 받기 위한 폼을 처리할 때, th:object를 사용하면 폼을 통해 받은 데이터를 객체에 직접 매핑하여 서버로 전송할 수 있다 

 

폼과 객체 바인딩 예시

<form action="#" th:action="@{/submitForm}" th:object="${formObject}" method="post">
  <input type="text" th:field="*{username}" />
  <input type="password" th:field="*{password}" />
  <input type="submit" value="Submit" />
</form>

 

예시에서 th:object="${formObject}" 는 formObject 라는 이름의 모델 객체를 현재 폼의 컨텍스트 객체로 설정한다.

그리고 th:field="*{username}", th:field="*{password}" 와 같이 *{...} 표현식을 사용하여 객체의 속성 (username, password) 에 접근하고, 이를 입력필드와 바인딩한다

 

 

 

객체 데이터 표시 예시

<div th:object="${userInfo}">
  <p>Name: <span th:text="*{name}">Name</span></p>
  <p>Email: <span th:text="*{email}">Email</span></p>
</div>

 

이 예시에서는 userInfo 객체를 th:object 를 통해 지정하고, *{name}, *{email} 을 통해 userInfo 객체의 name, email 속성 값을 표시한다

 

 

'Web' 카테고리의 다른 글

JSTL(JSP Standard Tag Library)  (0) 2024.02.21
EL(Expression Language)  (0) 2024.02.19
프로젝트에서 톰캣설정  (0) 2024.01.26
JDBC 프로젝트 개발순서  (0) 2024.01.26
Web_Servlet  (0) 2024.01.15