데이터 레이크는 시간이 갈수록 커지고, 데이터의 접근 빈도는 시간이 갈수록 떨어진다. S3 요금은 네 갈래로 나오며, 스토리지 클래스는 이 넷의 비율을 바꾼다.
과금 항목
단위
줄이는 방법
저장
GB-월(클래스별 단가)
압축·컬럼형 포맷, 낮은 클래스로 전환, 만료
요청
요청 건수(PUT·GET·LIST, 수명주기 전환 요청)
파일을 크게, 작은 파일 병합
검색(retrieval)
읽어 낸 GB(IA·Glacier 계열)
자주 읽는 데이터는 Standard 에 둔다
조기 삭제
최소 보관 기간의 남은 일수
수명이 짧은 데이터는 낮은 클래스로 보내지 않는다
여기에 객체당 요금이 붙는 경우가 둘 있다. Intelligent-Tiering 의 모니터링·자동화 요금, 그리고 Glacier Flexible Retrieval·Deep Archive 의 객체당 메타데이터 오버헤드다. 둘 다 객체 수에 비례하므로 작은 파일이 많은 레이크에서 문제가 된다.
내구성은 모든 클래스가 99.999999999%(11 9's)로 같다. 클래스 사이에서 달라지는 것은 가용성과 AZ 수다. One Zone-IA 만 AZ 하나에 저장되어 그 AZ 가 물리적으로 소실되면 데이터를 잃는다.
"최소 과금 크기 128KB"는 그보다 작은 객체도 128KB 로 과금한다는 뜻이다. 수 KB 짜리 파일을 IA 로 보내면 Standard 보다 비쌀 수 있다.
Glacier Flexible Retrieval·Deep Archive 는 객체마다 40KB 가 덧붙는다. 32KB 는 해당 Glacier 단가로, 8KB 는 Standard 단가로 과금된다(객체 이름과 메타데이터를 실시간으로 나열할 수 있게 유지하는 비용이다).
💡 관련 이론: IA(Infrequent Access) 계열은 저장 단가를 낮춘 대신 읽을 때 GB당 검색 요금을 받는다. 그래서 손익분기는 "얼마나 자주, 얼마나 많이 읽는가"에 달려 있다. 매일 대시보드가 훑는 Curated 데이터를 IA 로 내리면 검색 요금이 저장 절감액을 넘는다. 클래스는 데이터의 나이가 아니라 접근 빈도로 고른다.
Standard → 일정 기간 뒤 Standard-IA 또는 Glacier Instant Retrieval
Clean
ETL 이 정기적으로 읽음
Standard 또는 Intelligent-Tiering
Curated
BI·대시보드가 자주 읽음
Standard
장기 규제 보관(원본 로그 등)
거의 읽지 않음, 지연 허용
Glacier Deep Archive
Athena·Redshift Spectrum 으로 조회할 가능성이 남아 있는 데이터는 Glacier Instant Retrieval 까지만 내린다. Flexible Retrieval·Deep Archive 로 넘어간 객체는 Athena 가 오류 없이 건너뛰므로 "오래된 파티션이 조용히 결과에서 빠지는" 사고가 난다.
복원한 객체를 Athena 로 읽으려면 테이블 속성 read_restored_glacier_objects 를 true 로 설정해야 한다(엔진 버전 3, Hive 테이블). 복원 자체는 Athena 가 해 주지 않는다.
오픈 테이블 포맷(Iceberg 등)의 데이터 파일은 수명주기로 아카이브하거나 만료시키지 않는다. 메타데이터가 가리키는 파일이 읽히지 않으면 테이블이 깨진다.
Standard → Standard-IA → Intelligent-Tiering → One Zone-IA → Glacier Instant Retrieval → Glacier Flexible Retrieval → Glacier Deep Archive(위 단계에서 아래 단계로 건너뛰는 것은 가능, 거슬러 올라가는 것은 불가)
규칙을 짤 때 걸리는 제약은 다음과 같다.
제약
내용
필터
프리픽스, 객체 태그, 객체 크기(ObjectSizeGreaterThan/ObjectSizeLessThan)와 그 조합
작은 객체
128KB 미만 객체는 기본적으로 어떤 클래스로도 전환되지 않는다. 전환 요청 비용이 절감액을 넘기 때문이다. 크기 필터로 바꿀 수 있다
최소 보관 기간
한 규칙 안에서 최소 보관 기간을 채우기 전에 다음 클래스로 넘기는 설정은 만들 수 없다(예: 4일째 Glacier Instant Retrieval 로 보냈다면 Deep Archive 전환은 94일째 이후)
날짜 계산
생성 시각에 일수를 더한 뒤 다음 날 자정(UTC)으로 올림한다
과금 시점
Glacier 전환은 비동기지만, 규칙 조건을 충족한 날부터 대상 클래스 요금으로 과금된다
128KB 기본 동작은 2024년 9월에 바뀐 것이다. 그 전에는 128KB 미만 객체도 Glacier Flexible Retrieval·Deep Archive 로는 전환됐다. 오래된 자료는 옛 동작으로 설명할 수 있다.
전환은 객체 하나가 요청 하나다. 작은 파일 수억 개를 전환하면 전환 요청 비용이 절감액을 넘는다. 먼저 합치고 나서 내린다.
Intelligent-Tiering 은 "잘못 예측했을 때의 벌금을 없애는 보험"이다. 패턴이 확실하면(30일 뒤에는 거의 안 본다) 보험료인 모니터링 요금 없이 수명주기로 직접 내리는 편이 싸다. 패턴이 불확실하면 IA 로 내렸다가 다시 읽혀 검색 요금을 내는 위험이 더 크므로 Intelligent-Tiering 이 낫다.
조직·계정·버킷·프리픽스 단위로 어디에 얼마나 쌓였나, 불완전 멀티파트·비현행 버전은 얼마나 되나
대시보드, 지표 내보내기
S3 Inventory
버킷에 어떤 객체가 어떤 클래스·크기·암호화 상태로 있나
일·주 단위 목록 파일(CSV·ORC·Parquet) → Athena 로 분석
스토리지 클래스 분석
이 데이터는 언제 Standard-IA 로 내리는 것이 좋은가
접근 패턴 분석 결과
Inventory 는 ListObjects 를 수억 번 호출하지 않고 객체 목록을 얻는 방법이다. Athena 로 "프리픽스별 평균 객체 크기"를 뽑으면 작은 파일 문제의 위치가 드러난다.
스토리지 클래스 분석은 Standard 와 Standard-IA 사이의 판단을 돕는다. 수명주기 일수를 감으로 정하지 않게 해 준다.
근본적인 절감 순서는 ① 저장량 자체를 줄인다(Parquet + 압축) → ② 객체 수를 줄인다(컴팩션) → ③ 필요 없는 것을 지운다(만료, 비현행 버전, 불완전 업로드) → ④ 남은 것을 맞는 클래스로 보낸다이다. ④부터 손대면 작은 파일의 전환 요청 비용과 최소 과금 크기에 걸린다.