에러
톰캣 로그에 아래 이미지와 같이 한글이 모두 물음표(?)로 나오는 현상을 마주했습니다.
원래는 잘 나오던 한글들일 왜 이렇게 되어버린건지는 모르겠으나 해결방법을 찾아봅니다.
해결방법
찾아보니 catalina.sh 수행될 때 아래와 같이 JAVA_OPTS를 주면 해결이 된다고 합니다.
아마 로그 파일을 만들 때 인코딩을 설정해주는것 같습니다.
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dfile.client.encoding=UTF-8 -Dclient.encoding.override=UTF-8"
*변수명과 값 사이에는 공백을 넣으면 안된다고합니다.
추가 해결방법 (2022.3.4)
어떤 서버에서는 위의 설정을 안해줘도 알아서 로그에 한글이 잘 나오는데 어떤 서버는 한글이 잘 나오지 않는 것을 발견했습니다. 이는 ubuntu 설치 후 locale이 어디로 잡혀있냐에 따라서 한글이 깨지기도, 안 깨지고 잘 나오기도 하는것입니다. 따라서 위의 자바 옵션을 주는 방법 말고 설치한 ubuntu 서버의 locale을 변경해주는 방법도 정리합니다.
현재 locale 확인 방법
$ locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
...
이런식으로 나오는 서버는 흔치 않을거라 생각이 듭니다. 위의 이미지는 docker에서 ubuntu:18.04 이미지를 통해 컨테이너를 생성한 ubuntu의 locale 명령어 결과입니다. 이렇게 LANG이 비어있기 때문에 한글이 잘 나오지 않았던 것이지요.
따라서 한글이 잘 나오도록 locale을 UTF-8로 셋팅해주겠습니다.
한글팩 설치
$ sudo apt-get install language-pack-ko
$ sudo locale-gen ko_KR.UTF-8
$ sudo dpkg-reconfigure locales
locale 업데이트 (설정)
locale 업데이트 하는 방법은 2가지 있습니다.
명령어를 통해 locale 설정
$ sudo update-locale LANG=ko_KR.UTF-8 LC_MESSAGES=POSIX
/etc/default/locale 파일 수정
LANG=ko_KR.UTF-8
LC_MESSAGES=POSIX
적용은 시스템 로그아웃 후 재접속 시 적용됩니다. 서버를 reboot 하는것도 좋습니다.
* 근데 docker 컨테이너 안에서는 잘 안 바뀌네요 .. ㅠㅜ
참고
https://beomi.github.io/2017/07/10/Ubuntu-Locale-to-ko_KR/