Taeyoung Kim

Cloud & Platform

8강. S3 (Simple Storage Service)

8강. S3 (Simple Storage Service) 학습 내용을 정리한 백필 노트입니다.

이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.


1. 스토리지의 종류

AWS의 주요 서비스 3가지는 **EC2(컴퓨팅), RDS(데이터베이스), S3(스토리지)**입니다. 이 장에서는 스토리지의 종류와 S3에 대해 알아봅니다.

1) 객체 스토리지 (Object Storage)

데이터를 '객체(Object)' 단위로 관리하는 스토리지 방식입니다. 각 객체는 데이터, 고유한 아이디(ID), 그리고 메타데이터(데이터에 대한 데이터)로 구성됩니다.

  • 특징:
    • 방대한 확장성과 유연한 메타데이터 관리가 가능합니다.
    • 규모와 유연성이 필요한 애플리케이션(분석, 백업, 아카이브) 구축에 적합합니다.
    • 데이터의 일부분만 수정하는 것은 불가능하며, 수정 시 전체를 다시 덮어써야 합니다.

2) 파일 스토리지 (File Storage)

우리가 흔히 사용하는 컴퓨터의 파일 시스템처럼 데이터를 폴더와 파일의 계층 구조로 관리합니다.

  • 특징:
    • 계층 구조(파일 시스템)를 통해 데이터를 파일 단위로 저장합니다.
    • 파일의 일부분만 수정하는 것이 가능합니다.
    • NAS(Network Attached Storage), 대규모 콘텐츠 저장소, 사용자 홈 디렉터리 등에 사용됩니다.

3) 블록 스토리지 (Block Storage)

데이터를 '블록(Block)'이라는 일정한 크기의 단위로 나누어 관리합니다. 각 블록은 고유한 주소를 가집니다.

  • 특징:
    • 매우 낮은 지연 시간(latency)을 제공하여 고성능을 요구하는 작업에 적합합니다.
    • 주로 데이터베이스 관리 시스템(DBMS)나 가상 머신(Virtual Machine)의 스토리지로 사용됩니다.

파일 스토리지 vs 객체 스토리지 비교

| 구분 | 파일 스토리지 | 객체 스토리지 | | --- | --- | --- | | 관리 단위 | 파일 | 객체 | | 데이터 수정 | 파일 내용의 일부분만 수정 가능 | 객체 데이터의 일부분 수정 불가능 | | 접근 방식 | 운영체제에서 직접 접근 가능 (볼륨 마운트) | 운영체제에서 직접 접근 불가 (주로 HTTP API 사용) | | 확장성 | 대규모 확장에 어려움 | 대규모 확장에 유연하게 대처 가능 | | 안정성 | 사본을 저장하지 않음 | 여러 개의 사본을 분산 저장하여 안정성 높음 | | 구조 | 계층적 트리 구조 | 깊이가 1인 플랫 구조 (폴더는 이름의 일부) |

2. Amazon S3 (Simple Storage Service)

S3는 AWS에서 제공하는 객체 스토리지 서비스입니다. AWS의 주요 스토리지 유형은 다음과 같습니다.

  • S3 (Simple Storage Service): 객체 스토리지
  • EFS (Elastic File System): 파일 스토리지
  • EBS (Elastic Block Store): 블록 스토리지

S3의 특징 및 용도

  • 객체 기반의 무제한 파일 저장 공간을 제공합니다.
  • 99.999999999%의 높은 내구성을 보장합니다.
  • URL을 통해 파일을 쉽게 공유할 수 있습니다.
  • 사용한 만큼만 비용을 지불하는 종량제 과금 방식입니다.
  • 정적 웹사이트(HTML, CSS, JS) 호스팅 기능을 제공합니다.
  • 다른 AWS 서비스(DynamoDB, Lambda 등)와 쉽게 통합됩니다.
  • 주요 사용 용도:
    • 수정이 자주 일어나지 않는 파일 보관 (이미지, 동영상, 문서 등)
    • 로그 파일 저장 및 분석
    • 데이터 백업 및 아카이빙
    • 정적 웹 호스팅

S3 관련 용어

  • 버킷 (Bucket): 객체를 저장하는 최상위 컨테이너. 이름은 전 세계에서 고유해야 합니다.
  • 객체 (Object): 버킷에 저장되는 데이터 단위(파일).
  • 메타데이터 (Metadata): 객체에 대한 정보를 담고 있는 데이터.
  • 정책 (Policy): 버킷과 객체에 대한 접근 권한을 제어하는 정보.

S3 스토리지 클래스

데이터의 액세스 빈도와 보관 기간에 따라 다양한 스토리지 클래스를 선택하여 비용을 최적화할 수 있습니다.

  • 자주 액세스하는 데이터용:
    • S3 Standard: 기본 클래스로, 높은 내구성, 가용성, 성능을 제공합니다.
  • 자주 액세스하지 않는 데이터용:
    • S3 Standard-IA (Infrequent Access): 여러 가용 영역에 중복 저장하여 복원력이 높습니다.
    • S3 One Zone-IA: 하나의 가용 영역에만 저장하여 비용은 저렴하지만 복원력은 낮습니다.
  • 아카이빙 및 백업용 (Cold 데이터):
    • S3 Glacier: 매우 저렴한 비용으로 데이터를 보관할 수 있는 아카이빙 스토리지입니다. (예: Flexible Retrieval, Instant Retrieval, Deep Archive)

S3 객체 라이프사이클 관리

객체의 수명 주기에 따라 스토리지 클래스를 자동으로 변경하여 비용을 절감할 수 있습니다. 예를 들어, 생성 후 30일이 지난 객체는 S3 Standard에서 S3 Standard-IA로, 다시 30일이 지나면 S3 Glacier로 이동하도록 설정할 수 있습니다.

