☁️ 클라우드

Object Storage

객체 저장소

비정형 데이터를 객체로 저장. S3, GCS. 무한 확장성.

📖 상세 설명

Object Storage(객체 스토리지)는 데이터를 객체(Object) 단위로 저장하는 스토리지 아키텍처입니다. 각 객체는 데이터 자체, 메타데이터, 고유 식별자(Key)로 구성되며, 플랫한 주소 공간에서 관리됩니다. 파일 시스템의 계층적 디렉토리 구조와 달리, 무한에 가까운 확장성을 제공합니다.

2006년 AWS S3 출시 이후 Object Storage는 클라우드 스토리지의 표준이 되었습니다. S3 API가 사실상 업계 표준으로, Google Cloud Storage, Azure Blob Storage, MinIO, Ceph 등 대부분의 객체 스토리지가 S3 호환 API를 제공합니다.

Object Storage는 이미지, 동영상, 로그, 백업, 빅데이터 등 비정형 데이터 저장에 최적화되어 있습니다. 99.999999999%(11 9s) 내구성을 제공하며, 여러 데이터센터에 자동 복제됩니다. 스토리지 클래스(Standard, Infrequent Access, Glacier 등)에 따라 비용과 접근 속도를 조절할 수 있습니다.

실무에서는 CDN과 연동한 정적 파일 서빙, 데이터 레이크 구축, 애플리케이션 백업, ML 학습 데이터 저장 등에 광범위하게 사용됩니다. Presigned URL로 임시 접근 권한을 부여하고, Lifecycle Policy로 오래된 데이터를 자동 정리할 수 있습니다.

💻 코드 예제

import boto3
from botocore.exceptions import ClientError
from datetime import datetime

# S3 클라이언트 생성
s3 = boto3.client('s3',
    region_name='ap-northeast-2',
    aws_access_key_id='YOUR_ACCESS_KEY',
    aws_secret_access_key='YOUR_SECRET_KEY'
)

# 버킷 생성
s3.create_bucket(
    Bucket='my-app-bucket',
    CreateBucketConfiguration={'LocationConstraint': 'ap-northeast-2'}
)

# 파일 업로드
s3.upload_file(
    'local_file.pdf',
    'my-app-bucket',
    'documents/2024/report.pdf',
    ExtraArgs={
        'ContentType': 'application/pdf',
        'Metadata': {'author': 'kaitrust', 'version': '1.0'}
    }
)

# Presigned URL 생성 (1시간 유효)
url = s3.generate_presigned_url(
    'get_object',
    Params={'Bucket': 'my-app-bucket', 'Key': 'documents/2024/report.pdf'},
    ExpiresIn=3600
)
print(f"Download URL: {url}")

# 객체 목록 조회 (페이지네이션)
paginator = s3.get_paginator('list_objects_v2')
for page in paginator.paginate(Bucket='my-app-bucket', Prefix='documents/'):
    for obj in page.get('Contents', []):
        print(f"{obj['Key']} - {obj['Size']} bytes")

# 객체 삭제
s3.delete_object(Bucket='my-app-bucket', Key='documents/2024/report.pdf')

🗣️ 실무에서 이렇게 말하세요

💬 아키텍처 설계에서
"사용자 업로드 이미지는 S3에 저장하고 CloudFront로 서빙하면 됩니다. Presigned URL로 직접 업로드하면 서버 부하 없이 대용량 파일도 처리할 수 있고, Lambda 트리거로 썸네일 자동 생성도 가능해요."
💬 비용 최적화 회의에서
"로그 데이터가 매월 2TB씩 쌓이는데, S3 Intelligent-Tiering을 적용하면 자동으로 접근 패턴을 분석해서 스토리지 클래스를 옮겨줍니다. 90일 이상 접근 안 되면 Glacier로 이동하게 Lifecycle 정책도 설정하죠."
💬 면접에서
"Object Storage와 Block Storage의 차이점은 접근 방식입니다. Object Storage는 HTTP API로 전체 객체 단위로 접근하고, Block Storage는 OS 레벨에서 마운트해서 바이트 단위로 접근합니다. 데이터베이스는 Block Storage, 이미지/동영상은 Object Storage가 적합합니다."

⚠️ 흔한 실수 & 주의사항

버킷 퍼블릭 설정 실수

S3 버킷을 실수로 퍼블릭으로 열면 데이터 유출 사고가 발생합니다. S3 Block Public Access를 활성화하고, IAM 정책으로 접근을 제어하세요. AWS Config로 퍼블릭 버킷을 자동 탐지할 수 있습니다.

비효율적인 키 설계

순차적 프리픽스(2024-01-01/file1.jpg)는 핫스팟을 유발해 성능이 저하됩니다. 랜덤 해시를 프리픽스로 사용하거나(abc123/2024-01-01/), 최근 S3는 자동으로 파티셔닝하므로 날짜 기반도 괜찮습니다.

올바른 비용 관리

S3 요금은 저장 용량 + 요청 수 + 데이터 전송입니다. 작은 파일이 많으면 요청 비용이 높아지므로 묶어서 저장하세요. 불필요한 버전은 Lifecycle으로 정리하고, 같은 리전 내 전송은 무료입니다.

🔗 관련 용어

📚 더 배우기