05·개념·8분
파일, 스토리지, CDN
데이터베이스는 작고 구조화된 사실에 강합니다. 4 MB짜리 사진은 둘 다 아닙니다. 파일은 오브젝트 스토리지로 갑니다. 경로 아래에 블롭을 저장하고 URL로 제공하는 서비스입니다. 데이터베이스는 경로만 보관합니다.
공개와 비공개
공개 파일은 누구나 열 수 있는 영구 URL을 가집니다. 로고, 상품 사진, 페이지에 보이는 모든 것에 알맞습니다.
비공개 파일에는 공개 URL이 없습니다. 누군가에게 보여주려면 서버가 서명된 URL을 만듭니다. 경로에 만료 시각과 서버가 승인했음을 증명하는 서명을 더한 것입니다. 만료 후에 열면 실패합니다. 청구서, 업로드, 특정 사용자에게 묶인 모든 것에 알맞습니다.
서명된 URL을 영구적인 곳에 저장하지 마세요. 경로를 저장하고 보여줄 때마다 다시 서명하세요.
앞단의 CDN
공개 파일은 CDN을 통해 제공되며, CDN은 방문자 가까이에 사본을 캐시합니다. 파일의 첫 요청은 스토리지에 닿지만 같은 지역의 다음 천 번은 캐시가 답합니다. 같은 경로의 파일을 바꿔도 한동안 예전 버전이 보이는 이유이고, 새 업로드가 보통 새 경로를 받는 이유입니다.
업로드
큰 업로드는 앱 서버를 거치지 않아야 합니다. 서버가 브라우저에 짧은 수명의 업로드 URL을 건네고, 브라우저가 바이트를 스토리지로 직접 보내며, 경로만 돌아옵니다. 서버는 다른 요청에 답할 여유를 유지합니다.
DontCode에서는
모든 프로젝트에는 프로젝트별로 격리된 공개 버킷과 비공개 버킷이 있습니다. 파일 페이지에서 어느 쪽으로든 업로드하고, 비공개 파일은 기본 1시간 뒤 만료되는 서명된 URL로 돌아옵니다. 공개 API는 100 MB가 넘는 파일을 위한 사전 서명 업로드를 제공합니다.
더 알아보기
이해도 확인
1.업로드된 청구서에 대해 데이터베이스는 무엇을 저장해야 할까요?
2.사용자가 본인 확인용 신분증을 올렸습니다. 어느 버킷일까요?
3.같은 경로에 logo.png를 새 파일로 교체했는데 방문자에게는 여전히 예전 것이 보입니다. 왜일까요?