[TOMCAT] FCM에서 받은 푸시 알림 한글 깨지는 현상 (Dfile.encoding 을 추가하여 해결)
* 모바일 쪽은 잘 모르지만, 이것 때문에 회사에서 모바일 팀과 몇 시간 고생했기 때문에 기록해둔다.
FCM에서 받은 한글 푸시 알림이 모바일(안드로이드/아이폰) 에서 깨져보이는 현상이 있었다.
푸시 중계 서버가 FCM(Firebase Cloud Messaging)에 모바일 알림 관련 정보를 json 으로 쏘면,
FCM이 안드로이드/아이폰 기기로 알림을 보내주는 식으로 처리된 상태였다.
참고로 푸시 중계 서버는 회사 모바일팀이 자체 개발한 것으로, 톰캣으로 기동하였다.
문제는 개발용 푸시 중계 서버를 이용했을 때는 인코딩 문제가 없었는데,
운영 환경에서 푸시 중계 서버를 이용했을 때 한글 알림이 깨지는 문제가 발생했다.
운영은 윈도우 서버이고, 따라서 푸시 중계 서버는 톰캣을 (sh 이 아닌) bat 파일로 띄워주도록 구성되어 있었다.
json 에 포함되는 한글 문자열 부분을 URLEncoder.encode(str, “UTF-8”) 메서드로
아무리 감싸보아도 소용이 없었고 (1번이 안되어서 2번도 감싸보았다),
혹시나 해서 EUC-KR 로 감싸도 소용이 없었다.
UTF-8 인코딩을 하지 않으면 깨진 문자열이 모바일 화면에 뜨는데,
UTF-8 인코딩을 하면 인코딩된 상태의 문자열이 화면에 뜨는 문제였다.
모바일팀은 안드로이드/아이폰 각 기기에서 디코드를 처리하도록 소스코드를 고쳐야 하나 고민하기 시작했다.
결론은 톰캣 카탈리나 옵션에 Dfile.encoding 을 추가하여 해결했다.
얼마 전에도 Dfile.encoding 을 추가해서 해결한 문제가 있었는데, 이것으로 해결되리라곤 상상도 하지 못했다.
톰캣 폴더 안쪽 bin 폴더의 catalina.bat 에 아래와 같이 옵션을 추가해주었다.
(문자열 “set CLASSPATH=” 를 찾아서 그 라인 바로 아래에 넣어주면 된다.)
set CATALINA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m -Dfile.encoding=”UTF-8″
이번은 윈도우 서버여서 catalina.bat 을 수정하였는데, 리눅스라면 톰캣폴더/bin/catalina.sh 파일을 수정하면 된다.

* 관련 게시글 : 톰캣 펌사이즈 설정 (tomcat permsize) – java.lang.OutOfMemoryError (http://blog.naver.com/bb_/221066553152)
* 관련 게시글 : [TOMCAT] 파일 내부의 한글 깨지는 문제 (Dfile.encoding 추가하여 해결) (http://blog.naver.com/bb_/221477811469)