본문 바로가기

Server Oriented/Server

[스프링 부트] OS 가 EUC-KR 인데, 소켓 통신시 UTF-8 데이타가 사용된다면..

머신의 OS 가 EUC-KR 일 때,

이 위에 스프링 부트로 만든 빌드를 java -jar *.jar 와 같이 실행하면..

빌드된 프로그램을 프로세스에 할당하면서,

JVM 문자셋을 OS 의 문자셋인 EUC-KR 과 동일하게 세팅한다.

 

소켓 통신 프로그램에 문자셋이 특별하게 설정되지 않는 경우,

외부에서 들어오는 데이터의 문자셋이 UTF-8 이므로,

소켓 통신의 결과 데이터도 UTF-8 이다.

 

스프링 부트의 JVM 은 EUC-KR 이고,
외부에서 가져온 정보가 UTF-8 이므로
스프링 부트의 .java 에서 문자셋을 이렇게 저렇게 아무리 고쳐 봐야,

한글을 포함한 n-bytes 문자들이 깨지게 된다.

 

범용으로 설계된 소켓 프로그램의 문자셋을 변경할 수 없고,

OS 의 문자셋도 바꿀 수 없다면..

남은 것은 딱 하나.. JVM 구동시 옵션으로 문자셋을 설정해 주는 것이다.

 

java -Dfile.encoding=UTF-8 -jar 빌드된.jar

 

이렇게 되면, 외부 데이타의 문자셋과 OS 의 문자셋이 다르더라도,

jvm 에 설정된 문자셋으로 외부 데이타를 다뤄주므로

문자가 깨지지 않고 정상적으로 작동한다.