3. 실습

1) S3 버킷 생성하기

  1. AWS 콘솔에서 S3 서비스로 이동합니다.
  2. 버킷 만들기를 클릭합니다.
  3. 버킷 이름: 전 세계에서 유일한 이름으로 지정합니다. (예: [내이름]-bucket-[날짜])
  4. AWS 리전: 버킷을 생성할 리전을 선택합니다. (예: 아시아 태평양(서울) ap-northeast-2)
  5. 나머지 옵션(객체 소유권, 퍼블릭 액세스 차단 설정 등)은 기본값으로 두고 버킷 만들기를 클릭합니다.

2) 파일 업로드 및 다운로드

  1. 생성한 버킷을 클릭하여 들어갑니다.
  2. 업로드 버튼을 클릭합니다.
  3. 파일 추가를 클릭하여 로컬 컴퓨터에 있는 파일을 선택하거나, 파일을 끌어서 놓습니다.
  4. 업로드를 클릭하여 완료합니다.
  5. 업로드된 파일을 클릭하면 객체 상세 정보(객체 URL 등)를 확인할 수 있습니다.
  6. 객체 목록에서 파일을 선택하고 다운로드 버튼을 클릭하여 파일을 내려받을 수 있습니다.

3) 폴더 생성 및 파일 복사

  • 폴더 생성:
    1. 버킷 내에서 폴더 만들기를 클릭합니다.
    2. 폴더 이름을 입력하고 폴더 만들기를 클릭합니다. S3에서 폴더는 실제 디렉터리가 아닌, 파일 이름의 일부(접두사, Prefix)로 취급됩니다.
  • 파일 복사:
    1. 복사할 파일을 선택하고 작업 드롭다운 메뉴에서 복사를 선택합니다.
    2. 복사할 대상 경로(버킷 또는 폴더)를 지정하고 복사를 클릭합니다.

4) Cyberduck으로 S3 다루기

Cyberduck과 같은 GUI 툴을 사용하면 S3를 로컬 파일 탐색기처럼 편리하게 관리할 수 있습니다.

  1. IAM 사용자 생성:
    1. AWS 콘솔에서 IAM 서비스로 이동합니다.
    2. 사용자 메뉴에서 사용자 추가를 클릭합니다.
    3. 사용자 이름을 지정합니다. (예: s3-admin)
    4. 권한 설정에서 직접 정책 연결을 선택하고, AmazonS3FullAccess 정책을 검색하여 체크합니다.
    5. 사용자 생성을 완료합니다.
  2. 액세스 키 생성:
    1. 생성된 사용자를 클릭하고 보안 자격 증명 탭으로 이동합니다.
    2. 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
    3. 사용 사례로 **CLI(명령줄 인터페이스)**를 선택하고 다음 단계로 진행합니다.
    4. 생성된 액세스 키 ID비밀 액세스 키.csv 파일 다운로드를 통해 안전하게 보관합니다. (이 창을 벗어나면 비밀 키를 다시 확인할 수 없습니다.)
  3. Cyberduck 연결:
    1. Cyberduck을 설치하고 실행합니다.
    2. 새 연결을 클릭하고 연결 방식을 Amazon S3로 선택합니다.
    3. 다운로드한 .csv 파일에 있는 액세스 키 ID비밀 액세스 키를 각각 입력하고 연결을 클릭합니다.
    4. 연결이 완료되면 S3 버킷 목록이 나타나며, 파일을 드래그 앤 드롭으로 업로드하거나 다운로드할 수 있습니다.

5) S3 정적 웹 호스팅

  1. 호스팅 설정:
    1. 버킷의 속성 탭으로 이동하여 맨 아래에 있는 정적 웹 사이트 호스팅 섹션에서 편집을 클릭합니다.
    2. 활성화를 선택하고, 인덱스 문서index.html을 입력한 후 변경 사항 저장을 클릭합니다.
  2. 파일 업로드:
    1. 간단한 내용의 index.html 파일을 만듭니다.
    2. 생성한 index.html 파일을 버킷의 최상위 경로에 업로드합니다.
  3. 권한 설정:
    1. 권한 탭으로 이동하여 **퍼블릭 액세스 차단(버킷 설정)**에서 편집을 클릭합니다.
    2. 모든 퍼블릭 액세스 차단의 체크를 해제하고 변경 사항을 저장합니다.
    3. 버킷 정책 섹션에서 편집을 클릭하고, 정책 생성기를 이용하여 외부에서 객체를 읽을 수 있는(GetObject) 권한을 가진 정책(JSON)을 생성합니다.
      • Policy Type: S3 Bucket Policy
      • Effect: Allow
      • Principal: (모든 사용자)
      • Actions: GetObject
      • ARN: arn:aws:s3:::[버킷이름]/*
    4. 생성된 정책을 복사하여 버킷 정책 편집기에 붙여넣고 저장합니다.
  4. 접속 확인:
    • 속성 탭의 정적 웹 사이트 호스팅 섹션에 있는 버킷 웹 사이트 엔드포인트 URL로 접속하여 index.html의 내용이 보이는지 확인합니다.

6) S3 버킷 삭제하기

  1. 삭제하려는 버킷을 선택하고 삭제 버튼을 클릭합니다.
  2. 버킷을 삭제하려면 먼저 버킷 안의 모든 객체를 비워야 합니다. 버킷 비우기를 클릭하여 객체를 모두 삭제합니다.
  3. 객체를 모두 비운 후, 버킷 이름 입력을 통해 삭제를 확인하고 버킷 삭제를 클릭합니다.