1268 words
6 minutes
[Cloud] Signed URL

Signed URL의 개념#

Signed URL은 리소스에 대해 일시적이고 제한된 접근 권한을 부여하는 URL이다. URL에는 클라우드 업체마다 다르지만, 보통 다음의 정보들을 포함하고 있다.

  • 특정 스토리지 위치에 대한 경로
  • 제한된 유효 시간
  • 허용된 HTTP 메서드
  • 인증 서명

이러한 정보들은 쿼리 파라미터 형태로 URL에 포함된다.

예를 들어, Google Cloud의 Signed URL의 형태는 다음과 같다.

https://storage.googleapis.com/example-bucket/cat.jpeg?X-Goog-Algorithm=
GOOG4-RSA-SHA256&X-Goog-Credential=example%40example-project.iam.gserviceaccount.com
%2F20181026%2Fus-central1%2Fstorage%2Fgoog4_request&X-Goog-Date=20181026T18
1309Z&X-Goog-Expires=900&X-Goog-SignedHeaders=host&X-Goog-Signature=247a2aa45f16
9edf4d187d54e7cc46e4731b1e6273242c4f4c39a1d2507a0e58706e25e3a85a7dbb891d62afa849
6def8e260c1db863d9ace85ff0a184b894b117fe46d1225c82f2aa19efd52cf21d3e2022b3b868dc
c1aca2741951ed5bf3bb25a34f5e9316a2841e8ff4c530b22ceaa1c5ce09c7cbb5732631510c2058
0e61723f5594de3aea497f195456a2ff2bdd0d13bad47289d8611b6f9cfeef0c46c91a455b94e90a
66924f722292d21e24d31dcfb38ce0c0f353ffa5a9756fc2a9f2b40bc2113206a81e324fc4fd6823
a29163fa845c8ae7eca1fcf6e5bb48b3200983c56c5ca81fffb151cca7402beddfc4a76b13344703
2ea7abedc098d2eb14a7

스토리지 경로 (https://storage.googleapis.com/example-bucket/cat.jpeg), 서명을 생성한 알고리즘 (X-Goog-Algorithm), 사용자 인증 정보(X-Goog-Credential), 요청 시간 (X-Goog-Date), 유효 기간 (X-Goog-Expires), 서명된 헤더 (X-Goog-SignedHeaders), 서명 (X-Goog-Signature)등의 인증 정보들이 URL의 쿼리 파라미터에 포함되어 있는 것을 확인할 수 있다.

작동 방식#

클라우드 스토리지애플리케이션 서버클라이언트클라우드 스토리지애플리케이션 서버클라이언트1단계: Signed URL 발급 요청2단계: 직접 업로드업로드용 Signed URL 요청 (파일명 포함)1Signed URL 생성 요청2Signed URL 반환3Signed URL 응답4파일 업로드 (PUT 요청, Signed URL 사용)5업로드 성공 응답 (200 OK)6
  1. 클라이언트에게 Signed URL 발급을 요청한다.
  2. 요청자의 인증 정보와 서명 알고리즘을 이용해 서버 측에서 해시 기반 서명을 생성한다.
  3. 2.에서 만든 서명 정보를 담아 URL을 클라이언트에게 발급한다.
  4. 클라이언트는 발급된 URL을 통해 리소스에 접근한다.
    • 서버는 해당 URL에 포함된 서명을 통해 이를 검증한다.

Signed URL을 사용하면 장점#

signed url을 사용하면 클라이언트가 서버를 거치지 않고 클라우드 스토리지에 직접 파일을 업로드하거나 다운로드 할 수 있다.

기존 방식에서는 서버가 클라이언트로부터 파일을 수신한 뒤 클라우드에 업로드해야 하므로, 서버가 대용량 파일 트래픽을 직접 감당해야 하는 단점이 있었다.

반면, Signed URL을 사용하면 클라이언트가 서버를 거치지 않고 클라우드에 직접 업로드 할 수 있어 애플리케이션 서버의 부하를 효과적으로 줄일 수 있다.

NOTE

특히나 Spring Boot로 애플리케이션을 개발하는 입장에서, 파일 업로드의 경우 임시 파일을 생성한다거나 관련 디렉토리에 대한 메모리 문제가 발생하는 등 개발자가 처리하기 다소 번거로운 부분이 있다. Signed URL 방식을 사용하면 서버가 파일 자체를 처리하지 않기 때문에, 이러한 복잡한 처리를 클라우드 스토리지로 위임할 수 있다.

기존의 파일 업로드 방식과 Signed URL 방식의 비교#

  • 기존 방식 (서버 중계 업로드)
클라우드 스토리지데이터베이스Spring Boot 서버로드밸런서클라이언트클라우드 스토리지데이터베이스Spring Boot 서버로드밸런서클라이언트파일은 모든 애플리케이션 계층을 통과메모리/디스크에 파일 임시 저장MultipartFile 객체로 파일 처리대용량 파일의 경우서버 자원 소모 큼대용량 파일의 경우타임아웃 위험 존재POST /api/files(multipart/form-data)1요청 전달2파일 메타데이터 저장3저장 완료4파일 업로드 (SDK 사용)5업로드 완료 응답6응답 전달 (파일 URL 포함)7200 OK (파일 URL 포함)8
  • signed url 방식
클라우드 스토리지데이터베이스Spring Boot 서버로드밸런서클라이언트클라우드 스토리지데이터베이스Spring Boot 서버로드밸런서클라이언트1단계: Signed URL 요청2단계: 직접 업로드서버 리소스 소비 없음대용량 파일 지원3단계: 업로드 완료 알림GET /api/files/upload-url?filename=example.jpg1요청 전달2generateSignedUrl() 호출3Signed URL 반환4파일 메타데이터 (PENDING 상태) 생성5저장 완료6Signed URL 반환7200 OK (Signed URL)8PUT request to Signed URL9200 OK (업로드 완료)10POST /api/files/complete11요청 전달12파일 존재 여부 확인13확인 완료14메타데이터 상태 업데이트 (COMPLETE)15업데이트 완료16200 OK (완료 확인)17200 OK18

주요 클라우드 제공업체별 Signed URL 서비스#

제공업체서비스명Signed URL 관련 기능
Google CloudCloud StorageSigned URLs, Signed Policy Documents
AWSS3Pre-signed URLs, Pre-signed POST policies
Microsoft AzureBlob StorageSAS(Shared Access Signatures)
Naver CloudObject StoragePre-signed URLs
Oracle CloudObject StoragePre-Authenticated Requests
IBM CloudCloud Object StoragePresigned URLs

참고 자료#

[Cloud] Signed URL
https://punchdrunkard.github.io/posts/cloud/signed-url/
Author
42
Published at
2025-05-01
License
CC BY-NC-SA 4.0