Object Storage
카카오 i 클라우드(Kakao i Cloud)의 Object Storage는 대용량 데이터를 처리하는 데 최적화된 서비스로, 확장성과 안정성을 갖춘 객체 기반 스토리지입니다.
주요 개념
Object Storage 서비스의 주요 개념은 다음과 같습니다.
객체
Object Storage에서 모든 파일은 객체의 형태(Key-Value 구조)로 저장되며, 버킷(Bucket)이라는 객체를 담을 수 있는 컨테이너에 포함됩니다. 파일은 객체의 하위 개념으로 객체의 형태 구조에서 Value에 해당하며, 파일을 인식할 수 있는 고유 식별자인 Key를 통해 접근할 수 있습니다.
객체의 키
객체의 키(Key)는 객체 고유의 식별자로, 버킷의 파일 위치로 표현됩니다. 예시로 버킷의 kakao 폴더 하위에 위치한 i 폴더에 ’cloud.png’라는 파일이 위치한다면, 객체의 키는 kakao/i/cloud.png와 같이 표현됩니다. 객체의 키는 디렉터리 계층 구조를 표현하는 /
를 포함하여 432 bytes를 초과할 수 없습니다. 파일 업로드, 파일 이름 변경, 파일 이동 등 키(경로)가 변경되는 요청은 이와 같은 제약으로 실패할 수 있습니다.
안내
Object Storage에서 실제 데이터의 저장 및 조회는 폴더 기반 디렉터리 계층 구조가 아닌 평면 구조로 작동합니다. /
로 구분하여 디렉터리 계층 구조를 나타낸 것은 사용자 편의 기능으로, 실제로는 계층과 관계없이 키에 대해 데이터가 매핑되는 구조입니다.
파일 접근 URL
버킷에 업로드된 파일(Value)에 접근하기 위해서는 객체 키 기반의 URL을 사용해야 합니다.
URL 구조는 https://{region-name}.kakaoi.io/v1/{project-ID}/{bucket-name}/{object-key}
입니다. 파일별 URL 정보는 버킷 상세 페이지에서 확인할 수 있습니다. 자세한 설명은 파일 정보 확인하기를 참고하시기 바랍니다.
표 URL 구조
구분 | 설명 |
---|---|
region-name | 배포된 리전 이름 |
bucket-name | 생성한 버킷의 이름 |
project-ID | 배포된 프로젝트의 ID |
object-key | 업로드한 객체의 키 |
콘솔 기반 파일 관리
콘솔(웹 브라우저)에서 버킷 내 파일을 관리할 수 있습니다. 자세한 설명은 객체 관리하기 문서를 참고하시기 바랍니다.
메타 데이터
객체를 설명하는 메타 데이터를 설정할 수 있습니다. 메타 데이터는 객체에 대한 정보를 Object Storage 시스템에 전달하는 목적의 시스템 메타 데이터와 사용자가 임의로 등록할 수 있는 사용자 메타 데이터로 구분됩니다. 자세한 설명은 파일 정보 확인하기를 참고하시기 바랍니다.
버킷
버킷은 객체를 담은 컨테이너로, 객체에 대한 접근 권한 및 라이프 사이클 설정의 적용 단위로 사용됩니다. 버킷 생성 및 관리에 대한 자세한 설명은 버킷 만들기와 버킷 관리하기를 참고하시기 바랍니다.
버킷 타입
Object Storage의 버킷은 Hot 버킷과 Cold 버킷 두 가지 타입으로 제공됩니다.
Hot 버킷은 읽기 요청이 많은 데이터를 저장하기에 적합하고, Cold 버킷은 잦은 접근이 불필요한 데이터를 합리적인 비용으로 저장하는 데 적합합니다. Cold 버킷은 추후 지원 예정입니다.
라이프 사이클
버킷 라이프 사이클 정책에 따라 일정 시간이 지나면 버킷 내 파일을 자동 삭제하거나 다른 타입의 버킷으로 이동시킬 수 있습니다. 다른 타입으로의 파일 이동 기능은 추후 업데이트 예정입니다. 라이프 사이클에 대한 자세한 설명은 Life Cycle 설정하기를 참고하시기 바랍니다.
버킷 공개 설정
버킷에 대해 퍼블릭 액세스를 설정하여 불특정 다수의 해당 버킷에 대한 외부 접근을 허용할 수 있습니다. 퍼블릭 액세스 설정 시, 공개된 버킷은 읽기 전용(Read Only)으로만 제공됩니다. 자세한 설명은 버킷 권한 관리하기를 참고하시기 바랍니다.
안내
파일 업로드 및 수정 등의 관리는 콘솔 또는 API를 통해서만 가능합니다.
안정성과 확장성
Object Storage에서는 버킷 용량과 객체 수에 제한이 없기 때문에, 데이터를 서로 다른 하드웨어에 분산하거나 중복으로 저장하여 안정성을 보장합니다. 또한 Object Storage는 계층화된 디렉터리 구조를 갖는 블록 스토리지(Block Storage)와 달리 Key-Value 형태의 평면 구조로 데이터를 저장해 확장이 용이합니다.
다른 설정을 하지 않아도 파일을 제한 없이 추가할 수 있으므로, 사용자는 스토리지 용량에 대한 고려 없이 서비스에 집중할 수 있습니다. 모든 데이터를 계층 구조 없이 평면에 저장하기에 계층 구조에 따른 속도 지연이 발생하지 않고, 버킷 내 파일 개수와 관계없이 빠른 접근을 보장합니다.
권한 관리
현재 일시적으로 IAM의 권한 체계와 Object Storage 권한 체계가 다르게 적용됩니다.
IAM 역할에서 프로젝트 관리자 권한을 가진 사용자는 Object Storage 역할에서 스토리지 관리자의 권한을 가지게 됩니다. 프로젝트 멤버 권한을 가진 사용자는 Object Storage 역할에서 스토리지 편집자의 권한을 가지게 됩니다.
이미지 권한 설정 아키텍처
표 역할 설명
역할 관리 주체 | 권한 범위 | 역할(Role) | 권한(Permissions) |
---|---|---|---|
Object Storage | 버킷 | 스토리지 관리자 (storage.admin) | 버킷과 객체를 관리할 수 있는 전체 권한을 부여 - storage.buckets.create - storage.buckets.delete - storage.buckets.list - storage.buckets.get - storage.buckets.update - storage.buckets.getIamPolicy - storage.buckets.setIamPolicy - storage.objects.create - storage.objects.delete - storage.objects.list - storage.objects.get - storage.objects.update |
스토리지 편집자 (storage.editor) | 버킷의 권한 정책을 제외한 버킷과 객체를 관리할 수 있는 권한을 부여 - storage.buckets.create - storage.buckets.delete - storage.buckets.list - storage.buckets.get - storage.buckets.update - storage.objects.create - storage.objects.delete - storage.objects.list - storage.objects.get - storage.objects.update | ||
스토리지 객체 관리자 (storage.objectAdmin) | 객체 나열/생성/보기/삭제 등 전체 객체의 제어 권한을 부여 - storage.objects.create - storage.objects.delete - storage.objects.list - storage.objects.get - storage.objects.update | ||
스토리지 객체 뷰어 (storage.objectReader) | 버킷의 권한 정책을 제외한 객체 나열 및 메타 데이터를 볼 수 있는 권한을 부여 - storage.objects.list - storage.objects.get | ||
스토리지 객체 생성자 (storage.objectCreator) | 사용자에게 객체를 생성할 권한만 부여 - storage.objects.create |
권한 유형
Object Storage의 권한 유형은 다음과 같습니다.
표 권한 유형
권한 유형 | 설명 |
---|---|
개인 | 역할이 부여된 한 명의 사용자 |
역할 그룹 | IAM의 역할에 부여된 사용자 그룹 - 예시: 프로젝트 관리자 : {project_id}, 프로젝트 멤버 : {project_id}, 프로젝트 뷰어 : {project_id} |
역할 초기 설정값
구성원에 대한 역할의 초기 설정값은 다음과 같습니다.
표 역할별 초기 설정값
권한 범위 | 구성원 | 역할(Role) |
---|---|---|
버킷 | 프로젝트 관리자 : {project_id} | 스토리지 관리자 |
프로젝트 멤버 : {project_id} | 스토리지 편집자 | |
버킷 생성자 : {user} | 스토리지 관리자 |
기능별 권한
버킷 또는 객체에 해당하는 권한 및 기능은 다음과 같습니다.
표 권한별 기능
범위 | 권한(Permission) | 기능 |
---|---|---|
버킷 | storage.buckets.create | 버킷 생성하기 |
storage.buckets.delete | 버킷 삭제하기 | |
storage.buckets.list | 버킷 목록 조회하기, 버킷의 메타 데이터 조회하기 | |
storage.buckets.get | 버킷의 상세 정보, 메타 데이터 조회하기 | |
storage.buckets.update | 버킷 수정하기 - 예시: 메타 데이터 수정, Life Cycle 설정 | |
storage.buckets.getIamPolicy | 버킷 권한 정책 조회하기 | |
storage.buckets.setIamPolicy | 버킷 권한 정책 등록, 수정, 삭제하기 | |
객체 | storage.objects.create | 객체 등록하기 - 예시: 파일 업로드, 폴더 만들기 |
storage.objects.delete | 객체 삭제하기 | |
storage.objects.list | 객체 조회하기 - 예시: 객체 목록 조회 및 객체의 메타 데이터 조회 | |
storage.objects.get | 객체 상세 정보 조회하기 - 예시: 객체의 메타 데이터 조회, 파일 정보 조회, 파일 다운로드 | |
storage.objects.update | 객체 수정하기 - 예시: 객체의 메타 데이터 수정, 이름 바꾸기 | |
- storage.objects.create - storage.objects.delete - storage.objects.get | 파일 이동하기 | |
- storage.objects.create - storage.objects.get | 파일 복사하기 |
미디어 컨버트
미디어 컨버트는 버킷에 담긴 파일을 원하는 옵션에 따라 변환하고, 이미지 처리 기능을 제공하는 서비스입니다.
미디어 컨버트를 사용하면 효율적으로 트랜스 코딩할 수 있어 이미지 전송 링크 및 로딩 시 소모되는 시간을 효과적으로 단축하고, 대역폭 및 트래픽 비용을 절감할 수 있습니다. 이미지 처리, 영상 트랜스코딩 등 용도에 최적화된 변환 기능은 추후 지원 예정입니다.
또한 미디어 컨버트는 의도치 않은 파일에 대한 변환을 방지합니다. 클라우드 기반의 변환 서비스로 변환 정책 대상으로 설정한 버킷에 업로드된 파일을 제외한 나머지 의도치 않은 파일은 변환하지 않으며, 현재 Object Storage 버킷을 대상으로 설정한 정책을 따르는 미디어 콘텐츠 변환을 보장합니다.
정책 옵션
버킷의 객체에 대한 정책 옵션을 설정하여 사용자가 원하는 파일을 얻을 수 있습니다.
표 정책 옵션
OperationType | Option | 설명 |
---|---|---|
resize | sizescale | 지정한 사이즈만큼 크기가 조정된 후, 원하는 스케일만큼 크기를 변경 - 요청 형식에 따라 이미지의 너비나 높이의 비율이 유지되지 않을 수 있음 - size에 기입된 크기로 영상을 리사이즈한 후, scale을 적용함 |
crop | sizescaleoffset | 스케일 적용 후 오프셋 위치(좌측 상단)부터 지정한 사이즈만큼 자름 - scale 후 offset 위치에서부터 size만큼 크롭함 |
crop-center | size | scale을 다음 조건에 따라 적용 후, 사진의 중심을 기준으로 size만큼 크롭함 - 너비 비율이 높을 경우 : 너비 비율에 따라 이미지 크기 조절 - 높이 비율이 높을 경우 : 높이 비율에 따라 이미지 크기 조절 |
crop-width | size | width의 size만큼 이미지를 scale한 후, height의 size만큼 높이를 크롭함 |
유형별 예시
리사이즈
리사이즈(resize)는 지정한 사이즈만큼 크기가 조정된 후, 원하는 스케일만큼 크기를 변경하는 것을 의미합니다. 요청 형식에 따라 이미지의 너비/높이 비율이 유지되지 않을 수 있습니다.
표 resize의 예시
요청한 형식 | 결과 크기 | 결과 이미지 | 설명 |
---|---|---|---|
원본 | 300x100 | ![]() | |
size: 80x80 scale: 100 | 80x80 | ![]() | 비율 유지되지 않음 |
size: 300x300 scale: 100 | 300x300 | ![]() | 비율 유지되지 않음 |
size: 80x0 scale: 100 | 80x26 | ![]() | 비율 유지 |
size: 0x80 scale: 100 | 240x80 | ![]() | 비율 유지 |
size: 0x0 scale: 80 | 240x80 | ![]() | 비율 유지 |
크롭
크롭(crop)은 스케일 적용 후 오프셋 위치(좌측 상단)에서부터 지정한 사이즈만큼 자르는 것을 의미합니다.
crop
표 crop의 예시
요청한 형식 | 결과 크기 | 결과 이미지 |
---|---|---|
원본 | 300x100 | ![]() |
size: 249x135 offset: 0x0 | 249x100 | ![]() |
size: 249x135 offset: 100x50 | 200x50 | ![]() |
crop-center
표 crop-center의 예시
요청한 형식 | 결과 크기 | 결과 이미지 | |
---|---|---|---|
원본 | 300x100 | ![]() | |
size: 80x80 | 80x80 | ![]() | ![]() |
size: 400x80 | 399x80 | ![]() | ![]() |
size: 80x400 | 80x400 | ![]() | ![]() |
crop-width
표 crop-width의 예시
요청한 형식 | 결과 크기 | 결과 이미지 | |
---|---|---|---|
원본 | 300x100 | ![]() | |
size: 100x100 | 99x33 | ![]() | - 지정 높이가 크더라도 너비 비율에 따라 조정됨 ![]() |
size: 500x100 | 498x100 | ![]() | - 지정 높이가 작으면 상단에서부터 높이만큼 자름 ![]() |
사용 가이드
안내
카카오 i 클라우드의 Object Storage 서비스에 대한 자세한 사용 가이드는 How-to Guides를 참고하시기 바랍니다.
표 Object Storage 사용 가이드
문서 | 구성 |
---|---|
버킷 만들기 | 객체를 담은 컨테이너인 버킷의 생성 방법을 안내합니다. |
버킷 관리하기 | 버킷 목록 확인, 삭제, 모니터링, Life Cycle 설정 등 버킷의 관리 방법을 안내합니다. |
버킷 권한 관리하기 | 버킷 권한과 역할 부여 예시 등 버킷 권한을 관리하는 방법을 안내합니다. |
버킷 CORS 정책 설정하기 | 특정 도메인에서 실행되는 웹 애플리케이션이 다른 도메인의 자원에 접근할 수 있도록 하는 CORS 정책을 설정하는 방법을 안내합니다. |
버킷 CORS 정책 구성하기 | CORS 정책 구성 요소와 상세 규칙 등 CORS 정책을 구성하는 방법을 안내합니다. |
파일 업로드하기 | 버킷에 파일(객체)을 업로드하는 방법을 안내합니다. |
객체 관리하기 | 객체 검색, 파일 이름 변경/복사/이동 등 객체를 관리하는 방법을 안내합니다. |
이미지 정책 만들기 | Media Convert(미디어 컨버트)를 활용한 이미지 정책 생성 방법을 안내합니다. |
이미지 정책 관리하기 | 이미지 정책 목록 확인 및 정책 수정/삭제 등 이미지 정책을 관리하는 방법을 안내합니다. |