본문으로 건너뛰기

카카오클라우드의 Object StorageSwift API와 호환성을 제공합니다.

제공되는 기능 목록

Swift API 지원 목록

정보

"카카오 클라우드는 OpenStack Swift API 스펙을 준수하나, 서비스 안정성과 보안을 위해 일부 파라미터는 제한되거나 기본값이 고정되어 제공됩니다. 아래 명세에 기재된 파라미터 위주로 사용을 권장합니다."

Swift 네이밍설명
Head Container컨테이너 존재 여부 확인
List Containers계정 내 컨테이너 목록 조회
List Capability계정이 가진 기능/권한 목록 조회 (확장)
Create Container새 컨테이너 생성
Delete Container컨테이너 삭제
Update Container Metadata컨테이너 메타데이터 수정
Get Object객체 다운로드
Head Object객체 메타데이터 조회
List Objects컨테이너 내 객체 목록 조회
Create Object객체 업로드
Update Object Metadata객체 메타데이터 수정
Delete Object객체 삭제
Copy Object객체 복사
Initiate Multipart Upload멀티파트 업로드 초기화
Upload Part멀티파트 파트 업로드
List Parts업로드된 파트 목록 조회
List Multipart Uploads진행 중인 멀티파트 업로드 목록 조회
Abort Multipart Upload멀티파트 업로드 중단
Complete Multipart Upload멀티파트 업로드 완료
Create SLO ManifestStatic Large Object(SLO) 매니페스트 업로드
Create DLO ManifestDynamic Large Object(DLO) 매니페스트 업로드
Get Object Temp URL객체에 접근 가능한 임시 URL 발급 (확장)

Swift API 사용 가이드

Head Container

API 호출 방식
메서드요청 URL
HEADhttps://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}
Request Syntax
Head Container Request Syntax
curl --request HEAD --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

Response Header
Request유형설명
X-Container-Object-CountInteger버킷 내에 존재하는 총 객체의 수
X-Container-Bytes-UsedInteger버킷에 저장된 객체들의 논리적 총 용량 (Byte)
X-Container-Bytes-Used-ActualInteger복제본(Replication) 등을 포함하여 실제로 디스크에 점유된 물리적 총 용량 (Byte)
X-Storage-PolicyString버킷에 적용된 스토리지 정책 이름 (예: Policy-0)
X-TimestampFloat버킷이 생성되거나 마지막으로 수정된 시간의 Unix Timestamp
X-Trans-IdString요청 처리에 대한 고유 트랜잭션 식별자 (장애 대응 시 활용)
X-Openstack-Request-IdStringOpenStack 서비스에서 부여한 요청 고유 ID
Content-TypeString응답 데이터의 형식 (보통 text/plain; charset=utf-8)
상태 코드
HTTP Status응답 내용설명
200   Success성공
401Unauthorized인증 실패
403Forbidden권한 없음
404Not found버킷을 찾을 수 없음

List Containers

프로젝트 내에 생성된 모든 버킷 목록을 조회합니다.

API 호출 방식

메서드요청 URL
GET   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}
Request Syntax
List Containers Request Syntax
curl --request GET --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

ListBuckets Response Syntax
[
my-bucket-01
my-bucket-02
my-bucket-03
my-bucket-04
my-bucket-05
]
Response Header
Request설명
X-Acoount-Container-Count프로젝트(Acoount) 내에 생성된 총 버킷(Container)의 개수
X-Acoount-Object-Count프로젝트 내 모든 버킷에 저장된 전체 객체(Object)의 총합
X-Acoount-Bytes-Used프로젝트 내 모든 객체의 논리적 총 용량 사용자가 업로드한 원본 파일 크기의 합계 (단위: Byte)
X-Acoount-Bytes-Used-Actual프로젝트 내 모든 객체가 실제로 점유 중인 물리적 용량 데이터 보호를 위한 복제본(Replication) 용량 (단위: Byte)
X-Acoount-Storage-Policy-Default-Placement-Container-Count'Default-Placement' 정책이 적용된 버킷의 개수
X-Acoount-Storage-Policy-Default-Placement-Object-Count'Default-Placement' 정책이 적용된 버킷 내 전체 객체의 개수
X-Acoount-Storage-Policy-Default-Placement-Bytes-Used'Default-Placement' 정책 환경에서의 논리적 총 사용량
X-Acoount-Storage-Policy-Default-Placement-Bytes-Used-Actual'Default-Placement' 정책 환경에서의 실제 물리적 총 점유량
X-Timestamp해당 프로젝트 정보가 마지막으로 수정되거나 통계가 갱신된 시점의 Unix Timestamp
X-Trans-Id해당 요청에 대해 시스템이 부여한 고유 트랜잭션 식별자 오류 발생 시 기술 지원을 위한 로그 추적에 사용
X-Openstack-Request-IdOpenStack 인프라에서 부여한 요청 고유 ID

