Error

[Error] SpringBoot 한글 ?? 깨짐 에러 해결 (mustache 사용)

orieasy1 2024. 10. 5. 08:51

 일단 테스트를 할 때부터 계속 tests failed라고 떠서 봤더니 누가봐도 한글이 깨진 상태였다.

test 코드 에러 메세지 중

 

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;

import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.*;

@SpringBootTest(webEnvironment = RANDOM_PORT)
public class IndexControllerTest {
	@Autowired
	private TestRestTemplate restTemplate;

	@Test
	public void mainPageLoading() {
		//when
		String body = this.restTemplate.getForObject("/", String.class);

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

	}
}

 

테스트 코드는 스프링부트로 시작하는 웹 서비스라는 문구를 포함하고 있는지 확인하라하는데 ?????? ???? ? ???라고 뜨니까 찾을 수 없는게 당연하다.

 

 

역시나 브라우저에서도 깨진다..


⬆️ 에러코드 해당 페이지

 

 

이 문제를 해결하기 위해서는 application.yml 파일에 아래 설정을 추가해주면 된다.

server:
  servlet:
    encoding:
      force-response: true

 

해당 설정은 HTTP 응답 인코딩을 강제하는 설정이다.

이 설정은 서버가 클라이언트로 보낼 HTML, JSON, 텍스트 파일 등의 응답을 UTF 인코딩으로 강제하는 역할을 한다.

 

나의 경우 아래와 같이 application.yml 파일을 작성했고 다시 실행하니 브라우지에 다음과 같이 출력되었다.



spring
:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password:

  h2:
    console:
      enabled: true

server:
  servlet:
    encoding:
      force-response: true




 

 

 

 

 


+ 내가 했던 시도와 틀린 이유

 

처음에 딱 오류가 떴을 때 찾아보니 '-Dfile.encoding=UTF-8 설정을 추가해라'라는 말이 많이보여서 추가도 해봤는데 해결되지 않았다. (당연하다)

위 설정은 JVM(Java Virtual Machine)이 내부적으로 처리하는 파일 입출력을 UTF-8로 설정하는 것일 뿐 HTTP 응답이나 웹 페이지의 인코딩과는 전혀 상관이 없다.

 

나에게 발생했던 문제를 해결하기 위해서는 서버의 응답 헤더나 클라이언트에게 전달되는 데이터의 인코딩 방식에 대한 설정을 바꿨어야했던 것이기 때문에 위에서 설명한 방법이 적절했던 것이다.


 

'Error' 카테고리의 다른 글

MySQL 포트 충돌 및 Connection Error  (1) 2024.05.08