1. 개요
백엔드 서버로 파일을 보내지 않고 프론트엔드에서 AWS S3 bucket으로 바로 파일을 업로드하기 위해서 S3 presignedUrl을 쓴다.
2. 장점
- 보안 향상: Presigned URL은 S3 버킷에 저장된 파일에 대한 일시적인 접근을 제공한다. 이 URL은 사용자가 설정한 만료 시간 후에는 더 이상 유효하지 않게 되므로, 민감한 데이터에 대한 접근을 통제할 수 있다. 또한, URL 자체가 암호화된 서명을 포함하고 있어, URL이 변경되면 접근이 불가능해진다.
- 사용자 권한 관리의 용이성: AWS 자격 증명을 갖고 있지 않은 사용자에게도 파일에 대한 접근을 허용할 수 있다 그래서 외부 사용자와 파일을 공유할 때 특히 유용하다. 권한 있는 사용자만이 presigned URL을 생성할 수 있으며, 생성된 URL을 통해서만 파일에 접근할 수 있다.
- 쉬운 통합 및 사용자 경험 개선: Presigned URL은 웹 애플리케이션과 모바일 앱에서 파일을 안전하게 업로드 및 다운로드하기 위한 간단하면서도 효과적인 방법을 제공한다. 사용자는 복잡한 인증 과정을 거치지 않고도 파일을 업로드하고 다운로드할 수 있다.
- 트래픽 관리 및 비용 절감: 서버 측에서 파일을 직접 처리하지 않고 클라이언트 측에서 S3로 직접 파일을 업로드하거나 다운로드할 수 있게 함으로써, 서버의 부하를 줄이고 트래픽 비용을 절감할 수 있다. 이는 특히 대규모 파일을 다루는 서비스에서 유용하다.
- 확장성 및 유연성: Presigned URL은 Amazon S3의 기본 보안 및 인프라 기능을 활용하므로, 개발자는 스토리지 및 데이터 전송의 확장성 문제에 대해 걱정하지 않고, 애플리케이션의 기능 개발에 더 집중할 수 있다.
3. Flow
파일 업로드
- upload를 위한 presignedUrl을 발급받는다.
- 해당 presignedUrl로 file을 put하는 요청을 보낸다. (
axios.put
)
export const uploadToS3Bucket = async (presignedURL: string, file: File) => {
try {
await axios.put(presignedURL, file, {
headers: {
'Content-Type': 'model/stl',
},
});
} catch (error) {
console.log(error);
}
};
파일 가져오기