ListCapability

프로젝트가 사용 가능한 오브젝트 스토리지의 기능 및 권한 목록을 조회합니다.

API 호출 방식

메서드요청 URL
GET   https://objectstorage.{Region_Name}.kakaocloud.com/info
Request Syntax
ListCapability Request Syntax
curl --request GET --location 'https://objectstorage.{Region_Name}.kakaocloud.com/info'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Request Header

본 요청은 별도의 인증 헤더를 요구하지 않을 수 있습니다. (설정에 따라 상이)

Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

ListCapability Response Syntax
{
"swift": {
"version": "objectstorage-api-v2.0.21-126",
"Acoount_listing_limit": 1000,
"max_meta_length": 4096,
"min_meta_value_length": 0,
"max_meta_value_length": 512,
"container_listing_limit": 1000,
"max_file_size": 5368709120,
"max_object_name_length": 396,
"min_object_name_length": 1,
"min_meta_name_length": 2,
"max_meta_name_length": 64,
"max_Acoount_name_length": 32,
"min_container_name_length": 4,
"max_container_name_length": 63,
"policies": [
{
"name": "default-placement",
"default": true
}
]
},
"tempurl": {
"methods": [
"GET"
]
},
"slo": {
"max_manifest_segments": 1000,
"min_segment_size": 1,
"max_manifest_size": 8392704
},
"tempauth": {}
}
Response Element
Request유형설명
versionString오브젝트 스토리지 API의 현재 버전
Acoount_listing_limitInteger한 번의 요청으로 조회 가능한 최대 버킷 리스트 수(1,000)
max_file_sizeInteger단일 업로드로 처리 가능한 최대 파일 크기 (단위: Byte, 약 5GB)
max_meta_name_lengthInteger메타데이터 키(Key) 이름의 최대 길이 (64자)
max_meta_value_lengthInteger메타데이터 값(Value)의 최대 길이 (512자)
max_meta_lengthInteger전체 메타데이터의 최대 합계 길이 (4,096자)
max_object_name_lengthInteger객체 이름(Key)의 최대 허용 길이 (396자)
min_container_name_lengthInteger버킷 이름의 최소 길이 (4자)
max_container_name_lengthInteger버킷 이름의 최대 길이 (63자)
policiesArray지원되는 스토리지 정책 목록
policies.nameString정책의 이름 (예: default-placement)
policies.defaultBoolean해당 정책이 기본으로 적용되는지 여부
tempurlObject임시 URL 발급 기능 관련 정보
methodsArray임시 URL을 통해 허용되는 HTTP 메서드 목록 (예: GET)
sloObject정적 대용량 객체(Static Large Object) 관련 제약 사항
max_manifest_segmentsInteger하나의 SLO 매니페스트에 포함될 수 있는 최대 파트 수 (1,000개)
min_segment_sizeIntegerSLO 구성 시 파트의 최소 크기 (1 Byte)
max_manifest_sizeIntegerSLO 매니페스트 파일 자체의 최대 크기 (Byte)
tempauthObject임시 인증 모듈 활성화 여부를 나타내는 객체

Create Container

새 버킷을 생성합니다.

API 호출 방식

메서드요청 URL
PUT   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}
Request Syntax
Create Container Request Syntax
curl --request PUT --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 201 응답을 받습니다.

Delete Container

버킷을 삭제합니다.

API 호출 방식

메서드요청 URL
DELETE   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}
Request Syntax
Delete Container Request Syntax
curl --request DELETE --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 204 No Content 응답을 받습니다.

Update Container Metadata

버킷의 메타데이터를 생성, 수정, 삭제 합니다.

API 호출 방식

