[Thymeleaf] 사용하고 싶다면 주입과 설정부터
주입부터 합시다.
우리는 개발을 진행하며 많은 라이브러리를 사용한다.
JSON을 사용하고 싶다면 Jackson 또는 Gson,
데이터베이스를 연결하고 싶다면 JDBC Driver, Mybatis, Spring Data Jpa 등 많은 것들을 사용하게 된다.
이 모든 것들의 공통점이 무엇일까?
당신이 만약 Gradle을 사용하고 있다면 build.gradle에 추가하게 될 것이고
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
// build.gradle 임.
Maven을 사용하고 있다면 pom.xml에 추가하게 될 것이다.
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>3.0.0</version>
</dependency>
// pom.xml 임.
사실 Spring Initializer( https://start.spring.io ) 를 사용하면 우측 Dependencies 칸에서 미리 주입하고 프로젝트를
생성하는 것이 가능하기 때문에 타임리프 정도는 굳이 프로젝트 안에서 추가 할 필요는 없다.
먼저 주입부터 해야 프로젝트 내부에서 활용이 가능해진다.
근데 저게 주입과정 끝이다. 매우 간단하지 않은가?
주입이 끝났으니 사용해 볼 시간이다.
먼저 타임리프는 HTML문서 내부에서 사용하는 도구이다.
그렇기때문에 JSTL의 taglib 처럼 각 문서에 선언 후 사용하면 된다.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"> <-- 이렇게.
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
<% taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
//참고로 jstl taglib은 이렇게 생겼다.
//jsp 파일 최상단에 박아넣고 시작하면 됨.
선언을 완료 했다면 이제 각 기능에 맞는 문법을 통해 내가 원하는 것을 구현하면 된다.
모든 문법을 사용하는데 " th: "가 붙어서 사용된다.
오늘은 간단하게 th:text에 대해 알아 볼거다.
먼저 Controller에서 아무 값이나 담아서 보내보도록 하자.
@Controller
public class TestController {
@GetMapping("/test")
public String testText(Model model){
model.addAttribute("userName", "Empty Brain"); //여기서 넘어간 userName이
return "test/test-page";
}
}
나는 내 이름 담아서 보낼거임 ㅎㅎ.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<span th:text="${userName}">UserA</span> //여기서 나옴.
<span> [[${userName}]] </span> // 이렇게 써도 됨.
</body>
</html>
그리고 위의 HTML문서를 랜더링 할 때 span 태그는 UserA로 출력될까 다른 문장으로 출력될까?
맞다. th:text 의 역할은 서버에서 넘어오는 Attribute를 받아 태그 내부에 뿌려주거나
th:text = "'그냥 텍스트 넣어도 뿌려줌 ㅋㅋ'"
별 볼일 없는 것 처럼 보이는 기능이지만 이게 가장 기초적이고 중요한 기능인 듯 싶다.
이 문법의 강점은 본래 태그 내에 있던 문장에서 바꿔치기 된다는 점이다.
위의 예도 기존의 UserA를 Empty Brain으로 바꿔치기 했다.
그렇다는 것은 태그 안에 어떤 내용이 미리 들어가 있어도 상관 없다는 뜻이다.
퍼블리싱이 끝나고 이제 서버에서 넘어오는 자료들을 꼽아넣어 동적 페이지를 만들때
태그 안에 미리 "이름 넣는 칸임", "가격 넣는 칸임" 또는 "itemName", "price" 와 같이넣어 놓는다면 좀 더 편하게 작성 할 수 있을 듯 하다.
참고로 타임리프로 작성 된 파일은 html 파일이기 때문에 브라우저에서 바로 열어보는 것도 가능하다.이클립스는 모르겠고 인텔리제이의 경우
Copy Path/Reference -> Absoulte Path를 통해 해당 html문서의 절대경로를 복사한 후
브라우저에 그대로 붙혀넣으면
잘 열리긴 하지만 그냥 html 문서를 열었기 때문에 태그 안에 타임리프의 문법이 그대로 남아있다.
다음 시간에는 th:utext 에 대해 알아볼거다.
안녕.