개발/Java || Spring

큰일났다. 톰캣 로그에서 갑자기 한글이 보이지 않는다.

leedonggeun 2023. 10. 19. 22:52

간단한? 개요

우리 회사의 핵심 상품(도메인)은 웹메일이다.
그중에서도 내가 속한 팀은 클라우드 인프라 기반의 웹메일 서비스 SaaS 운영 및 개발이다. (기타 모든 잡일...)

내가 입사 전 막연히 생각했던 것보다 웹메일 서비스는 파일의 I/O가 너무 잦고 크고 많다.

단순 EML을 열람하는 것부터 일반/대용량 첨부파일 다운로드, 드라이브에 저장되는 파일 UL/DL, 기타 등등
KB부터 시작해서 GB까지! (종종 어떤 고객들은 100GB 단위도 올리게 해달라 한다.)

그러다 보니, 서비스 규모가 커지니 슬슬 파일 다운로드를 할 때 서비스가 느려져서 VOC가 자주 인입됐다.

 

문제의 시발점

🫤 "아 이제 안 되겠다. 부하가 있는 서비스는 별도 서버로 옮깁시다."
      "근데 지금 CentOS7이 EOS 되기 직전이니까 Rocky 8로 올립시다."

 

얼마 뒤

 

터졌다 문제

😱 "OO님, 혹시 한글로 된 파일명이 로그에 안 남고 이상한 문구가 남는데 왜 이런지 아시나요..?"
      "근데 영어로 된 로그는 잘 남거든요...?"

🫤 "네?"

 

WARN   | wrapper  | 2023/10/19 09:00:12 | Invalid multibyte sequence.
WARN   | wrapper  | 2023/10/19 09:00:53 | Invalid multibyte sequence.

확인해 보니 다운로드 로그는 안남고 Invalid multibyte sequence라고만 남는 게 아니겠나?
다행히도 파일 다운로드는 정상적으로 됐다.

하지만 정말 별의별 걸 다 확인했다.
wrapper의 language값, logback의 charset, tomcat의 logging.properties, 리눅스 서버의 locale. 할 수 있는 건 다 한 느낌

모든 걸 확인해도 CentOS와 설정이 별로 다를 게 없었다. 구글링에도 딱히 좋은 정보는 보이지 않았다.

 

그러던 중 스쳐지나간 옛날 기억!

예전에 고객의 데이터를 마이그레이션 할 때 한번 애먹은 적이 있었다.
며칠을 붙잡고 겨우 해결되었던 문제였는데, 이걸 해결했던 설정이 바로 locale의 LC_ALL 설정이다.

이게 불현듯 떠올라서 설정해 주고 재기동을 했다.

export LC_ALL=en_US.UTF-8

 

아니나 다를까? 톰캣을 재기동하니 너무나도 잘 됐다.

문제를 해결하고나니 옛날 생각이 떠올랐다.

고객의 마이그레이션 요청에 툴을 만들어놓고, 막상 3일 전에 실서버에서 테스트하니 한글 디렉터리가 인식이 안 돼서 식은땀이 났다. (어떡하지? 마이그레이션 안된다해야하나? 이미 계약한 돈은? 아니 누가 리눅스에서 한글을 써??? 하고 신입일 때 진짜 식은땀이 났다.)

이때 기술 이사님이 지나가길래 붙잡고 하소연했더니 LC_ALL을 설정해주셨다. (바로 돼서 어찌나 멋져 보이던지)

 

어쨌든 해결

CentOS 7과 다르게 Rocky 8LC_ALL을 설정해 주어야 한글로 인코딩이 정상적으로 동작하는 듯하다.
물론 아닐 수도 있고. 이놈의 개발 세상은 긴장을 놓을 수가 없다...

 

끝.