메서드요청 URL
POST   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}
Request Syntax
Update Container Metadata Request Syntax
curl --request POST --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
X-Container-Meta-keyString선택  메타 데이터 값 Value
ex) key = 메타데이터 Key 이름, Value = 메타 데이터값
X-Remove-Container-Meta-keyString선택  메타 데이터 삭제
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 204 No Content 응답을 받습니다.

Get Object

객체를 다운로드 합니다.

API 호출 방식

메서드요청 URL
GET   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}
Request Syntax
Get Object Request Syntax
curl --request GET --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다. 요청된 객체를 불러옵니다.

Response Header
Request설명
Dateresponse 생성 시간
Content-Typebody에 담긴 content의 형식
Content-LengthObject 크기
Connectionconnection 재활용 여부
Accept-Ranges클라이언트가 원하는 파일의 일부분을 바이트 단위로 요청할 수 있음
Etag웹 서버가 리소스의 내용이나 메타데이터가 변경되었는지를 식별하기 위한 식별자
Last-Modified마지막 수정일
X-Object-Storage-ClassInteger
X-Openstack-Request-IdString
X-Trans-IdString
X-Rgw-Object-TypeString

Head Object

객체 Head 정보를 조회합니다.

API 호출 방식

메서드요청 URL
HEAD   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}
Request Syntax
Head Object Request Syntax
curl --request HEAD --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

Response Header
Request설명
Dateresponse 생성 시간
Content-Typebody에 담긴 content의 형식
Content-LengthObject 크기
Connectionconnection 재활용 여부
Accept-Ranges클라이언트가 원하는 파일의 일부분을 바이트 단위로 요청할 수 있음
Etag웹 서버가 리소스의 내용이나 메타데이터가 변경되었는지를 식별하기 위한 식별자
Last-Modified마지막 수정일
X-Object-Storage-ClassInteger
X-Openstack-Request-IdString
X-Trans-IdString
X-Rgw-Object-TypeString

List Objects

버킷에 저장된 오브젝트(파일, 폴더) 목록을 조회합니다.

API 호출 방식

메서드요청 URL
GET   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}?format=json
Request Syntax
List Containers Request Syntax
curl --request GET --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}?format=json' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Request Query
Request유형필수 여부설명
prefixQuery선택Directory path
- 예시: image/small
delimiterQuery선택delimiter를 key로 사용할 경우에는 / 입력 필요
limitQuery선택목록 개수
- 기본값: 1000 (최대 1,000개 까지 조회 가능)
markerQuery선택검색 조건
- (Object name > Marker )
formatQuery선택response 받을 포맷
- plain(기본값)
- json
- xml
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

List Objects Response Syntax
[
{
"name": "apple1.JPG",
"hash": "4fabff2e18b68ae780cf0bc54d1fec82",
"bytes": 1699756,
"content_type": "image/jpeg",
"last_modified": "2026-02-19T04:44:38.302Z"
},
]
Response Elements
Response유형설명
nameString오브젝트 이름
content_typeString해당 오브젝트를 PUT할 때 입력받았던 Content-Type 값이 반환
- 유형: directory / 이미지 / 구분 바이너리 등
bytesint오브젝트 크기
hashString파일 고유값
last_modifiedString최종 수정일시
- 형식: RFC3339 - 예시: 2020-07-01T00:00:00Z
subdirStringpseudo-directory인 경우 이 값만 제공됨

Create Object

버킷에 객체를 업로드 한다.

API 호출 방식

메서드요청 URL
PUT   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}
Request Syntax
Create Object Request Syntax
curl --request PUT --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
--data-binary {local_file_part_path}
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString선택Put(업로드)하는 오브젝트가 파일인 경우 mime type 문자열을 입력
- 콘텐츠 유형을 입력하지 않은 Put(업로드) 경우, Object Storage 내부적으로 현재 업로드하는 파일의 유형을 application/octet-stream으로 처리
X-Object-Meta-{name}String선택버킷 메타 정보로, 사용자가 지정할 메타 데이터 이름을 {name}에 입력
Content-Lengthint선택콘텐츠 길이
Transfer-EncodingString선택인코딩 방식
- chunked : 데이터가 일련의 청크 내에서 분할하여 전송하는 방식으로, chunked 값이 지정된 경우는 Content-Length Header는 전송되면 안 됨
- compress : LZW 알고리즘을 사용하는 압축 방식
- deflate : deflate 알고리즘을 사용하는 압축 방식
- gzip : LZ77 알고리즘을 사용하는 압축 방식
- identity : 압축이나 수정이 없는 전송 방식
Request Body

