PresignedURL을 발급 받으세요... 🤔?

ujinsim·2025년 3월 16일
post-thumbnail

파일 업로드 API를 연동하려던 중, 백엔드 분께 아래와 같은 설명을 받았다.

“presignedurl 발급 받고
presignedurl로 s3에 올린 후
→ 파일 개수만큼 위 1,2번 반복 후
presignedurl 발급 때 만들어진 모든 id를
answer의 value값으로 보내주시면 될 것 같아요.”

처음 봤을 땐 솔직히 이게 무슨 말인지 감이 잘 안 왔다.
Presigned URL? id를 보내라고? answer의 value? 의문이 줄줄이 이어졌다.

그래서 우선, 이 내용을 이해하기 위해 S3 Presigned URL이란 무엇인지부터 정리하고 가려고 한다.

Amazon S3란?

Amazon S3 (Simple Storage Service)는 AWS에서 제공하는 객체 스토리지 서비스로, 다양한 형태의 데이터를 인터넷 상에서 안전하게 저장하고 관리할 수 있는 공간이다.

S3를 사용하는 이유

  1. 파일 저장소: 이미지, 문서, 비디오 등을 "버킷" 단위로 저장
  2. 확장성: 파일 수나 용량에 제한 없이 저장 가능
  3. 보안: 암호화 및 세밀한 접근 제어 정책 제공
  4. 백업/복원 기능: 데이터 보호 및 복원에 유리
  5. 정적 웹사이트 호스팅: HTML, CSS, JS 파일을 직접 호스팅할 수 있음
  6. 글로벌 전송: CDN과 연계해 빠르게 배포 가능
  7. 비용 효율: 사용한 만큼만 과금되는 요금제

그럼, S3에 있는 파일을 어떻게 공유할까?

S3에 저장된 파일을 다른 사용자와 공유하는 방식은 다음과 같다.

  1. 퍼블릭으로 만들기
  • 장점: 설정 간단
  • 단점: 누구나 접근 가능 → 보안 취약
  1. IAM 자격증명(Access Key Pair) 공유
  • 장점: 제한된 사용자만 접근 가능
  • 단점: 자격증명 유출 위험, 관리 어려움
  1. IAM 사용자 생성
  • 장점: 사용자별 권한 제어 가능
  • 단점: 사용자 수 제한, 복잡한 관리
  1. Presigned URL 사용
  • 임시 URL을 발급하여 권한 없이도 파일에 접근 가능
  • 만료 시간 및 요청 방식 설정 가능 (GET, PUT 등)
  • 생성자의 권한을 위임받아 제한된 시간 동안만 유효
  • 보안성과 편의성을 모두 확보할 수 있음

Presigned URL이란?

Presigned URL은 S3에 저장된 특정 객체에 대해 일시적인 접근 권한을 부여한 URL이다.

  • URL을 생성한 사용자의 권한을 기반으로 작동
    일반적으로 파일 업로드(PUT) 또는 다운로드(GET) 용도로 사용

  • 만료 시간(예: 10분, 1시간 등)을 지정할 수 있다

이제 다시, 백엔드분의 말을 해석해보자

"presignedurl 발급 받고 → s3에 올리고 → id를 answer에 담아 보내달라"

이걸 단계별로 정리하면 다음과 같다.

  1. Presigned URL 발급 요청
    클라이언트는 서버에 Presigned URL 발급을 요청한다.
    이때 서버는 S3 업로드용 URL과 함께 해당 파일을 식별할 수 있는 ID (Key)를 함께 응답한다.

  2. 클라이언트가 S3에 파일 업로드
    응답받은 URL로 클라이언트가 직접 S3에 파일을 업로드한다. (PUT 요청)

  3. 파일이 여러 개일 경우
    위 과정을 파일 개수만큼 반복한다.
    각 파일마다 Presigned URL과 Key를 받아서 각각 업로드한다.

  4. 업로드 완료 후, Key 목록 전송
    업로드한 모든 파일의 Key(ID)를 배열로 모아 서버로 전송한다.
    예: answer.value = [key1, key2, key3]

  5. 서버는 해당 Key를 저장
    이후 필요한 요청에서 해당 Key를 기반으로 다운로드용 Presigned URL을 다시 생성하거나, 다른 처리를 할 수 있다.

Presigned URL은 클라이언트가 직접 S3에 안전하게 파일을 업로드할 수 있게 해주는 임시 URL이다.
서버가 발급한 URL을 통해 클라이언트는 별도 인증 없이 S3에 직접 파일을 올릴 수 있다.
이때 발급된 파일의 Key만 서버로 전달하면 되고, 이후 서버는 해당 Key를 활용해 파일을 조회하거나 다운로드 URL을 다시 생성할 수 있다.

마무리

처음엔 Presigned URL이라는 단어조차 생소했지만, 개념과 흐름을 하나씩 정리해보니 이 방식이 왜 널리 쓰이는지 이해할 수 있었다.
S3에 직접 업로드하면서도 보안과 효율을 동시에 챙길 수 있는 구조.
앞으로는 더 복잡한 업로드 흐름에서도 Presigned URL을 자신 있게 활용할 수 있을 것 같다.

[참고자료]

profile
프론트엔드 공부 중.. 💻👩‍🎤

0개의 댓글