개요
**Object Storage(오브젝트 스토리지)**는 데이터를 파일·블록이 아닌 객체(Object) 단위로 저장하는 스토리지 방식. 각 객체는 데이터 + 메타데이터 + 고유 ID로 구성.
- 대표 서비스: AWS S3, Google Cloud Storage, Azure Blob Storage
- 접근 방식: HTTP API (REST)
- 마운트: FUSE(fuse)로 로컬 파일시스템처럼 마운트 가능
파일시스템 vs 블록 vs 오브젝트
| 항목 | 파일시스템 | 블록 스토리지 | 오브젝트 스토리지 |
|---|---|---|---|
| 구조 | 계층적 디렉토리 | 블록 단위 | 플랫 네임스페이스 |
| 접근 | 파일 경로 | 디바이스 직접 | HTTP API |
| 확장성 | 제한적 | 제한적 | 무제한 (페타바이트+) |
| 수정 | 부분 수정 가능 | 부분 수정 가능 | 객체 전체 교체 |
| 용도 | 로컬 파일 | DB, VM 디스크 | 백업, 미디어, 로그 |
주요 서비스
| 서비스 | 제공사 | 특징 |
|---|---|---|
| Amazon S3 | AWS | 업계 표준, API 기준점 |
| Google Cloud Storage | GCP | S3 호환 API, BigQuery 연동 |
| Azure Blob Storage | Microsoft | Azure Blob Storage |
| Cloudflare R2 | Cloudflare | 이그레스 비용 없음, S3 호환 |
| MinIO | 오픈소스 | 자체 호스팅, S3 호환 |
| Backblaze B2 | Backblaze | 저렴한 가격, S3 호환 |
S3 API 호환성
대부분의 오브젝트 스토리지가 AWS S3 API 호환을 지원함 → 코드 변경 없이 서비스 교체 가능.
import boto3
# AWS S3
s3 = boto3.client('s3')
# MinIO (자체 호스팅, S3 호환)
s3 = boto3.client('s3',
endpoint_url='http://localhost:9000',
aws_access_key_id='minioadmin',
aws_secret_access_key='minioadmin'
)
# 파일 업로드
s3.upload_file('local.txt', 'my-bucket', 'remote.txt')
# 파일 다운로드
s3.download_file('my-bucket', 'remote.txt', 'local.txt')FUSE 마운트
오브젝트 스토리지를 로컬 파일시스템처럼 마운트:
- fuse: 사용자 공간 파일시스템 인터페이스
- s3fs: S3를 FUSE로 마운트
- gcsfuse: Google Cloud Storage FUSE 마운트
- blobfuse: Azure Blob Storage FUSE 마운트
# s3fs 예시
s3fs my-bucket /mnt/s3 -o passwd_file=~/.passwd-s3fs