객체 데이터. (업로드하는 실제 데이터입니다.)
파일 스트림(Byte Stream)을 본문에 직접 담아 전송합니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

Update Object Metadata

객체의 메타데이터를 생성, 수정, 삭제 합니다.

API 호출 방식

메서드요청 URL
POST   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}
Request Syntax
Update Object Metadata Request Syntax
curl --request POST --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString선택Put(업로드)하는 오브젝트가 파일인 경우 mime type 문자열을 입력
- 콘텐츠 유형을 입력하지 않은 Put(업로드) 경우, Object Storage 내부적으로 현재 업로드하는 파일의 유형을 application/octet-stream으로 처리
X-Object-Meta-{name}String선택버킷 메타 정보로, 사용자가 지정할 메타 데이터 이름을 {name}에 입력
Content-Lengthint선택콘텐츠 길이
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

Delete Object

객체를 삭제합니다.

API 호출 방식

메서드요청 URL
DELETE   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}
Request Syntax
Delete Object Request Syntax
curl --request DELETE --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}' \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Query
Request유형필수 여부설명
multipart-manifestQuery필수  delete 값을 입력하여 연결된 모든 세그먼트를 함께 삭제하도록 지정합니다.
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 204 응답을 받습니다.

Copy Object

객체를 복사 합니다.

API 호출 방식

메서드요청 URL
PUT   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{dest_Bucket_Name}/{dest_Object_Key}
Request Syntax
Copy Object Request Syntax
curl --request PUT --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{dest_Bucket_Name}/{dest_Object_Key}' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Content-Length: 0' \
--header 'X-Copy-From: /{src_bucket_name}/{src_object_key}'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
dest_Bucket_Name복사된 객체가 저장될 대상(목적지) 버킷 이름
dest_Object_Key복사되어 새로 생성될 대상(목적지) 객체의 고유 키(경로 포함)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-LengthString필수  application/json으로 고정
X-Fresh-MetadataString선택  True로 설정 시 원본의 메타데이터를 복사하지 않고 요청에 포함된 새 메타데이터만 적용
X-Copy-FromString필수  원본 객체의 경로
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 201 응답을 받습니다.

Initiate Multipart Upload

대용량 객체 업로드를 위해 멀티파트 업로드를 **초기화(Initiate)**합니다.
이 요청이 성공해야만 파일 조각(Part)들을 올릴 수 있는 고유한 UploadId가 발급됩니다.

API 호출 방식

메서드요청 URL
POST   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_name}/{Object_Key}?uploads
Request Syntax
Initiate Multipart Upload Request Syntax
curl --request POST --location `https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_name}/{Object_Key}?uploads` \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

DeleteObjects Response Syntax
    <?xml version="1.0" encoding="UTF-8"?>
<InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Tenant>String</Tenant>
<Bucket>String</Bucket>
<Key>String</Key>
<UploadId>String</UploadId>
</InitiateMultipartUploadResult>
Response Elements
Response설명
Tenant프로젝트 ID
Bucket업로드가 진행되는 버킷 이름
Key업로드될 객체의 이름 (Path)
UploadId멀티파트 업로드를 식별하는 고유 ID. UploadPart, CompleteMultipartUpload 호출 시 사용

Upload Part

대용량 객체를 여러 개의 파트로 나누어 업로드합니다.
모든 파트 업로드가 완료된 후 CompleteMultipartUpload를 호출하여 하나의 객체로 결합해야 합니다.

API 호출 방식

메서드요청 URL
PUT   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{Object_Key}?partNumber={n}&uploadId={Upload_Id}
Request Syntax
Upload Part Request Syntax
curl --request PUT --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{Object_Key}?partNumber={n}&uploadId={Upload_Id}' \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Content-Type: application/octet-stream' \
--upload-file {local_file_part_path}
Path Parameters

| Path | 설명 | | --- | --- | --- | --- | | Region_Name | 서비스 리전 이름 (예: kr-central-2) | | Acoount | 프로젝트의 고유 ID | | Bucket_Name | 버킷 이름 | | Object_Key | 객체의 고유 키(경로 포함) |

Request Query
Request유형필수 여부설명
uploadIdQuery필수  Initiate Multipart Upload에서 반환된 large object의 고유 upload id
partNumberQuery필수  현재 업로드하는 부분 파일의 large object 상 부분 순번 (1~10000)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/octet-stream으로 고정
Request Body

