- session
- Git
- AWS
- Django
- PYTHON
- join
- 데이터베이스
- SSL
- ORM
- spring
- DI
- mysql
- string
- 스프링부트
- springboot
- spring mvc
- spring security 6
- Docker
- 1차원 배열
- java
- @transactional
- nginx
- 자바
- spring boot
- jpa
- sql
- select
- 문자열
- 스프링
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
개발하는 자몽
[Spring MVC] 뷰 템플릿, 템플릿 엔진, thymeleaf 본문
공부하면서 뷰 템플릿, 템플릿 엔진이 정확히 무엇인지 정리되지 않아서 글을 남긴다.
뷰 템플릿(View template)은 간단하게 HTML을 편리하게 생성하는 기능으로 일반적으로 HTML을 동적으로 생성하는 용도로 사용한다. 대표적으로 JSP와 Thymeleaf가 있으며, JSP보다는 Thymeleaf가 많이 사용된다.
모델(model) : 뷰에 출력할 데이터를 담아둔다.
뷰(view) : 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일(HTML을 생성하는 부분, 렌더링)에 집중한다.
템플릿 엔진(Template Engine)은 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어 또는 소프트웨어 컴포넌트를 말한다. 템플릿 엔진의 정의를 검색했을 때 이렇게 나왔는데 내가 원하는 답이 아니었다. 더 찾아보니 내가 템플릿 엔진으로 생각하고 있던 것은 서버 사이드 템플릿 엔진이었다. 서버 사이드 템플릿 엔진은 서버에서 DB 또는 API에서 가져온 데이터를 미리 정의된 템플릿에 넣어 HTML 문서를 만들어 클라이언트에 전달해주는 역할을 한다. HTML 코드에서 고정적으로 사용되는 부분은 템플릿으로 만들어두고 동적으로 생성되는 부분만 템플릿의 특정 부분에 끼워 넣는 방식으로 동작한다. 대표적으로 JSP, Thymeleaf, Velocity, Freemaker 등이 있다.
템플릿 엔진인 Thymeleaf를 뷰 템플릿이라고 한다는 글을 보았다. 뷰 템플릿과 템플릿 엔진이 별도의 개념인 줄 알았지만 찾아보니 같은 개념인 것 같다. 또한 각 정의를 보면 결국 하는 일은 동일하다.
Thymeleaf는 스프링 부트에서 공식적으로 지원하는 뷰 템플릿이다. JSP와 달리 Thymeleaf 문서는 HTML 확장자를 갖고 있어 JSP처럼 Servlet이 문서를 표현하는 방식이 아니기 때문에 서버 없이도 동작이 가능하다. HTML 기반으로 `th:` 속성을 이용해서 동적인 view를 제공한다.
Spring Boot에서 타임리프를 사용하기 위해서는 라이브러리를 추가해야 한다.
//Build.gradle의 Dependencies에 라이브러리 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-start-thymeleaf' //thymeleaf
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialet'
}
https://start.spring.io/에서 프로젝트를 생성하면 `Dependencies`에서 `thymeleaf`를 추가할 수 있다.
출처 및 참고
'Java > Spring' 카테고리의 다른 글
[트랜잭션] @Transactional AOP (0) | 2022.09.23 |
---|---|
[Spring MVC] Model, @ModelAttribute (1) | 2022.09.10 |
프록시(Proxy) (0) | 2022.08.13 |
Dependency LookUp (0) | 2022.08.12 |
[Spring]빈 등록과 의존관계 주입 (0) | 2022.08.04 |