[JUnit5 오류] mustache 한글만 출력 오류 인코딩 오류

2024. 3. 15. 10:29프레임워크(Framework)/Spring

스프링 부트 버전 3.2.3

 

[index.mustache]

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>스프링 부트 웹서비스</title>
</head>
<body>
    <h1>스프링 부트로 시작하는 웹 서비스</h1> //한글 사용
</body>
</html>

 

 

 

 

[IndexController]

package com.dan.springbootwebservice.web;

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

@Controller
public class IndexController {
    @GetMapping("/") //앞의 경로 src/main/resources/templates로 설정(mustache 자동)
    public String index() {
        return "index";
    }
}

 

 

 

[IndexControllerTest]

package com.dan.springbootwebservice.web;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
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.junit.jupiter.SpringExtension;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class IndexControllerTest {
    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void 메인페이지_로딩() {
        //when
        String body = this.restTemplate.getForObject("/", String.class);
        
        //then
        assertThat(body).contains("스프링 부트로 시작하는 웹 서비스"); //한글 사용
    }
}

 

 

 

다음과 같은 코드에서 테스트를 돌려보았더니 오류가 발생하였다.

 

 

 

한글이 인식이 안되는 것 같아 "스프링 부트로 시작하는 웹 서비스"를 영어(ex titleeee) 로 바꾸어 주었더니 테스트가 성공하였다.

 

하지만 계속 영어나 숫자로 테스트를 할 수는 없기 때문에 해결을 해보았다.

 

문제의 원인은 스프링 부트 2.7.X 버전 이상부터는 한글 깨짐이 발생한다고 한다.


 

 

[해결 방법1 - application.properties에 추가]

server.servlet.encoding.force-response=true

 

server.servlet.encoding.force-response는 HTTP 응답의 인코딩을 강제로 설정하는데 사용되는 속성이다.

서버는 모드 응답을 설정된 인코딩으로 변환하여 클라이언트로 전송한다.

 

 

[해결 방법2 - 스프링 부트 버전 내리기]

스프링 부트 버전을 2.6.x로 내려주기

 

 

개인적으로 굳이 스프링 버전을 내리고 싶지는 않았기 때문에 나는 해결방법 1을 통해 문제를 해결하였다.