'스프링 부트와 AWS로 혼자 구현하는 웹 서비스'를 읽고 공부하며 정리한 내용입니다. 오류 해결부분은 틀린 내용이 있을 수 있습니다.🤐


템플릿엔진

템플릿 엔진이란 지정된 템플릿 양식과 데이터가 합쳐져 HTML문서를 출력하는 소프트웨어를 말한다. 서버와 클라이언트 각각의 템플릿 엔진은 같다 할 수 없다.

서버 템플릿 엔진으 서버에서 JAVA 코드로 문자열을 만든 뒤 HTML로 문자열을 변환하여 브라우저로 전달한다.

Vue.js나 React.js를 이용한 SPA(Single Page Application)은 브라우저에서 화면을 생성한다. 서버에서는 Json 혹은 Xml형식의 데이터만 전달하고 클라이언트에서 조립한다.

머스테치

많은 언어를 지원하는 심플한 템플릿 엔진.

  • 문법이 간단한다.
  • 로직 코드를 사용할 수 없어 View의 역할과 서버의 역할이 명확히 분리된다.
  • 하나의 문법으로 클라이언트/서버 템플릿 모두 사용이 가능하다.

기본 페이지 만들기


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>

이 머스테치에 Controller에서 URL매핑 진행


IndexController

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

머스테치 스타터 덕분에 문자열 반환시 앞의 경로와 뒤의 파일 확장자는자동으로 지정된다. index를 반환하므로 src/main/resources/templates/indx.mustache로 반환되어 View Resolver가 처리한다.

View Resolver : URL요청의 결과를 전달할 타입과 값을 지정하는 관리자


IndexControllerTest

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

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

    }

오류 해결

  • 테스트를 하면
    java.lang.AssertionError:
    Expecting: ...
    오류가 발생
  • localhost:8080/를 치고 들어가면 "스프링 부트로 시작하는..."이
    ??? ???? ????..로 나와있다.

404가 뜬 것은 아니기에 인코딩 관련 해결책을 힘겹게 찾았다.
스프링부트 버전을 내리는 것도 방법이지만

server.servlet.encoding.force-response= true

위 설정을 application.properties에 추가하여 인코딩을 강제했다.

출처글에서 답글 남겨주신 분덕에 쉽게 해결했다.😊

출처 : https://velog.io/@jihye/mustache%EC%97%90%EC%84%9C-%ED%95%9C%EA%B8%80%EC%9D%B4-%EA%B9%A8%EC%A7%84%EB%8B%A4-%EB%9A%AB%EB%9A%8F

profile
앞길막막 전과생

0개의 댓글