🖥️ System

서버리스 스토리지 (Serverless Storage)

개요

서버리스 스토리지는 클라우드 제공자가 인프라 관리, 확장, 백업을 처리하는 저장 서비스입니다. 서버리스 컴퓨팅 환경에서는 Lambda 함수나 컨테이너가 시작과 동시에 스토리지에 접근해야 하므로, 적절한 저장소 선택이 성능과 비용에 직접적인 영향을 미칩니다.

AWS는 세 가지 주요 서버리스 스토리지 서비스를 제공합니다: Amazon S3(객체 스토리지), Amazon EFS(파일 시스템), Amazon DynamoDB(데이터베이스). 각 서비스는 서로 다른 접근 모델과 성능 특성을 가지며, 애플리케이션 요구사항에 따라 선택해야 합니다. 본 문서에서는 이들 서비스의 특징, 비교, 데이터 영속성 패턴을 분석합니다.

서버리스 스토리지 아키텍처

핵심 개념

스토리지 유형 분류

서버리스 환경에서 사용 가능한 스토리지는 접근 방식에 따라 세 가지로 분류됩니다.

스토리지 유형 접근 모델 대표 서비스 적합 용도
객체 스토리지 REST API (GET/PUT) Amazon S3, Azure Blob, GCS 이미지, 백업, 레이크하우스
파일 스토리지 NFS/CIFS 마운트 Amazon EFS, Azure Files 공유 파일, 레거시 앱 마이그레이션
블록 스토리지 디스크 마운트 Amazon EBS, Azure Disk 데이터베이스, 부팅 볼륨

Amazon S3 (Simple Storage Service)

S3는 클라우드에서 가장 널리 사용되는 객체 스토리지 서비스로, 무제한 확장과 99.999999999%(11 나인)의 내구성을 제공합니다.

S3의 주요 특징:
- 버킷 기반 저장: 버킷 안에 객체(key + 데이터 + 메타데이터)를 저장
- 강한 일관성: 읽기-쓰기 직후 강한 일관성(Strong Consistency) 보장
- 스토리지 클래스: Standard, Intelligent-Tiering, Standard-IA, One Zone-IA, Glacier 계열
- 이벤트 기반 통합: S3 이벤트 알림을 통해 Lambda/SQS/SNS 자동 트리거

S3 스토리지 클래스 비교:

클래스 접근 빈도 내구성 가용성 최소 저장 기간
S3 Standard 빈번 11 나인 99.99% 없음
S3 Intelligent-Tiering 자동 전환 11 나인 99.9% 없음
S3 Standard-IA 비빈번 11 나인 99.9% 30일
S3 One Zone-IA 비빈번 (1 AZ) 11 나인 99.5% 30일
S3 Glacier Instant 희소 접근 11 나인 99.9% 90일
S3 Glacier Deep Archive 아카이브 11 나인 99.99% 180일

Amazon EFS (Elastic File System)

EFS는 NFS 프로토콜을 지원하는 완전 관리형 파일 시스템으로, 여러 Lambda 함수나 컨테이너가 동시에 마운트하여 사용할 수 있습니다.

EFS의 주요 특징:
- 동적 확장: 사용량에 따라 자동으로 페타바이트까지 확장
- 동시 접근: 수천 개의 연결 동시 지원
- 다중 AZ: 가용 영역 전체에 걸쳐 데이터 복제
- Performance Mode: General Purpose(기본)와 Max I/O 선택 가능
- Throughput Mode: Bursting(기본)과 Provisioned 선택 가능

EFS vs S3 접근 방식 비교:

특성 Amazon S3 Amazon EFS
접근 방식 REST API 파일 시스템 (마운트)
동시성 객체 수준 파일 수준 동시 읽기/쓰기
지연 시간 수십 ms (네트워크) 수 ms (VPC 내부)
최대 파일 크기 5TB 제한 없음
메타데이터 커스텀 태그 지원 POSIX 속성
비용 모델 요청 + 저장 + 전송 저장 + 전송 (요청 과금 없음)

데이터 영속성 (Data Persistence)

서버리스 환경에서는 함수가 종료되면 로컬 상태가 사라지므로, 데이터 영속성을 위해 외부 스토리지가 필수적입니다.

영속성 패턴:

패턴 설명 사용 사례
S3 영속 저장 객체를 S3에 저장하여 영구 보존 파일 백업, 이미지 저장, 로그 보관
DynamoDB 상태 테이블에 상태 데이터 저장 세션, 카트, 사용자 프로필
EFS 공유 여러 함수가 동일 파일시스템 공유 레거시 앱 마이그레이션, 공유 설정
ElastiCache 인메모리 캐시로 임시 상태 관리 세션 캐싱, 빈번한 읽기 데이터

비교/분석

서버리스 스토리지 서비스 종합 비교

기능 Amazon S3 Amazon EFS Amazon DynamoDB
유형 객체 스토리지 파일 시스템 NoSQL 데이터베이스
확장성 자동 무제한 자동 페타바이트 자동 무제한
내구성 99.999999999% 99.999999999% 99.999999999%
가용성 99.99% 99.99% 99.999%
지연 시간 수십 ms 수 ms 수 ms
동시성 객체 수준 파일 수준 항목 수준
비용 모델 GB + 요청 GB + 전송 읽기/쓰기 + 저장
** Lambda 통합** 이벤트 트리거 파일 마운트 트리거 + 스트림

