Today I Learned
날짜
2024년 12월 13일 금요일
내용
pre-signed url이 작동하지 않는 이유
현재 티켓페이지에서 사용자가 추가한 이미지와 파일을 저장하는 방식은 그다지 좋지 않다.
- 서버에게 티켓의 이미지와 파일을 S3에 저장해달라고 요청을 보냄
- 서버는 저장 후 그 링크를 반환함
- 반환받은 링크를 티켓 데이터에 추가하여 티켓 데이터 생성 요청을 보냄
이 방식이다.
만약 클라이언트가 S3에 저장할 수 있다면 굳이 서버에게 파일을 보내지 않아도 된다. 이를 위해 pre-signed-url을 보내도록만 요청을 변경해야 한다. 이 URL은 설정한 시간만큼만 유효한 URL이다. 서버에게 어떤 버킷 내 어떤 키에 생성해야 할지 알려주고 url을 받아왔으나 생성이 되지 않는다. 클라이언트의 요청에 0 Unknown Error만 나와 정확한 원인도 모른다… 구글링을 한참 해보니 pre-signed url을 생성하기 위해 boto3 클라이언트를 초기화할 때 리전을 입력해보라고 한다.
1
2
3
4
5
# 기존
s3 = boto3.client("s3")
# 개선
s3 = boto3.client("s3", region_name=REGION)
이랬더니 진짜 보내진다! 애초에 사용 못할 url이었으면 보내질 말던가!
회고
어쨌든 성공함 티켓페이지 개선 끝.