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 버킷 생성하기
- AWS 콘솔에서 S3 서비스로 이동합니다.
- 버킷 만들기를 클릭합니다.
- 버킷 이름: 전 세계에서 유일한 이름으로 지정합니다. (예:
[내이름]-bucket-[날짜]) - AWS 리전: 버킷을 생성할 리전을 선택합니다. (예:
아시아 태평양(서울) ap-northeast-2) - 나머지 옵션(객체 소유권, 퍼블릭 액세스 차단 설정 등)은 기본값으로 두고 버킷 만들기를 클릭합니다.
2) 파일 업로드 및 다운로드
- 생성한 버킷을 클릭하여 들어갑니다.
- 업로드 버튼을 클릭합니다.
- 파일 추가를 클릭하여 로컬 컴퓨터에 있는 파일을 선택하거나, 파일을 끌어서 놓습니다.
- 업로드를 클릭하여 완료합니다.
- 업로드된 파일을 클릭하면 객체 상세 정보(객체 URL 등)를 확인할 수 있습니다.
- 객체 목록에서 파일을 선택하고 다운로드 버튼을 클릭하여 파일을 내려받을 수 있습니다.
3) 폴더 생성 및 파일 복사
- 폴더 생성:
- 버킷 내에서 폴더 만들기를 클릭합니다.
- 폴더 이름을 입력하고 폴더 만들기를 클릭합니다. S3에서 폴더는 실제 디렉터리가 아닌, 파일 이름의 일부(접두사, Prefix)로 취급됩니다.
- 파일 복사:
- 복사할 파일을 선택하고 작업 드롭다운 메뉴에서 복사를 선택합니다.
- 복사할 대상 경로(버킷 또는 폴더)를 지정하고 복사를 클릭합니다.
4) Cyberduck으로 S3 다루기
Cyberduck과 같은 GUI 툴을 사용하면 S3를 로컬 파일 탐색기처럼 편리하게 관리할 수 있습니다.
- IAM 사용자 생성:
- AWS 콘솔에서 IAM 서비스로 이동합니다.
- 사용자 메뉴에서 사용자 추가를 클릭합니다.
- 사용자 이름을 지정합니다. (예:
s3-admin) - 권한 설정에서 직접 정책 연결을 선택하고,
AmazonS3FullAccess정책을 검색하여 체크합니다. - 사용자 생성을 완료합니다.
- 액세스 키 생성:
- 생성된 사용자를 클릭하고 보안 자격 증명 탭으로 이동합니다.
- 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
- 사용 사례로 **CLI(명령줄 인터페이스)**를 선택하고 다음 단계로 진행합니다.
- 생성된 액세스 키 ID와 비밀 액세스 키를
.csv 파일 다운로드를 통해 안전하게 보관합니다. (이 창을 벗어나면 비밀 키를 다시 확인할 수 없습니다.)
- Cyberduck 연결:
- Cyberduck을 설치하고 실행합니다.
- 새 연결을 클릭하고 연결 방식을 Amazon S3로 선택합니다.
- 다운로드한
.csv파일에 있는 액세스 키 ID와 비밀 액세스 키를 각각 입력하고 연결을 클릭합니다. - 연결이 완료되면 S3 버킷 목록이 나타나며, 파일을 드래그 앤 드롭으로 업로드하거나 다운로드할 수 있습니다.
5) S3 정적 웹 호스팅
- 호스팅 설정:
- 버킷의 속성 탭으로 이동하여 맨 아래에 있는 정적 웹 사이트 호스팅 섹션에서 편집을 클릭합니다.
- 활성화를 선택하고, 인덱스 문서에
index.html을 입력한 후 변경 사항 저장을 클릭합니다.
- 파일 업로드:
- 간단한 내용의
index.html파일을 만듭니다. - 생성한
index.html파일을 버킷의 최상위 경로에 업로드합니다.
- 간단한 내용의
- 권한 설정:
- 권한 탭으로 이동하여 **퍼블릭 액세스 차단(버킷 설정)**에서 편집을 클릭합니다.
- 모든 퍼블릭 액세스 차단의 체크를 해제하고 변경 사항을 저장합니다.
- 버킷 정책 섹션에서 편집을 클릭하고, 정책 생성기를 이용하여 외부에서 객체를 읽을 수 있는(
GetObject) 권한을 가진 정책(JSON)을 생성합니다.- Policy Type:
S3 Bucket Policy - Effect:
Allow - Principal: (모든 사용자)
- Actions:
GetObject - ARN:
arn:aws:s3:::[버킷이름]/*
- Policy Type:
- 생성된 정책을 복사하여 버킷 정책 편집기에 붙여넣고 저장합니다.
- 접속 확인:
- 속성 탭의 정적 웹 사이트 호스팅 섹션에 있는 버킷 웹 사이트 엔드포인트 URL로 접속하여
index.html의 내용이 보이는지 확인합니다.
- 속성 탭의 정적 웹 사이트 호스팅 섹션에 있는 버킷 웹 사이트 엔드포인트 URL로 접속하여
6) S3 버킷 삭제하기
- 삭제하려는 버킷을 선택하고 삭제 버튼을 클릭합니다.
- 버킷을 삭제하려면 먼저 버킷 안의 모든 객체를 비워야 합니다. 버킷 비우기를 클릭하여 객체를 모두 삭제합니다.
- 객체를 모두 비운 후, 버킷 이름 입력을 통해 삭제를 확인하고 버킷 삭제를 클릭합니다.