study/Spring boot

스프링 부트 프로젝트 시작할 때, 몰랐던 것 - 템플릿 엔진, mustache

올스왑 2021. 5. 18. 16:13

이동욱 님의 책 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 보면서 기본적인 것들, 팁들을 많이 알았다. 이글의 출처이다.

 

웹 개발에서의 템플릿 엔진 : 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어.

서버 템플릿 엔진은 서버에서 구동된다. 서버에서 java 코드로 문자열을 만든 뒤, 이 문자열을 html로 변환하여 브라우저로 전달한다.

클라이언트 템플릿 엔진은 브라우저 위에서 작동한다. 자바스크립트 코드가 실행되는 장소는 서버가 아닌 브라우저이다.

Vue.js, React.js를 이용한 SPA(Single Page Application)는 브라우져에서 화면을 생성한다. -> 서버에서는 이미 코드가 벗어난 경우다. -> 서버에서는 json, xml 형식의 데이터만 전달하고 클라이언트(브라우저)에서 조립한다.

머스티치(mustache) : 수많은 언어를 지원하는 가장 심플한 템플릿이다. 루비, 자바스크립트, 파이썬, 자바, ... 등 현존하는 대부분 언어를 지원한다.

JAVA에선 JSP, Thymeleaf 등 다양한 서버 템플릿 엔진이 존재한다.

타임리프는 문법이 어려운 단점이 있고, 머스티치는 로직 코드를 사용할 수 없다는 단점이 있다.

머스티치의 장점은 인텔리제이 무료버전에서도 돌아가는 것이다.

인텔리제이에서 플러그인을 설치하고 build.gradle에도 머스티치 스타터 의존성을 등록한다. 스프링 부트에서 공식적으로 지원하기 때문에 버전도 관리해준다.

implementation('org.springframework.boot:spring-boot-starter-mustache')

src/main/resources/templates에 머스티치 파일을 두면 스프링 부트에서 자동으로 로딩한다.
그리고 머스티치 파일 URL을 컨트롤러에서 매핑시킨다.

 

머스티치 스타터 때문에, 컨트롤러에서 문자열을 반환할 때, 앞 부분의 경로, 뒷 부분의 파일 확장자를 자동으로 지정해준다. 앞에는 src/main/resources/templates 뒤에는 .mustache. 그래서 중간 경로만 써주면 된다. 그리고 반환된 문자열은 View Resolver가 처리한다.

* View Resolver는 URL 요청의 결과("index")를 전달할 타입과 값을 지정해준다.

 

그리고 html에 대한 테스트를 할 때는, 결국 html도 규칙이 있는 문자열이기 때문에 일부 문자열이 가져온 문자열에 있는지 검사하면 된다.