객체 데이터. (업로드하는 실제 데이터입니다.)
파일 스트림(Byte Stream)을 본문에 직접 담아 전송합니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 201 응답을 받습니다.

Response Header
Request설명
Dateresponse 생성 시간
Etag웹 서버가 리소스의 내용이나 메타데이터가 변경되었는지를 식별하기 위한 식별자
X-Trans-IdString
X-Openstack-Request-IdString

List Part

특정 멀티파트 업로드에 대해 성공적으로 업로드된 파트 목록을 조회합니다.

API 호출 방식

메서드요청 URL
GET   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{Object_Key}?uploadId={Upload_Id}
Request Syntax
List Part Request Syntax
curl --request GET --location 'https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{Object_Key}?uploadId={Upload_Id}' \
--header 'X-Auth-Token: {x-auth-token}' \
Path Parameters
Path설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Query
Request유형필수 여부설명
uploadIdQuery필수  Initiate Multipart Upload에서 반환된 large object의 고유 upload id
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

Response Header
Request설명
Dateresponse 생성 시간
Etag웹 서버가 리소스의 내용이나 메타데이터가 변경되었는지를 식별하기 위한 식별자
X-Trans-IdString
X-Openstack-Request-IdString

List Multipart Uploads

특정 버킷에서 완료되지 않고 진행 중인 모든 멀티파트 업로드 목록을 조회합니다.

API 호출 방식

메서드요청 URL
GET   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{Object_Key}?uploads
Request Syntax
List Multipart Uploads Request Syntax
curl --request GET --location `https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{Object_Key}?uploads` \
--header 'X-Auth-Token: {x-auth-token}' \
Path Parameters
Path설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

List Multipart Uploads Response Syntax
  <?xml version="1.0" encoding="UTF-8"?>
<ListMultipartUploadsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Tenant>String</Tenant>
<Bucket>String</Bucket>
<NextKeyMarker>String</NextKeyMarker>
<NextUploadIdMarker>String</NextUploadIdMarker>
<MaxUploads>Integer</MaxUploads>
<IsTruncated>Boolean</IsTruncated>
<Upload>
<Key>String</Key>
<UploadId>String</UploadId>
<Initiator>
<ID>String</ID>
<DisplayName>String</DisplayName>
</Initiator>
<Owner>
<ID>String</ID>
<DisplayName>String</DisplayName>
</Owner>
<StorageClass>String</StorageClass>
<Initiated>Timestamp</Initiated>
</Upload>
</ListMultipartUploadsResult>
Response Elements
Response유형설명
TenantString프로젝트 ID
BucketString버킷 이름
NextKeyMarkerString다음 요청에서 key-marker 요청 매개변수에 사용해야 하는 값
NextUploadIdMarkerString다음 요청에서 upload-id-marker 요청 매개변수에 사용해야 하는 값
MaxUploadsInteger멀티파트 업로드의 최대 수
IsTruncatedStringPart 목록이 잘렸는지 여부
KeyString업로드할 객체 키
UploadIdString멀티파트 업로드 ID
IDString프로젝트 ID
DisplayNameString프로젝트 이름
StorageClassString스토리지 클래스
InitiatedTimestamp멀티파트 업로드 시작 일시

Abort Multipart Upload

진행 중인 멀티파트 업로드를 중단하고 업로드된 모든 파트를 삭제합니다.
중단된 UploadId는 더 이상 사용할 수 없습니다.

API 호출 방식

메서드요청 URL
DELETE   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{Object_Key}?uploadId={upload_id}
Request Syntax
Abort Multipart Upload Request Syntax
curl --request DELETE --location `https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{Object_Key}?uploadId={upload_id}` \
--header 'X-Auth-Token: {x-auth-token}' \
Path Parameters
Path설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Query
Request유형필수 여부설명
uploadIdQuery필수  Initiate Multipart Upload에서 반환된 large object의 고유 upload id
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 204 응답을 받습니다.

CompleteMultipartUpload

API 호출 방식

