타임리프의 메뉴얼 2가지 형태로 제공된다.
1] 타임리프만 사용할 경우의 메뉴얼
2] 스프링과 통합할 경우의 메뉴얼
그런데 Spring MVC 구조를 살펴보면 Spring이 제공하는 viewResolver를 통하여 자동으로 뷰 페이지 경로를 찾고,
Spring이 제공하는 Model 객체를 통해서 뷰에서 데이터를 꺼내 쓸 수가 있는 것이다. 그럼 이것 또한 Spring과 이미 통합된
상태에서 타임리프를 사용하고 있다고 말할 수 있는 것 아닌가??
결론부터 말하면 타임리프가 사용된 뷰 페이지에 스프링이 Model 객체를 이용하여 단방향으로 데이터를 뿌려주기만 한다
면 그건 타임리프와 스프링이 통합되었다고 할 수 없다.
그 반대로도 즉 타임리프를 통해 스프링 MVC로 데이터가 전송이 돼서 Spring이 제공하는 여러 기능들을 사용할 수 있게
타임리프가 도와 줘야 타임리프가 진정한 의미로 스프링과 통합됐다고 말 할 수가 있다.
(더 정확한 이해는 아래 예시를 보면 이해할 수 있다)
(이 과정에서 타임리프 엔진이 스프링 컨테이너에 있는 MessageResolver 등의 스프링 빈을 조회하여 이용한다는 점이 통
합의 포인트이다)
예시
흐름 1
<form action="item.html" th:action th:obejct="${item}" method="post">
<div>
<label for="itemName">상품명</label>
<input type="text" id="itemName" name="itemName"
th:field="*{itemName}" class="form-control" placeholder="이름을 입력하세요">
</div>
<div>
<label for="price">가격</label>
<input type="text" id="price" name="price"
th:field="*{price}" class="form-control" placeholder="가격을 입력하세요">
</div>
<div>
<label for="quantity">수량</label>
<input type="text" id="quantity" name="quantity"
th:field="*{quantity}" class="form-control" placeholder="수량을 입력하세요">
</div>
<hr class="my-4">
<div class="row">
<div class="col">
<button class="w-100 btn btn-primary btn-lg" type="submit">상품 등록</button>
</div>
흐름 2
흐름 3]
-> FORM 태그를 타임리프로 수정하였고, 상품 등록에 사용자가 데이터를 입력하는 순간 스프링 서버는
그 데이터를 받는다. 여기서 스프링과 통합돼 사용된 부분은 FORM 태그의 데이터를 스프링이 제공하는
@ModelAttribute로 바인딩을 할 수 있게 th:object="${object}", th:field를 사용했다는 점이다.
이런 점에서 이 타임리프 예시는 스프링과 통합된 사용이라고 말할 수가 있다.
* 타임리프가 스프링과 통합됨으로써 얻는 위력은 Bean Validation 부분에서 진짜 나타난다.
'Springあるある' 카테고리의 다른 글
@ModelAttribute의 새로운 사용법 (0) | 2025.01.10 |
---|---|
@RequiredArgsConstructor vs @AllArgsConstructor (0) | 2025.01.10 |
Map :: values() 사용 시 주의점(Feat. ConcurrentModificationException) (0) | 2025.01.10 |
타임리프 프로토타입 주석(Feat. 타임리프 주석) (0) | 2025.01.09 |
static class에 @Component 사용 시 주의점! (0) | 2025.01.06 |