간단한? 개요
우리 회사의 핵심 상품(도메인)은 웹메일이다.
그중에서도 내가 속한 팀은 클라우드 인프라 기반의 웹메일 서비스 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 8은 LC_ALL을 설정해 주어야 한글로 인코딩이 정상적으로 동작하는 듯하다.
물론 아닐 수도 있고. 이놈의 개발 세상은 긴장을 놓을 수가 없다...
끝.
'개발 > Java || Spring' 카테고리의 다른 글
객체 지향 설계 원칙 (SOLID) - SRP / OCP (0) | 2024.05.30 |
---|---|
여러분의 getter는 안녕하신가요? (0) | 2023.07.02 |
Entity, DTO 그리고 VO (0) | 2023.03.15 |
03. 멀티 모듈 프로젝트 구성하기 (0) | 2023.03.12 |
02. 프로젝트를 깃허브에 연동하기 (0) | 2023.03.12 |
댓글