01. S3란?
Amazon S3(Simple Storage Service)는 AWS에서 제공하는 객체 스토리지 서비스다. 파일, 이미지, 동영상, 로그 등 종류에 상관없이 거의 모든 데이터를 저장할 수 있다.
일반적인 파일 스토리지가 폴더 구조로 데이터를 관리하는 것과 달리, S3는 객체 키(ID)로 데이터를 식별하고 관리한다. 폴더 계층 없이 키 하나로 데이터를 바로 찾는 구조다. 실제로는 폴더가 없지만 콘솔에서는 /를 구분자로 판단해 폴더처럼 보여준다.
02. S3가 필요한 이유
EC2 인스턴스에도 EBS 스토리지가 붙어 있지만, 서버가 종료되거나 장애가 생기면 접근이 어렵다. S3는 서버와 독립적으로 존재하는 저장소라서 어떤 서비스에서도 붙어서 쓸 수 있다.
실제로 S3는 단독으로도 쓰이지만 다른 AWS 서비스와 연계해서 쓰이는 경우가 더 많다. VPC 흐름 로그를 S3에 저장하거나, CloudFront 접속 로그를 쌓거나, 머신러닝 서비스의 학습 데이터를 보관하는 식이다. AWS 전체에서 데이터 저장소 역할을 맡는 서비스라고 봐도 된다.
03. 버킷과 객체
S3를 쓸 때 가장 먼저 이해해야 하는 개념이 버킷과 객체다.
- 버킷: 데이터를 담는 컨테이너다. 버킷 이름은 전 세계 모든 AWS 계정에서 유일해야 한다. 'my-bucket'이라는 이름을 누군가 이미 썼다면 같은 이름으로 만들 수 없다.
- 객체: 버킷에 저장되는 데이터 본체다. 하나의 객체 최대 크기는 5TB이며, 버킷에는 객체를 무제한으로 저장할 수 있다.
- 키: 객체의 저장 경로이자 고유 식별자다. 버킷 이름과 키를 조합하면 객체의 위치를 특정할 수 있다. 예를 들어
s3://my-bucket/folder/image.png에서folder/image.png가 키다.
04. S3의 주요 특징
- 용량 무제한: 객체 하나의 최대 크기는 5TB지만, 객체 수와 전체 저장 용량에는 제한이 없다. 저장할 용량을 미리 정하지 않아도 된다.
- 높은 내구성: 데이터가 3개 이상의 가용 영역(AZ)에 자동으로 복사된다. AWS 기준 내구성은 99.999999999%로 데이터가 손실될 가능성이 거의 없다.
- 저렴한 비용: 서울 리전 기준 표준 스토리지는 1GB당 월 약 0.025USD다. 사용한 만큼만 비용이 발생한다.
- 다른 서비스와의 연계: EC2, CloudFront, SageMaker, Redshift 등 AWS의 거의 모든 서비스와 연결해서 데이터를 주고받을 수 있다.
05. 스토리지 클래스
S3는 데이터의 접근 빈도와 보관 목적에 따라 여러 스토리지 클래스를 제공한다. 자주 쓰는 데이터는 표준 클래스에, 거의 안 쓰는 데이터는 더 저렴한 클래스에 저장하면 비용을 크게 줄일 수 있다.
| 스토리지 클래스 | 특징 |
|---|---|
| S3 Standard (표준) | 기본 클래스. 자주 접근하는 데이터에 적합하다. |
| S3 Intelligent-Tiering | 접근 빈도에 따라 자동으로 클래스를 조정해 비용을 절감한다. |
| S3 Standard-IA | 표준보다 저렴하지만 데이터를 꺼낼 때 별도 요금이 발생한다. |
| S3 One Zone-IA | 단일 AZ에만 저장해 더 저렴하지만 가용성이 낮다. |
| S3 Glacier Instant Retrieval | 장기 보관용. 즉시 꺼낼 수 있지만 꺼내는 비용이 크다. |
| S3 Glacier Flexible Retrieval | Instant보다 저렴하지만 꺼내는 데 수분~수 시간이 걸린다. |
| S3 Glacier Deep Archive | 가장 저렴하지만 꺼내는 데 반나절 이상 걸린다. 거의 안 쓰는 장기 보관 데이터에 적합하다. |
어떤 클래스를 써야 할지 모르겠다면 S3용 액세스 분석기(S3 Analytics)를 활용하면 된다. 데이터 접근 상태를 확인한 뒤 적절한 클래스를 선택할 수 있다.
또한 수명 주기 설정을 이용하면 시간이 지남에 따라 자동으로 클래스를 변경할 수 있다. 예를 들어 생성 후 30일이 지나면 Standard-IA로, 365일이 지나면 Glacier Flexible Retrieval로 자동 이동하도록 설정하는 식이다.
06. 버전 관리(Versioning)
S3는 버전 관리 기능을 제공한다. 활성화하면 같은 키로 객체를 덮어써도 이전 버전이 사라지지 않고 버전 ID와 함께 보존된다. 실수로 파일을 삭제하거나 잘못 덮어썼을 때 이전 상태로 복구할 수 있다.
주의할 점은 삭제 시 동작이 다르다는 것이다. 버전 관리가 활성화된 상태에서 객체를 삭제하면 실제로 지워지는 게 아니라 삭제 마커가 붙는다. 삭제 마커가 붙은 객체는 GET 요청 시 404 오류가 반환되지만, 버전 ID를 지정해서 삭제하면 해당 버전만 실제로 제거할 수 있다.
버전 관리는 편리하지만 각 버전이 별도 객체로 보존되기 때문에 추가 저장 비용이 발생한다. 수명 주기 설정을 함께 사용해 오래된 버전을 일정 기간 후 자동 삭제하는 방식으로 운영하는 것이 좋다.
07. 접근 권한 관리
S3 버킷에는 민감한 정보가 저장될 수 있기 때문에 접근 제어가 중요하다. S3의 접근 권한은 세 가지 방법으로 관리한다.
- IAM 정책 (사용자 정책): 누가 어떤 작업을 할 수 있는지를 IAM 사용자나 그룹 단위로 제어한다. "A는 이 버킷의 데이터 검색만 가능하고 업로드는 불가"처럼 세밀하게 설정할 수 있다.
- ACL (접근 제어 목록): 객체 또는 버킷 단위로 특정 AWS 계정의 접근을 허용하거나 차단한다.
- 버킷 정책: 버킷 단위로 설정하는 JSON 형식의 접근 제어다. "특정 IP에서만 접근 허용", "특정 파일명 패턴에만 접근 허용" 같은 복잡한 조건도 설정할 수 있어 가장 많이 사용된다.
설정을 잘못하면 버킷이 전 세계에 공개 상태가 될 수 있다. 의도치 않은 공개를 막기 위해 S3에는 퍼블릭 액세스 차단 기능이 있으니 공개가 필요한 경우가 아니라면 활성화해 두는 것이 좋다.
08. 정적 웹 사이트 호스팅
S3 버킷에 HTML, CSS, JavaScript 파일을 올려두면 별도의 서버 없이 웹 사이트를 운영할 수 있다. 웹 사이트 호스팅 기능을 활성화하면 http://버킷이름.s3-website-리전이름.amazonaws.com 형태의 URL이 생성된다.
다만 S3는 HTTP만 지원하고 HTTPS는 지원하지 않는다. HTTPS가 필요하다면 Amazon CloudFront를 앞에 붙여서 구성해야 한다.
버킷 정책이나 ACL로 특정 사용자만 접근하도록 제한할 수도 있어, 내부 문서나 간단한 사내 페이지를 운영하는 용도로도 활용된다.
09. 정리
- S3: 서버와 독립적으로 운영되는 객체 스토리지. 용량 무제한, 높은 내구성, 저렴한 비용이 특징이다.
- 버킷: 데이터를 담는 컨테이너. 이름은 전 세계에서 유일해야 한다.
- 객체: 버킷에 저장되는 데이터 본체. 키(경로)로 식별한다.
- 스토리지 클래스: 접근 빈도에 따라 클래스를 골라 쓰면 비용을 절감할 수 있다. 수명 주기 설정으로 자동 변경도 가능하다.
- 버전 관리: 활성화하면 덮어쓰기나 삭제 전 상태를 복구할 수 있다. 저장 비용이 늘어나므로 수명 주기와 함께 운영한다.
- 접근 권한: IAM 정책, ACL, 버킷 정책 세 가지로 제어한다. 퍼블릭 액세스 차단은 기본으로 켜두는 것이 좋다.
- 정적 웹 호스팅: 서버 없이 HTML 파일만으로 웹 사이트를 운영할 수 있다. HTTPS가 필요하면 CloudFront를 함께 사용한다.
'AWS' 카테고리의 다른 글
| [AWS] VPC란? 서브넷, IGW, NAT Gateway 개념 정리 (0) | 2026.06.10 |
|---|---|
| [AWS] S3 정적 웹 사이트 호스팅 실습 (1) | 2026.06.10 |
| [AWS] EC2 인스턴스 생성 및 SSH 접속 실습 (1) | 2026.06.10 |
| [AWS] EC2란? 가상 서버 서비스 이해하기 (0) | 2026.06.09 |
| [AWS] IAM이란? User, Group, Policy, Role 이해하기 (0) | 2026.06.09 |