본문 바로가기
스프링 부트와 AWS

04장. 머스테치로 화면 구성하기01

by danny-j 2022. 11. 14.

템플릿 엔진이란?

  • 지정된 템플릿 데이터를 합쳐서 HTML문서를 출력하는 소프트웨어
  • 서버 템플릿 엔진클라이언트 템플릿 엔진으로 나뉘며 둘은 작동영역이 다름

 

​서버 템플릿 엔진이란?

  • 서버에서 구동되는 템플릿 엔진으로 JSP,Freemarker가 있음
  • 서버에서 Java 코드로 문자열을 만든 후 서버에서 HTML로 변환하여 브라우저로 전달

 

클라이언트 템플릿 엔진이란?

  • 브라우저 위에서 작동하며 React, Vue.js등이 있음
  • 브라우저에서 화면을 생성하기에 서버에서는 Json, Xml 형식의 데이터만 전달하고 클라이언트에서 조립함

머스테치란?

  • 머스테치는 수많은 언어를 지원하는 가장 심플한 템플릿 엔진
  • 자바에서 사용될 때는 서버 템플릿 엔진으로, 자바스크립티에서 사용될 때는 클라이언트 템플릿 엔진으로 모두 사용 가능

머스테치의 장점

  • 문법이 다른 템플릿 엔진보다 심플함
  • 로직 코드를 사용할 수 없어 View의 역할과 서버의 역할이 명확하게 분리됨
  • Mustache.js와 Mustache.java 2가지 다 있어, 하나의 문법으로 클라이언트/서버 템플릿 모두 사용 가능

 

머스테치 플러그인 설치

  • Marketplace에서 Install

 

build.gradle에 스타터 의존성 추가

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

 

index.mustache 생성

<!doctype html>
<html>
<head>
    <title>스프링 부트 웹서비스</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <h1>스프링 부트로 시작하는 웹 서비스</h1>
</body>
</html>

 

IndexController 생성

package com.danny.makewebalone.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class IndexController {
    @GetMapping("/")
    public String index(){
        return "index";
    }
}
  • 머스테치 스타터로 인해 컨트롤러에서 문자열으 반환할 때 앞의 경로/확장자는 자동으로 지정

 

IndexControllerTest

package com.danny.makewebalone.web;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
public class IndexControllerTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void 메인페이지_로딩() {
        //when
        String body = this.restTemplate.getForObject("/", String.class);

        //then
        assertThat(body).contains("스프링 부트로 시작하는 웹 서비스");
    }
}

 

Test 결과

failed???

  • 인코딩이 안되서 한글이 다 ?물음표로 나옴
  • 스프링 부트의 버전이 2.7.x 이상이면 한글 인코딩 이슈가 생김

 

build.gradle에서 스프링 부트 버전을 2.6.x 로 맞춰주기

  • 또는 application.properties에 "server.servlet.encoding.force-response: true"추가

 

다시 Test 결과

Passed

 

브라우저로 확인

Success

댓글