녕의 학습 기록

mustache 한글 깨짐 해결 본문

카테고리 없음

mustache 한글 깨짐 해결

kjyyjk 2023. 3. 29. 22:46

*  문제 상황

 

뷰 템플릿으로 mustache를 사용,

localhost:8080/ 에 매핑되는 index 페이지를 만들기 위하여 index.mustahce와 IndexController 를 구현하였다.

 

 

[index.mustache]

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

 

[IndexController]

@Controller
public class IndexController {

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

 

IndexController 가 잘 동작하는지 테스트 코드 작성!

 

[IndexControllerTest]

@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("스프링 부트로 구현하는 웹 서비스");

    }
}

 

! TestRestTemplate 을 이용해 "/" url 호출. Get 메서드의 HTTP 요청을 보내고, 결과로 String을 반환 받는다.

! 반환 결과에 "스프링 부트로 구현하는 웹 서비스" 가 포함되어 있는지 확인

! 테스트가 통과하면 url 호출 시에 IndexController 에서 매핑이, 호출이 잘 되었다는 것.

 

 

잘 동작하기를 바랬으나 ㅋ 아니지 오히려 잘동작한게 맞는거지 ...

 

그래서 브라우저 그리고 postman 에서 해당 url로 접속해보았다.

 

웹 브라우저에서
postman 에서

 

한글이 ?????로 깨지는 것을 확인!!

 

혹시 몰라 영어로 해보았더니, 다음과 같이 성공하는 것을 확인했다. 으으 인코딩 문제겠지.

 

 

 

 

*  문제 해결

 

"mustache 한글 깨짐" 을 키워드로 구글링 해보니 흔한 일 인것을 확인..!

 

두가지 방법을 찾았다.

 

1.스프링 부트의 버전을 낮추는 것

 

mustache가 특정 스프링 부트 버전(2.7.x)에서 한글 깨짐 현상이 나타난다고 한다.

그렇기에 build.gradle에서 스프링 부트의 버전을 2.6.x로 낮춰주도록 한다.

 

실제로 버전을 낮추니까 mustache 의 한글 깨짐 현상이 사라진 것을 확인하였다!!!

하지만 버전을 낮추다 보니 2.7.x 에서만 지원되는 다르 코드로 인해 또 다른 에러가 발생해버렸다.

그래서 호다닥 버전 원상복구...

두번째 방법을 시도해보자.

 

2. application.properties 에서 설정

 

프로젝트의 application.properties에 다음 코드를 추가하여 설정한다.

server.servlet.encoding.force=true

 

이렇게 하고 다시 실행해보았다.

 

안깨진다.

 

테스트 성공하였따.

 


참고