업무 중 타 사(社)의 Application
구성 요소를 확인해봐야 하는 일이 있었다.
이 Application
은 특이하게도 DB를 거의 사용하지 않고, 리눅스 내에 사용자 ID로 구분하여 파일로 관리를 하는 구조였다. 그런데 여기서 문제가 있었다.
바로.. 한글 디렉토리!
도대체 왜 서버에서 한글로 된 디렉토리를 사용하는 걸까?
정확한 사정은 모르지만... 난 아직도 이해할 수 없다... 😱
이렇게 한글로 된 디렉토리는 아무리 File.exists("path")
로 존재 여부를 확인하고자 해도 곧죽어도 false
를 return
했다.
이때, 내가 했던 뻘짓은 다음과 같다.
- java.io.File 패키지의
exists()
메서드 사용- java.nio.file.Files 패키지의
Files.exists()
메서드 사용- 리눅스 서버의 locale export하여
ko_kr.utf8
로 수정
export locale=ko_kr.utf8
- Servlet 내에서 해당 파일의 바이트로 확인
하지만 위에서 말했듯 모두 뻘짓이었다.
결국 문제는 그 파일이 생성된 서버와 확인한 서버의 locale 설정이 달랐던 것이다.
또 여기서 의문점이 든다. 분명 위의 뻘짓#3
에서 보면, locale 설정을 utf8로 맞췄는데 왜 안됐을까? 답은 서버의 locale 설정 중 LC_ALL
부분이 빈값이어서 그랬다.
export LC_ALL=ko_kr.utf8
명령어를 입력하여 정상적으로 locale 설정이 입력된 것을 확인 후 다시 확인한 결과, 정상적으로 인식되어 true
를 return
하는 걸 확인하였다.
나는 이 문제가 도저히 이해가 안돼서 일주일을 끙끔 헤맸다.(심지어 주말에도...)
헤매고 헤매다, 기술 이사님에게 여쭤보자마자 10분도 안돼서 답을 알려주셨다.
역시 짬밥은 무시할 수 없구나...
그 일주일 동안 구글링을 해도 안나오고, 스택오버플로우에도 딱히 내용이 안나오기에 나와 같은 케이스가 많진 않으리라 생각되지만, 다들 조금이라도 헤매지 말라고 작성한다.