spring boot 에 view template으로 freemarker을 적용하는 간단한 방법을 정리 합니다.
spring boot 에서는 view templat으로 (FreeMarker, Groovy, Thymeleaf, Mustache) 을 지원하고 있습니다.
이중 spring에서는 Thymeleaf를 적극적으로 지원 하고 있고 해당 탬플릿의 경우 커스텀 유연성이 높아 많은 사용자가
사용하고 있습니다.
Groovy나 Mustache의 경우 사용 속도, 사용방법, 커뮤니티 활성화 등 다른 2개의 템플릿보다 떨어지는 부분이
많아 spring boot에서 view template을 사용한다면 freemarker 이나 Thymeleaf를 사용하는게 좋습니다.
2개의 템플릿중 freemarker 를 적용하는 방법을 간단하게 기술 합니다.
(토이프로젝트로 폼빌더 관련 작업시 view template으로 freemarker을 사용할 예정 이여서 관련 내용을 적용하면서 정리
하는 겁니다. 해당 템플릿을 선택한 이유는 커스텀을 거의 사용하지 않을것이고 충분한 속도, jstl과 크게 차이나지 않는 사용 방법 및 사용관련 내용이 잘 정리 되어 있어 freemarker을 선택 했습니다.)
먼저 build.gradle에 의존성을 추가 해줍니다.
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
그뒤 freemarker에서 사용할 설정 내용을 application.properties에 추가 해줍니다.
#freemarker 템플릿 경로 지정
spring.freemarker.template-loader-path=classpath:/templates
#return 호출시 앞쪽에 자동으로 붙는 내용 정의
spring.freemarker.prefix=/freemarker
#return 호출시 뒷쪽에 자동으로 붙는 내용 정의
spring.freemarker.suffix=.ftl
#freemarker content type 정의
spring.freemarker.contentType=text/html
#freemarker charset 정의
spring.freemarker.charset=UTF-8
#기본은 true (false로 설정 하는 경우 프리마커 변경 내용이 바로 적용 됨)
spring.freemarker.cache=false
위의 내용을 추가 해주면 모든 준비가 되었습니다. 서비스 시작시 호출할 ftl파일을
설저한 /src/main/resources/templates/freemarker 폴더 하위로 생성 해주고 호출 해주면 됩니다.
저는 bootstrap을 사용할 예정이여서 layout.ftl 파일을 만들고 해당 파일을 호출 하면서 실제 동작하는 내용에 해당하는
list.ftl을 <#include incPath> 으로 호출 하려고 합니다.
modelAndView.addObject("incPath", "../formSet/list.ftl");
modelAndView.setViewName("/layout/layout_view_1");
으로 경로를 정의 해주고 해당 파일을
/src/main/resources/templates/freemarker/layout/layout.ftl
/src/main/resources/templates/freemarker/formSet/list.ftl
에 만들어 주면 작업한 화면을 볼 수 있습니다.
incPath의 경로를 ../formSet/list.ftl 으로 지정 해줘야(파일의 실제 경로) include 할 수 있습니다.
'spring' 카테고리의 다른 글
spring boot h2 database not found 관련(multiple datasource) (0) | 2022.04.13 |
---|---|
@RestControllerAdvice 관련 정리 (0) | 2022.04.12 |
spring-boot application.properties DB접속 정보 암호화 (0) | 2022.03.21 |
이클립스 gradle 빌드 (0) | 2022.03.15 |
spring-boot jdbc database 초기화 schema.sql, data.sql (0) | 2022.03.09 |