Coding Note

머스테치로 화면 구성하기! 본문

SpringBoot/AWS_PJ

머스테치로 화면 구성하기!

jinnkim 2022. 3. 9. 01:37

 

 

Q1. 템플릿 엔진

- 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어

- 자바 진영에서는 Jsp, Velocity, Freemaker, Thymeleaf 등 다양한 서버 템플릿 엔진이 존재함.

 

단점

- JSP/Velocity : 스프링 부트에서 권장하지 않는 템플릿 엔진

- Freemaker : 템플릿 엔진으로는 너무 과하게 많은 기능을 지원함.

                  높은 자유도로 인해 숙련도가 낮을수록 Freemaker안에 비즈니스 로직이 추가될 확률이 높음.

- Thymeleaf : 문법이 어려움.

 

 

Q2. 머스테치(mustache)

- 수많은 언어를 지원하는 가장 심플한 템플릿 엔진

 

장점

- 문법이 다른 템플릿 엔진보다 심플

- 로직 코드를 사용할 수 없어 View의 역할과 서버의 역할이 명확하게 분리됨

- Mustache.js와 Mustache.java 2가지가 있어, 하나의 문법으로 클라이언트/서버 템플릿을 모두 사용함.

 

 

 


 

1. 머스테치 플러그인 설치

인텔리제이 커뮤니티 버전도 무료 설치 가능함!

 

plugins- mustache

 

설치 후 인텔리제이 재시작하여 플러그인이 작동하는 걸 확인하면 된다.

 

 

2. build.gradle에 의존성 추가하기

머스테치는 스프링부트에서 공식 지원하는 템플릿 엔진

 

 

src/main/resources/templates 패키지를 생성 후 머스테치 파일을 생성하면 스프링 부트에서 자동으로 로딩한다.

index.mustache 생성

 

 

- index.mustache 코드

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

 

이 머스테치에 URL을 매핑한다. 

URL 매핑은 Controller에서 진행한다.

web 패키지 안에 IndexController를 생성한다.

 

 

 

3. IndexController

package com.bs.book.springboot.web;

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

@Controller
public class IndexController {

    @GetMapping("/")
    public String index() {
        return "index";
    }
}

 

 

 

4. IndexControllerTest

package com.bs.book.springboot;

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.AssertionsForClassTypes.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("스프링 부트로 시작하는 웹 서비스");
    }
}

URL 호출 시 페이지의 내용이 제대로 호출되는지 테스트!

 

첫 결과는... 오류ㅠㅠ

 

 

콘솔을 확인해보니 머스테치 파일에 <h1> 태그 안 내용이랑 IndexControllerTest에서 contains("") 내용(띄어쓰기)이 달라 오류가 출력되는 거였다.

 

다시 실행해 보니 잘 실행되는 걸 확인할 수 있다!!!

 

 

브라우저에 http://localhost:8080/로 접속

 

 

 

완성!!!!!

 

 

Comments