비용 비교 시나리오

100GB 데이터 저장, 월 100만 요청 기준 추정 비용:

서비스 저장 비용 요청 비용 전송 비용 월 총 비용
S3 Standard ~$2.30 ~$0.40 ~$0.90 ~$3.60
S3 Standard-IA ~$1.25 ~$0.65 ~$0.90 ~$2.80
EFS Standard ~$24.00 과금 없음 ~$0.90 ~$24.90
DynamoDB ~$0.25 (25GB 무료) ~$0.65 - ~$0.90

Lambda와의 통합 패턴

1. S3 이벤트 기반 패턴:
- S3 객체 업로드 시 Lambda 자동 호출
- 이미지 리사이징, 데이터 변환, 백업 자동화

2. EFS 마운트 패턴:
- Lambda 함수에 EFS 연결 설정
- 여러 함수가 동일 파일 공유 (Concurrent Access)
- 레거시 애플리케이션 마이그레이션 시 유용

3. DynamoDB Streams 패턴:
- DynamoDB 변경사항을 스트림으로 캡처
- Lambda가 스트림을 읽어 실시간 처리

서버리스 스토리지 통합 패턴

동작 원리

S3 객체 저장 흐름

  1. 요청 수신: SDK/API를 통해 PutObject 요청 전송
  2. 권한 검증: IAM 정책, 버킷 정책, ACL 검증
  3. 데이터 분산: 데이터를 여러 AZ에 걸쳐 자동 복제
  4. 메타데이터 저장: 시스템/커스텀 메타데이터 기록
  5. 객체 생성: 고유한 버전 ID 할당
  6. 응답 반환: 200 OK와 ETag 반환

EFS 마운트 흐름

  1. 보안그룹 설정: Lambda와 EFS 간 네트워크 접근 허용
  2. 마운트 타겟: VPC 내 EFS 마운트 타겟 IP 확인
  3. 연결 설정: Lambda 함수 구성에서 EFS 연결 추가
  4. 파일 접근: NFS 프로토콜로 파일 읽기/쓰기

DynamoDB 쓰기 흐름

  1. 요청 처리: PutItem/UpdateItem 요청 수신
  2. 리플리케이션: 멀티 AZ 자동 리플리케이션
  3. 스트림 기록: DynamoDB Streams에 변경사항 기록 (활성화 시)
  4. 응답 반환: 쓰기 완료 확인

장단점

장점

  1. 인프라 관리 제거: 하드웨어, 패치, 백업을 클라우드 제공자가 처리
  2. 자동 확장: 데이터 증가에 따라 자동으로 스토리지 확장
  3. 높은 내구성: 11 나인(99.999999999%) 내구성으로 데이터 보호
  4. 유연한 비용: 사용한 만큼만 비용 지불, 프로비저닝 불필요
  5. 보안 통합: IAM, 암호화, VPC 격리 등 보안 기능 내장

단점

  1. 콜드 스타트: Lambda + EFS 연결 시 마운트 시간으로 지연 발생
  2. 네트워크 의존: S3/EFS 접근 시 네트워크 지연 시간 발생
  3. vendor lock-in: 각 클라우드 제공자 고유 API에 종속
  4. 대용량 스트리밍 제한: S3는 대용량 스트리밍에 적합하지 않음
  5. 비용 복잡성: 스토리지 클래스, 접근 패턴에 따른 비용 예측 어려움

관련 기술

참고 문헌

  • Amazon S3 공식 문서: https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html
  • Amazon EFS 공식 문서: https://docs.aws.amazon.com/efs/latest/ug/whatis-amazon-efs.html
  • Amazon DynamoDB 공식 문서: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html
  • AWS Serverless Storage 아키텍처: https://aws.amazon.com/serverless/storage/
  • S3 Intelligent-Tiering: https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering.html

핵심 정리

  1. 스토리지 선택: 객체(S3), 파일(EFS), 데이터베이스(DynamoDB) 중 애플리케이션 요구사항에 따라 선택해야 합니다.

  2. S3 활용: 이미지, 백업, 데이터 레이크 등 대용량 비정형 데이터 저장에 최적하며, 11 나인 내구성과 스토리지 클래스 자동 전환으로 비용을 최적화할 수 있습니다.

  3. EFS 활용: 여러 Lambda 함수나 컨테이너가 동시에 파일을 공유해야 할 때 사용하며, NFS 프로토콜을 지원하여 레거시 애플리케이션 마이그레이션에 적합합니다.

  4. 데이터 영속성: 서버리스 함수는 무상태이므로, 상태 데이터는 반드시 S3, DynamoDB, EFS 같은 외부 스토리지에 저장해야 합니다.

  5. 비용 최적화: S3 Intelligent-Tiering, EFS Lifecycle Management, DynamoDB 온디맨드 모드를 적절히 조합하면 스토리지 비용을 크게 절감할 수 있습니다.