본문 바로가기
개발/Java || Spring

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

by leedonggeun 2023. 10. 19.

간단한? 개요

우리 회사의 핵심 상품(도메인)은 웹메일이다.
그중에서도 내가 속한 팀은 클라우드 인프라 기반의 웹메일 서비스 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을 설정해 주어야 한글로 인코딩이 정상적으로 동작하는 듯하다.
물론 아닐 수도 있고. 이놈의 개발 세상은 긴장을 놓을 수가 없다...

 

끝.

댓글