혹시 S3 비용이 지속적으로 증가하고 있으며, 그 원인을 명확히 파악하고 효율적으로 관리하는 데 어려움을 겪고 있나요? S3는 스토리지 용량, 데이터 전송, 그리고 다양한 유형의 API 요청에 따라 요금이 복합적으로 발생하므로, 전체 비용 구조를 정확하게 진단하는 것이 시급합니다.
AWS Cost Explorer를 활용하여 S3 비용을 체계적으로 분석하고, 주요 비용 발생 항목을 식별해야 합니다. 구체적으로, UsageType과 Resource ID를 기준으로 데이터를 분류하여 어떤 사용 패턴과 버킷이 가장 큰 비용을 차지하는지 파악하고, 이를 바탕으로 효과적인 비용 절감 방안을 수립하는 것이 우리의 목표입니다.
이 분석을 통해 S3 비용의 가장 큰 비중을 차지하는 부분을 식별하고, 불필요한 스토리지 비용 및 데이터 전송 비용을 제거하여 장기적인 관점에서 비용 효율성을 확보하고자 합니다. 궁극적으로는 안정적인 서비스 운영을 유지하면서도 비용을 최적화하여 비즈니스 가치를 극대화하는 것이 목표입니다.
AWS S3(Simple Storage Service)는 클라우드 스토리지 서비스의 핵심으로, 비용을 효율적으로 관리하기 위해서는 과금 구조에 대한 정확한 이해와 현재 사용량에 대한 진단이 필수적입니다. S3 비용은 주로 스토리지 용량, 데이터 전송량, 그리고 API 요청 수에 따라 발생하므로, 이 세 가지 핵심 항목을 중심으로 분석해야 효과적인 비용 절감 전략을 수립할 수 있습니다.
S3 비용을 분석하려면 AWS Cost Explorer를 활용하는 것이 가장 효과적입니다. 다음은 Cost Explorer를 통해 S3 비용을 확인하고 분석하는 구체적인 방법입니다.
AWS Management Console에 로그인한 후, 검색창에 "Cost Explorer"를 입력하여 서비스에 접속합니다.
비용 데이터를 효과적으로 분류하고 분석하려면 Group By 항목을 전략적으로 설정하는 것이 중요합니다. S3 관련 비용을 파악할 때는 다음 기준들을 활용하는 것이 특히 효과적입니다.
UsageType
이 설정을 통해 S3의 다양한 과금 요소별로 비용 항목을 명확하게 구분할 수 있습니다. 예를 들어, 스토리지 클래스별 저장 용량(TimedStorage), 데이터 전송량(DataTransfer), 각 API 요청 유형(Requests) 등을 명확히 분리하여 볼 수 있습니다. 이를 통해 어떤 사용 패턴이 전체 S3 비용에서 가장 큰 비중을 차지하는지 한눈에 파악하여 최적화의 우선순위를 정할 수 있습니다.
Resource ID
이 기준은 S3 버킷(Bucket) ID별로 발생하는 개별 비용을 상세히 확인하는 데 유용합니다. 이를 통해 "어떤 버킷이 가장 많은 비용을 발생시키고 있는가?"를 명확히 파악하고, 특정 애플리케이션이나 서비스에 연결된 버킷의 비용을 심층 분석할 수 있습니다.
Operation (선택 사항)
특정 S3 API 동작이나 타입(예: PutObject, GetObject, ListObjects)별로 비용을 더 세분화하여 분석하고자 할 때 이 옵션을 활용할 수 있습니다.
정확하고 집중적인 S3 비용 분석을 위해서는 다음 필터링 설정을 적용해야 합니다.
Service
Service 필터에서 Amazon Simple Storage Service를 명확히 선택하여, 다른 AWS 서비스의 비용과 혼동되지 않고 오직 S3 관련 비용만 분석 대상으로 포함합니다.
UsageType
UsageType 필터에서는 S3의 주요 비용 항목들을 세부적으로 선택하여 분석할 수 있습니다. 아래 목록은 주요 S3 비용 항목들입니다.
APN2-TimedStorage-ByteHrs: S3 Standard 스토리지 클래스에 저장된 데이터 용량(바이트-시간)에 대한 요금입니다.
APN2-DataTransfer-Out-Bytes: S3에서 인터넷으로 전송되는 데이터 양에 대한 요금입니다.
APN2-Requests-Tier1: PUT, COPY, POST, LIST 등과 같이 스토리지에 데이터를 쓰거나 목록을 조회하는 API 요청 수에 대한 요금입니다.
APN2-Requests-Tier2: GET, SELECT, LIST 등과 같이 데이터를 읽거나 검색하는 API 요청 수에 대한 요금입니다.
APN2-Requests-Tier3: S3 Glacier, Glacier Deep Archive 등 아카이브 스토리지에서 데이터를 복원하는 요청에 대한 요금입니다.
APN2-TimedStorage-GIR-ByteHrs: S3 Glacier Instant Retrieval에 저장된 데이터 용량(바이트-시간)에 대한 요금입니다.
APN2-Retrieval-GIR: S3 Glacier Instant Retrieval에서 검색되는 데이터 양에 대한 요금입니다.
APN2-EarlyDelete-ByteHrs: S3 Glacier Instant Retrieval에서 최소 저장 기간(90일) 이전에 삭제된 데이터에 대한 요금입니다.
S3 비용의 시간적 변화를 파악하고 심층 분석하기 위해서는 적절한 트렌드 분석 기간을 설정하는 것이 중요합니다.
일별 분석
S3 비용 데이터의 일별 추이를 분석하는 것은 특정 날짜에 발생한 비용 급증의 원인을 파악하는 데 특히 유용합니다.
용도: 특정 날짜에 대규모 데이터 업로드(파일 전송), 혹은 스크립트 오류로 인해 불필요한 API 요청이 대량으로 발생한 경우를 즉시 식별할 수 있습니다. 또한, 스토리지 클래스를 변경한 후 비용 추이를 분석하여 그 효과를 측정할 수 있습니다.
활용 팁: 일별 그래프에서 갑작스러운 스파이크를 발견하면, 해당 날짜의 S3 CloudWatch 지표(예: 요청 수, 스토리지 용량)를 확인하여 원인을 심층적으로 조사할 수 있습니다.
월별 분석
장기적인 관점에서 S3 비용 추세를 파악하려면 월별 분석이 적합합니다. 이는 서비스 운영의 큰 그림을 이해하고 전략적인 최적화 방안을 모색하는 데 도움을 줍니다.
용도: 월별 분석을 통해 서비스 성장과 함께 스토리지 용량이나 데이터 전송량이 꾸준히 증가하는 패턴을 파악하거나, S3 Intelligent-Tiering 도입 후 비용 절감 효과를 장기적인 관점에서 확인할 수 있습니다.
활용 팁: 월별 추이를 통해 APN2-TimedStorage-ByteHrs 항목이 지속적으로 증가하는 패턴을 파악하면, S3 라이프사이클 관리 정책을 적용하여 오래된 데이터를 비용 효율적인 스토리지 클래스(Glacier, Infrequent Access 등)로 이동시키는 등의 구조적인 최적화 방안을 모색할 수 있습니다. 또한, APN2-DataTransfer-Out-Bytes 비용이 높은 경우, 불필요한 퍼블릭 전송을 줄이는 방안을 고려할 수 있습니다.
특정 버킷에서 Requests-Tier1 사용량이 급증한 경우, 다음을 점검해야 합니다.
비정상적인 ETL 또는 데이터 업로드 배치 작업
외부 시스템과의 자동화 연동에서 과도한 요청 발생
버킷 정책 변경으로 인한 반복 트리거
이러한 정보는 비용 알림 및 추후 예산 설정에도 중요한 근거가 됩니다.
AWS Cost Explorer에서 Amazon S3 사용량을 UsageType으로 그룹핑했을 때 나타나는 항목들은 S3의 다양한 스토리지 클래스, 데이터 전송, 요청 및 기타 기능에 대한 비용을 세부적으로 보여줍니다. 서울 리전(APN2)을 기준으로 각 항목에 대해 쉽고 자세하게 설명해 드리겠습니다.
이 항목은 서울 리전(APN2)에서 Amazon S3 Standard 스토리지 클래스에 저장된 데이터에 대한 비용을 나타냅니다. S3 Standard는 범용적인 고성능 스토리지로, 최소 저장 기간 없이 저장된 데이터의 바이트 시간(Byte-Hours)을 기준으로 과금됩니다. 즉, 파일의 크기와 저장된 시간에 비례하여 요금이 부과됩니다.
이 항목은 서울 리전(APN2)에서 Amazon S3 Standard-Infrequent Access (S3 Standard-IA) 스토리지 클래스에 저장된 데이터에 대한 비용을 나타냅니다. S3 Standard-IA는 자주 액세스하지 않지만 필요할 때 빠르게 액세스해야 하는 데이터에 적합하며, 저장된 데이터의 바이트 시간(Byte-Hours)을 기준으로 과금됩니다.
이 항목은 서울 리전(APN2)에서 Amazon S3 Glacier Instant Retrieval 스토리지 클래스에 저장된 데이터에 대한 비용을 나타냅니다. Glacier Instant Retrieval은 자주 액세스하지 않지만 필요할 때 즉시(밀리초 단위) 데이터를 검색해야 하는 아카이브 데이터에 적합하며, 저장된 데이터의 바이트 시간(Byte-Hours)을 기준으로 과금됩니다.
이 항목은 서울 리전(APN2)에서 Amazon S3 Glacier Deep Archive 스토리지 클래스에 저장된 데이터에 대한 비용을 나타냅니다. Glacier Deep Archive는 AWS S3에서 가장 저렴한 스토리지 클래스로, 장기간 보관하고 거의 액세스하지 않는 아카이브 데이터에 적합합니다. 저장된 데이터의 바이트 시간(Byte-Hours)을 기준으로 과금됩니다.
이 항목은 서울 리전(APN2)에서 Amazon S3 Glacier 스토리지 클래스에 저장된 데이터에 대한 비용을 나타냅니다. S3 Glacier는 자주 액세스하지 않는 데이터의 장기 아카이빙에 사용되며, 저장된 데이터의 바이트 시간(Byte-Hours)을 기준으로 과금됩니다. Glacier Instant Retrieval 및 Deep Archive와는 다른, 전통적인 Glacier 스토리지입니다.
이 항목은 서울 리전(APN2)의 S3 버킷에 대한 Tier 1 요청에 대한 비용을 나타냅니다. Tier 1 요청은 주로 쓰기(PUT, COPY, POST, LIST) 작업에 해당하며, S3에 데이터를 업로드하거나, 복사하거나, 객체 목록을 조회할 때 발생합니다. 이 요청들은 Tier 2 요청에 비해 일반적으로 더 비쌉니다.
이 항목은 서울 리전(APN2)의 S3 버킷에 대한 Tier 2 요청에 대한 비용을 나타냅니다. Tier 2 요청은 주로 데이터를 다운로드(GET 요청)하거나, 객체 메타데이터를 검색하거나, S3 Glacier에서 데이터를 복원할 때 발생하는 요청입니다. Tier 1 요청보다 일반적으로 비용이 저렴합니다.
이 항목은 서울 리전(APN2)의 S3 버킷에 대한 Tier 3 요청에 대한 비용을 나타냅니다. 주로 S3 Glacier Instant Retrieval 스토리지 클래스의 요청과 관련이 있으며, 이 스토리지 클래스의 특정 작업(예: 복원 요청)에 대한 비용을 나타냅니다.
이 항목은 서울 리전(APN2)의 S3 버킷에 대한 Tier 4 요청에 대한 비용을 나타냅니다. 이 요청 유형은 S3 Glacier Deep Archive와 같이 가장 저렴한 아카이브 스토리지 클래스에서 데이터를 복원하는 특정 유형의 요청에 해당할 수 있습니다.
이 항목은 서울 리전(APN2)에서 Amazon S3 Glacier Deep Archive 스토리지 클래스에 대한 Tier 1 요청에 대한 비용을 나타냅니다. Deep Archive에 데이터를 업로드하거나 특정 작업을 수행할 때 발생하는 요청 비용입니다.
이 항목은 서울 리전(APN2)에서 Amazon S3 Glacier Instant Retrieval 스토리지 클래스에 대한 Tier 2 요청에 대한 비용을 나타냅니다. Glacier Instant Retrieval 스토리지에서 데이터를 읽거나 특정 작업을 수행할 때 발생하는 요청 비용입니다.
이 항목은 서울 리전(APN2)에서 Amazon S3 Glacier 스토리지 클래스에 대한 Tier 2 요청에 대한 비용을 나타냅니다. Glacier 스토리지에서 데이터를 읽거나 특정 작업을 수행할 때 발생하는 요청 비용입니다.
이 항목은 서울 리전(APN2)에서 Amazon S3 Glacier Instant Retrieval 스토리지 클래스에 저장된 데이터를 검색(Retrieval)할 때 발생하는 비용을 나타냅니다. 이 스토리지 클래스에서는 저장 비용 외에 데이터를 검색할 때 별도의 요금이 발생합니다.
이 항목은 서울 리전(APN2)에서 Amazon S3 Glacier Deep Archive 스토리지 클래스에서 데이터를 복원하기 위해 임시로 스테이징되는 시간에 대한 비용을 나타냅니다. Glacier Deep Archive에서 데이터를 검색할 때, 먼저 해당 데이터가 임시 영역으로 복원되는 시간이 필요하며, 이 시간에 대해 요금이 부과됩니다.
이 항목은 서울 리전(APN2)의 S3 버킷에서 외부 인터넷이나 다른 AWS 리전으로 데이터를 전송(Outbound Data Transfer)할 때 발생하는 비용을 나타냅니다. S3에 저장된 데이터를 사용자가 다운로드하거나 다른 AWS 서비스로 이동시킬 때 발생하는 트래픽량(바이트 단위)에 따라 과금되며, 특히 인터넷으로의 데이터 전송은 비용이 높습니다.
이 항목은 서울 리전(APN2)의 S3 버킷에서 미국 동부(오하이오) 리전(USE2)으로 데이터를 전송(Outbound Data Transfer)할 때 발생하는 비용을 나타냅니다. AWS 리전 간 데이터 전송은 별도의 요금 정책이 적용되며, 인터넷으로의 전송보다는 저렴하지만 비용이 발생합니다.
이 항목은 서울 리전(APN2)에서 S3 스토리지 렌즈(Storage Lens)와 같은 스토리지 분석 도구를 사용하여 객체 수를 모니터링할 때 발생하는 비용을 나타냅니다. S3는 버킷의 스토리지 사용량, 활동, 추세 등을 분석하는 기능을 제공하며, 이를 사용할 때 요금이 부과될 수 있습니다.
이 항목은 서울 리전(APN2)에서 최소 저장 기간이 있는 스토리지 클래스(예: S3 Standard-IA, S3 One Zone-IA, Glacier 등)에 저장된 객체를 최소 기간 이전에 삭제할 때 발생하는 비용을 나타냅니다. S3는 이러한 스토리지 클래스에 대해 최소 저장 기간을 보장받는 대신 저렴한 요금을 제공하므로, 해당 기간을 채우지 않고 삭제하면 미리 삭제한 시간에 대한 요금이 부과됩니다.
아래는 S3의 지난 6개월 비용을 usage type과 resource id로 나누어 조회해본 결과입니다.
먼저 S3 비용을 사용량 유형(UsageType)별로 분류한 데이터를 분석해보겠습니다.
APN2-TimedStorage-ByteHrs
이 항목은 S3 Standard 스토리지에 저장된 데이터 용량에 대한 비용으로, 전체 비용($17,040.28)의 대부분인 $14,302.44를 차지합니다(약 84%). 이는 S3 비용의 가장 큰 비중을 차지하는 부분이 단순 스토리지 용량임을 명확히 보여줍니다.
APN2-DataTransfer-Out-Bytes
S3에서 외부로 전송되는 데이터 양에 대한 비용으로, 총 $1,545.15가 발생했습니다. 이는 스토리지 비용 다음으로 큰 비중을 차지합니다(약 9%).
APN2-Requests-Tier1 & APN2-Requests-Tier2
각각 PUT 요청(데이터 쓰기)과 GET 요청(데이터 읽기)에 대한 비용입니다. 이 두 항목을 합쳐 총 $874.29가 발생했는데, 이는 스토리지나 데이터 전송 비용에 비해 상대적으로 낮은 비중을 차지합니다.
분석 및 절감 기회 가장 큰 비용을 차지하는 TimedStorage 항목을 최적화하는 것이 S3 비용 절감의 핵심입니다.
스토리지 클래스 최적화: 현재 S3 Standard에 저장된 데이터 중, 자주 액세스되지 않는 데이터(Infrequently Accessed, IA)가 있다면 S3 Standard-IA나 S3 Glacier Instant Retrieval과 같은 저렴한 스토리지 클래스로 이동시켜야 합니다.
라이프사이클 정책: 수동으로 관리하기보다 S3 라이프사이클 관리 정책을 설정하여 특정 기간(예: 30일)이 지난 객체는 자동으로 저렴한 스토리지 클래스로 옮기도록 자동화하면 지속적인 비용 절감 효과를 볼 수 있습니다.
두 번째로 S3 버킷(Resource ID)별 비용을 분석해 보겠습니다.
{}-service-prod
이 버킷이 총 비용($17,040.28)의 압도적인 대부분인 $13,395.39를 차지합니다(약 78%). 이 버킷이 전체 S3 비용의 TimedStorage와 DataTransfer-Out 비용을 대부분 발생시키는 주범이라고 추정할 수 있습니다.
ep-data.{}.co.kr
두 번째로 높은 비용($1,439.27)을 차지하는 버킷입니다.
{}-dw
세 번째로 높은 비용($634.09)을 차지합니다. 특히 이 버킷은 2025년 2월 이후 비용이 급격하게 감소했는데, 이는 데이터 정리, 아카이브, 또는 다른 스토리지 클래스로의 전환이 있었을 가능성을 시사합니다.
분석 및 절감 기회
{}-service-prod 버킷 집중 분석: 이 버킷의 비용이 가장 높으므로, 우선적으로 분석해야 합니다. 이 버킷의 데이터를 S3 Inventory를 통해 확인하고, 사용 빈도가 낮은 객체는 S3 Intelligent-Tiering이나 Glacier와 같은 저렴한 스토리지로 전환하는 것을 고려해야 합니다. 특히 S3 Intelligent-Tiering은 액세스 패턴이 변경될 때 자동으로 티어를 이동시켜 주므로 효과적입니다.
데이터 전송 최적화: DataTransfer-Out 비용이 높은 경우, 불필요한 퍼블릭 데이터 전송을 줄이는 방안을 모색해야 합니다. 예를 들어, 동일 AWS 리전 내의 서비스 간 데이터 전송은 무료이므로, 아키텍처를 최적화하여 크로스-리전 데이터 전송을 줄여야 합니다.
로그 관리: prod-lb-access-logs.{}.co.kr와 같이 로그 버킷 비용($279.28)도 발생하고 있습니다. 로그 데이터는 시간이 지나면 액세스 빈도가 현저히 낮아지므로, 라이프사이클 정책을 적용하여 주기적으로 Glacier 등으로 아카이브하면 비용을 크게 절감할 수 있습니다.
S3 비용 절감의 핵심은 {}-service-prod 버킷에 집중되어 있는 TimedStorage 비용을 최적화하는 것입니다. S3 라이프사이클 정책과 S3 Intelligent-Tiering을 활용하여 데이터를 액세스 빈도에 따라 자동으로 저렴한 스토리지 클래스로 옮기는 것이 가장 효과적인 비용 절감 전략입니다. 또한, DataTransfer-Out 비용을 줄이기 위해 데이터 아키텍처를 검토하고 불필요한 외부 전송을 최소화해야 합니다.
S3 비용 분석 결과, 전체 비용의 84%가 APN2-TimedStorage-ByteHrs 항목에서, 그리고 비용의 78%가 {}-service-prod 버킷에서 발생하는 것을 확인했습니다. 이는 S3 비용 최적화의 핵심이 바로 이 버킷에 저장된 데이터의 스토리지 클래스를 관리하는 것임을 명확히 보여줍니다.
앞으로 추가적인 비용 절감을 위한 핵심 전략은 세 가지입니다. 첫째, {}-service-prod 버킷의 데이터를 S3 라이프사이클 정책이나 S3 Intelligent-Tiering을 활용하여 액세스 빈도에 따라 S3 Standard-IA나 Glacier와 같은 저렴한 스토리지 클래스로 자동 이동시켜야 합니다.
둘째, 스토리지 비용 다음으로 큰 비중을 차지하는 DataTransfer-Out-Bytes 비용을 줄이기 위해 데이터 전송 아키텍처를 검토하고, 불필요한 외부 전송을 최소화해야 합니다.
셋째, {}-dw와 같은 기타 버킷들도 비용이 급감한 사례를 참고하여, 불필요한 데이터를 주기적으로 정리하고 아카이빙하는 정책을 수립해야 합니다. 이러한 체계적인 관리를 통해 S3 비용을 지속적으로 최적화할 수 있을 것입니다.