메서드요청 URL
POST   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{Object_Key}?uploadId={upload_id}
Request Syntax
CompleteMultipartUpload Request Syntax
curl --request POST --location `https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{Object_Key}?uploadId={upload_id}` \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Content-Type: application/json' \
--data '<CompleteMultipartUpload>
<Part>
<PartNumber>1</PartNumber>
<ETag>"897a0f868d69985acdbf1e9f9d6f3603"</ETag>
</Part>
</CompleteMultipartUpload>'
Path Parameters
Path설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Query
Request유형필수 여부설명
uploadIdQuery필수  Initiate Multipart Upload에서 반환된 large object의 고유 upload id
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body
CompleteMultipartUpload Response Syntax
<CompleteMultipartUpload>
<Part>
<ETag>String</ETag>
<PartNumber>Integer</PartNumber>
</Part>
...
</CompleteMultipartUpload>
Request Elements
Request유형필수 여부설명
ETagString선택객체의 해시값
PartNumberInteger선택파트 식별 번호 (1 - 10,000 사이의 양의 정수)
Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

SLO(Static Large Object) 방식

SLO 방식은 DLO와 동일하게 Segment를 분할해 업로드하지만, Segment Naming 제약이 없고 사이즈가 동일하지 않아도 된다는 차이점이 있습니다. 또한, Manifest를 제일 마지막에 업로드해야 합니다. SLO Manifest Object는 Segment Object 목록을 순서대로 작성하여 입력해야 합니다. 현재 KC Object Storage에서는 최대 1,000개의 Segment Object를 하나의 Manifest에 입력할 수 있습니다.

SLO Manifest Object 생성 요청을 하면 각 Segment Object가 입력된 경로에 있는지, etag Value와 Segment object Size가 일치하는지 확인합니다. 정보가 일치하지 않으면 Manifest Object가 생성되지 않습니다. 또한, Manifest에 etag를 통해 Segment Object의 무결성을 보장합니다.

  1. 하나의 단일 대용량 오브젝트(Large Object)를 사용자가 원하는 크기로 분할(Segment)합니다.
  2. 각 Segment를 접근 권한이 있는 버킷에 업로드합니다. 동일한 버킷이 아니어도 되나, 접근 권한이 있는 프로젝트(Acoount) 버킷이어야 합니다.
  3. 위의 업로드된 Segment 오브젝트의 Path, Etag, Size가 기록된 Manifest를 Body로 입력하여, SLO Manifest Object를 업로드합니다.
안내

Manifest에 대한 자세한 예제는 https://objectstorage.kr-central-2.kakaocloud.com/info에서 참고하시기 바랍니다.

Create SLO Manifest

업로드된 세그먼트(조각)들의 정보를 담은 JSON 매니페스트 파일을 업로드하여 하나의 정적 대용량 객체(SLO)를 생성합니다.

API 호출 방식

메서드요청 URL
PUT   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{SLO Manifest Object}?multipart-manifest=put
Request Syntax
Create SLO Manifest Request Syntax
curl --request PUT --location `https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{SLO Manifest Object}?multipart-manifest=put` \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'Content-Type: application/json' \
--data '[
{
"path": "{Bucket_Name}/{Segment Object}",
"etag": "{Segment Object Etag}}",
"size_bytes": {Segment Object Size}
},
{
"path": "{Bucket_Name}/{Segment Object}",
"etag": "{Segment Object Etag}}",
"size_bytes": {Segment Object Size}
},
{
"path": "{Bucket_Name}/{Segment Object}",
"etag": "{Segment Object Etag}}",
"size_bytes": {Segment Object Size}
}
]'
Path Parameters
Path설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name버킷 이름
SLO Manifest ObjectManifest Object 이름
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body
Create SLO Manifest Response Syntax
[
{
"path": "jay-cool-1/video_part_aa",
"etag": "841aa70a236b55d22260aa4defe699cf",
"size_bytes": 52428800
},
{
"path": "jay-cool-1/video_part_ab",
"etag": "30c4e8955088e398b2b87d52554d3f90",
"size_bytes": 23052099
}
...
]

Request Elements
Request유형필수 여부설명
PathString필수Path/Segment Object 형식으로 입력
- Path: Object를 업로드할 경로
- Segment Object: path 하위의 Segment object
ETagString필수객체의 해시값
size_bytesInteger필수Segment Object 사이즈
안내

Manifest PUT 시 etagsize_bytes를 입력한 후, 기존의 업로드된 segment object의 etagsize_bytes 값을 비교하여 일치하지 않을 시 오류를 발생시킴

Response Syntax

동작에 성공하면, 서비스는 HTTP 201 응답을 받습니다.

