https://sunrinsecurity.com 의 첨부파일들이 전부 사라졌다.
파일 업로드 부분의 테스트 코드를 바보같이 짜서 그랬다..
파일 업로드 테스트 이후 업로드 된 파일들을 모조리 삭제하는데, 그게 프로덕션 미디어 폴더랑 같은 폴더여서, 테스트가 돌때마다 첨부파일이 사라지고 있던 것이었다.
아무튼, 열심히 파일을 복구해서 다시 서버에 파일을 복구했는데, 다운로드가 안되는것이다..!
엥..?
디버깅
뭐가 문젠지 모르겠어서 열심히 디버깅을 해 보았는데, 다음과 같은 결과를 얻을 수 있었다.
- 파일명이 영문이면 잘 다운로드가 된다
- 파일명이 한글이면 다운로드가 안된다
- 서버에 접속해서, 파일명이 한글인 친구들의 이름을 변경해보려 했는데 안되었다.
무엇을 잘 못 했는지 모르겠어서, 로컬(맥)에서 같은 환경을 구현해보았다.
엥? 잘 되네?
로컬과 프로덕션의 환경은 각각 다음과 같다.
프로덕션:
- Ubuntu 20.04 LTS
- Locale: en.UTF-8
- Nginx리버스 프록시로 Node 서빙
로컬:
- macOS 11.2.1
- Locale: UTF-8
- 테스트시에는 생 Node로 서빙
pm2를 사용하였기 때문에, 굳이 Dockerize는 진행하지 않았다.
그래서 운영체제의 차이가 있었는데, 이건 뭐 어떻게 할 수 가 없어서 먼저 Nginx의 문제인가 하고 디버깅을 해 보았다.
그리고 이어지는 삽질...
- 프로덕션 서버의 Nginx의 문제인가?
- 아니었다. Nginx를 통하지 않고, 프로덕션 서버 안의 curl을 통해 localhost를 호출하여도 같은 문제가 발생하였다.
- 서버측의 로케일이 다른게 문제인가?
- 아니었다. 한국어 로케일 셋을 깔고, 계속 바꿔주고 리부팅을 해도 달라지는것은 없었다.
결과. 어이가없네...
잠깐 아까 얻었던 결과를 다시 보자.
- 파일명이 영문이면 잘 다운로드가 된다
- 파일명이 한글이면 다운로드가 안된다
- 서버에 접속해서, 파일명이 한글인 친구들의 이름을 변경해보려 했는데 안되었다.
그래서 '모든 파일명을 영어로 바꿔야하나 ...' 생각하던 찰나, 다음과 같은 생각이 떠올랐다.
잠깐, 파일명의 인코딩은? 왜 터미널에서 내가 직접 한글을 치면 파일을 인식하지 못하지?
그래서 파일명을 전부 utf8로 다시 바꿔주었다.
convmv -r -f utf8 -t utf8 --nfc --notest .
이런.. 잘 작동한다 ㅠㅠ
맥에서의 한글의 문제는 윈도우와 상호 작업을 할 때에만 생기는 문제인 줄 알았는데, 리눅스에서도 생기는 문제인가보다.
같은 UTF-8이긴 하지만, 맥과 리눅스의 그것은 좀 다르다고 한다. 맥에서는 NFD라는 방식으로, 리눅스에서는 NFC라는 방식을 사용하기 때문에 그랬다고 한다.
참고한 링크:
lethean.github.io/2009/10/06/fix-broken-hangul-filename-from-mac-os-x-in-linux/
'Computer Science' 카테고리의 다른 글
약빨고 22시간 개발 한 썰(부제: inssa.club 개발기) (0) | 2021.03.23 |
---|---|
Docker Stack의 env-file 설정시 주의 사항 (0) | 2021.03.22 |
Redis는 뭐고.. In Memory 솔루션은 뭐야? (0) | 2021.02.25 |
Nginx 리버스 프록시를 사용하여 배포 할 때 해야 할 것들 (0) | 2021.02.22 |
다크모드 적용시: StatusBar (상단바) 아이콘 색상 바꿀때 유의 할 점 (0) | 2021.01.29 |