* 문제 상황
뷰 템플릿으로 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로 접속해보았다.
한글이 ?????로 깨지는 것을 확인!!
혹시 몰라 영어로 해보았더니, 다음과 같이 성공하는 것을 확인했다. 으으 인코딩 문제겠지.
* 문제 해결
"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
이렇게 하고 다시 실행해보았다.
참고
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!