티스토리 뷰

저번글에서 Spring Boot로 Configuration Properties 클래스를 만들어보았는데
이때 .properties 파일에서는 한글이 깨진현상이 나온적이 있는데 왜 발생이 되었고 어떻게 해결을 했는지 정리해보고자 한다.

한글깨짐현상

application.properties에 한글데이터를 넣었다.



테스트를 돌려보니 한글데이터가 깨져있는걸 확인할 수 있었다.



이 문제를 해결하기위해 @PropertySource라는 어노테이션을 이용해 encoding을 설정해줄수 있는데 한번적용해보았다.

@PropertySource 어노테이션 추가



해당 어노테이션을 추가해도 한글은 계속 깨졌다. 아마 어딘가에 encoding방식을 ISO_8859_1로 세팅하는곳이 있는것같다.

원인

Spring Boot에서 Properties 파일을 읽어드리는 PropertiesPropertySourceLoader.class를 찾아보았다. 해당 클래스에서 OriginTrackedPropertiesLoader의 load 라는 메서드를 호출하게 된다.



OriginTrackedPropertiesLoader.class의 load 메서드에서 private inner class인 CharacterReader의 인스턴스를 생성시점에 ISO_8859_1 encoding으로 고정이 되있는걸 확인할 수 있으며 확장포인트가 없다는걸 알 수 있다.



application.properties 파일의 default encoding값은 ISO_8859_1이며, application.yml은 UTF-8이다. UTF-8로 변경해도 런타임시 default encoding으로 동작되는것 같다.

 

해결 (PropertyFactoryBean 구현)

PropertyFactoryBean을 별도로 구현후 application.properties를 load해서 encoding값을 UTF-8로 설정해주었다.



정상적으로 한글이 깨지지않고 출력되었다.



참고로 현재 값을 @Value(#{member['key']})로 받아왔는데 ProperyFactoryBean 네임을 명시하지않고
바로 ${}로 가져오면 application.properties에 정의된 값을 가져오게 된다. 그렇게되면 한글이 깨질수 있어 별도로 Bean을 생성뒤 해당 Bean에서 가져오게끔 변경했다.

그리고 application.properties보단 application.yml 파일을 사용하게되면 저렇게 @Value로 하나씩 받지않고 Properties 클래스를 만들어 한번에 받을수 있으며 Profile을 하나의 파일로 관리할 수 있는 장점도 있다.

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함