Create DLO Manifest

특정 접두어(Prefix)를 가진 객체들을 하나의 큰 객체로 묶어주는 매니페스트 파일을 생성합니다.

API 호출 방식

메서드요청 URL
PUT   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{DLO Manifest Object}
Request Syntax
Create DLO Manifest Request Syntax
curl --request PUT --location `https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Account}/{Bucket_Name}/{DLO Manifest Object}` \
--header 'X-Auth-Token: {x-auth-token}' \
--header 'X-Object-Manifest: {Bucket_Name}/{Segment_Object_Prefix}' \
--header 'Content-Length: 0'
Path Parameters
Path설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
X-Object-ManifestString필수  조각 파일들이 위치한 {버킷명}/{접두어}를 지정합니다.
- 오름차순 Sequence Number Naming 필요함 (예시: segment_0001 ... segment_0002 )
Response Syntax

동작에 성공하면, 서비스는 HTTP 201 응답을 받습니다.

Get Object Temp URL

Object 다운로드용 Temp URL 생성

Object 다운로드용 Temp URL을 생성합니다.
오브젝트에 대한 접근 권한이 있는 사용자는 특정 기간 유효한 다운로드용 Temp URL을 생성합니다. temp_url_expires는 유효 시간으로 사용자가 지정한 시간까지 다운로드 받을 수 있도록 설정합니다.

API 호출 방식

메서드요청 URL
GET   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}?temp_url&temp_url_expires={temp_url_expires}
Request Syntax
Object 다운로드용 Temp URL 생성 Request Syntax
curl --request GET --location `https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}?temp_url&temp_url_expires={temp_url_expires}` \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Query
Request유형필수 여부설명
temp_urlString필수  TempUrl 발급 요청을 나타내는 키
temp_url_expirestimestamp필수  발급된 TempUrl의 유효시간
- sec 단위
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다.

Response Body
Get Object Temp URL response Syntax
    {
"url": "/v1/{project_id}/object-reg-test-1/test.txt?temp_url_sig={temp_url_sig}&temp_url_expires={temp_url_expires}",
"sig": "{sig}"
}
Response Elements
Response유형설명
urlstring해당 오브젝트를 expire 시간 안에 다운로드 받을 수 있는 임시 URL
sigstring해당 URL의 signature이며 object의 expire 시간 안에서 유효한 signature

Temp URL을 사용한 Object 다운로드

Temp URL을 사용해 Object 다운로드 합니다.
생성된 Temp URL을 사용하면 발급 시 신청한 유효 시간 동안 해당 오브젝트를 다운로드할 수 있습니다.
Temp URL을 사용할 경우, X-Auth-Token 없이 다운로드받을 수 있으므로 Temp URL의 발급자는 신뢰할 수 있는 사용자에게 전달해야 합니다.

API 호출 방식

메서드요청 URL
GET   https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}?temp_url&temp_url_expires={temp_url_expires}
Request Syntax
Temp URL을 사용한 Object 다운로드 Request Syntax
curl --request GET --location `https://objectstorage.{Region_Name}.kakaocloud.com/v1/{Acoount}/{Bucket_Name}/{Object_Key}?temp_url_sig={temp_url_sig}&temp_url_expires={temp_url_expires}` \
--header 'X-Auth-Token: {x-auth-token}'
--header 'Content-Type: application/json'
Path Parameters
변수명설명
Region_Name서비스 리전 이름 (예: kr-central-2)
Acoount프로젝트의 고유 ID
Bucket_Name대상 버킷 이름
Object_Key객체의 고유 키(경로 포함)
Request Query
Request유형필수 여부설명
temp_url_sigQuery필수  발급받은 Temp URL Response의 signature 정보
temp_url_expiresQuery필수  발급받은 Temp URL Response의 유효시간 정보
- 단위: Unix epoch time
filenameQuery선택오브젝트를 브라우저에서 다운로드받을 때 사용할 custom 파일명
- utf-8 percent encoding된 문자열
Request Header
Request유형필수 여부설명
X-Auth-TokenString필수  사용자 인증 토큰
Content-TypeString필수  application/json으로 고정
Request Body

이 요청은 Body 값을 가지지 않습니다.

Response Syntax

동작에 성공하면, 서비스는 HTTP 200 응답을 받습니다. 요청된 객체를 불러옵니다.