TIL-31. AWS S3 파일 삭제 안 되는 문제

solarrrrr·2021년 12월 22일
1

Today I Learned

목록 보기
31/74

하아...
일단 한숨부터 쉬고....

기업협업 중에 사용자의 프로필 사진 등록을 위해
AWS S3에 Bucket 만들어서 업로드를 하고 있었는데
수정을 위해 삭제하는 기능을 넣는 도중 블로커를 만났다.


(아무리 해도 삭제가 안 돼!!)

로직은 맞는데 업로드만 되고 S3에 올라가 있는 파일의 삭제가 안 된다.

재원님과 별별 삽질을 하다가 희귀한 현상을 발견했다.
DB의 유저 테이블에 저장된 profile url 값을 불러와서
슬라이싱을 통해 파일명만 추출한 후 사용하면 삭제가 안 되는데
S3 내에서 드래그로 파일명을 긁어오면 삭제가 된다.

...?
뭐지?

레플릿에 올려놓고 완벽하게 똑같은 두 파일명을 비교연산자로 테스트해 보니
False가 나온다.

원인은 한글 부분에서 byte의 차이!

글자수 셀 때처럼 프롬프트를 갖다놓고 이동시켜보니
a 변수 파일명의 한글 부분에서 프롬프트가 글자당 2번 이동을 한다.

웹에 올라간 파일명의 한글은 글자당 2바이트를 차지하는데
DB에 저장된 파일명은 모두 1바이트로 인식되고 있었다.

왜 이런 차이가 발생했나?

사진 파일을 업로드하고 DB에 저장할 때 이상하게도 한글 파일명은
자모가 분리된 채 저장이 됐었다.
그 문제를 해결하기 위해 아래 방법을 사용했었는데

upload_key = unicodedata.normalize('NFC', upload_key)

업로드되는 파일과 DB에 저장되는 파일 모두에 일률적으로 적용했으면 됐는데
DB에 저장되는 곳에만 적용하는 바람에 이런 문제가 발생했던 거였다.

이것 때문에 몇 시간을 날린 건지 ㅜㅜ
그래도 해결하고 퇴근할 수 있어서 무척 기쁘다.

profile
몰입

0개의 댓글