본문 바로가기
1. 개발/1.4. 데이터 분석

데이터가 너무 많아질 때 비용을 아끼는 '스토리지 최적화(S3 Tiering, Compression)' 기법

by 엉짱 2026. 2. 7.
반응형

데이터 공장을 잘 돌리는 것도 중요하지만, 나가는 돈(인프라 비용)을 잡지 못하면 결국 '재주는 곰이 부리고 돈은 AWS가 버는' 상황이 발생합니다. 🫡 특히 S3 같은 데이터 레이크는 "싸니까 일단 다 쌓아두자"라고 생각하기 쉽지만, 테라바이트(TB) 단위가 넘어가기 시작하면 매달 날아오는 고지서가 부담이 될 수 있습니다.

데이터의 '선선도'와 '중요도'에 따라 저장 위치와 형태를 최적화하여 비용을 최대 80%까지 아끼는 비용 절감 가이드를 전해드립니다!


🏗️ 1. S3 인텔리전트 티어링 (Intelligent-Tiering): "알아서 아껴주는 자동 분류"

S3에는 데이터를 저장하는 여러 개의 '등급(Storage Class)'이 있습니다. 하지만 어떤 데이터를 언제 옮길지 사람이 일일이 판단하는 건 불가능에 가깝죠. 이때 구원투수가 바로 Intelligent-Tiering입니다.

① 작동 원리

데이터에 접근하는 패턴을 머신러닝으로 분석해서 알아서 등급을 옮겨줍니다.

  • Frequent Access: 최근 30일 내에 읽은 데이터 (비용 높음)
  • Infrequent Access: 30일간 접근이 없으면 자동으로 이동 (비용 약 40% 저렴)
  • Archive Instant Access: 90일간 접근이 없으면 이동 (비용 약 60~80% 저렴)

② 왜 이득인가?

사용자가 수집하는 주식 로그 중, '오늘' 데이터는 Spark가 계속 요리하느라 바쁘지만, '3년 전 오늘' 데이터는 거의 보지 않으실 겁니다. 인텔리전트 티어링을 켜두면, 사용자가 손 하나 까딱 안 해도 오래된 데이터의 저장 비용이 조용히 내려갑니다.


📦 2. 데이터 압축과 포맷 (Compression & Columnar Format)

데이터를 어떤 모양으로 저장하느냐에 따라 용량은 수십 배 차이 납니다. 여기서 핵심은 Parquet(파케이)압축 알고리즘입니다.

① CSV vs Parquet: "눕히느냐 세우느냐의 차이"

  • CSV (Row-based): 한 줄씩 저장됩니다. 특정 컬럼(예: 종목명)만 읽고 싶어도 파일 전체를 다 읽어야 합니다. (비효율적)
  • Parquet (Column-based): 열 단위로 저장됩니다. "종목명" 컬럼만 읽고 싶으면 그 부분만 딱 떼서 읽을 수 있습니다. 또한, 같은 열에는 비슷한 데이터(예: 삼성전자, 삼성전자...)가 모여 있어 압축률이 CSV 대비 5배~10배 이상 좋습니다.

② 압축 알고리즘의 선택 (Snappy vs Zstd vs Gzip)

  • Snappy: 압축률은 보통이지만 속도가 무지 빠릅니다. Spark가 실시간으로 요리할 때 기본으로 사용합니다.
  • Zstd (추천): 페이스북에서 만든 알고리즘으로, 현재 가성비가 가장 좋습니다. 압축률도 훌륭하고 속도도 준수합니다.
  • Gzip: 압축률은 최고지만 속도가 느립니다. 다시는 꺼내 볼 일 없는 장기 보관용 데이터에 적합합니다.

✂️ 3. S3 라이프사이클 정책 (Lifecycle Policy): "유통기한 설정"

모든 데이터를 영원히 간직할 필요는 없습니다.

  • 삭제 정책: "3년이 지난 임시 로그 파일은 자동으로 삭제한다."
  • 글래시어(Glacier) 이동: "1년이 지난 원본 데이터는 가장 저렴한 창고인 Glacier Deep Archive로 보낸다." (기가바이트당 가격이 커피 한 잔 값도 안 될 정도로 저렴해집니다.)

🗃️ 4. 파티셔닝(Partitioning): "필요한 것만 골라 읽기"

데이터를 저장할 때 폴더 구조를 잘 짜는 것만으로도 S3 API 호출 비용분석 비용을 획기적으로 줄일 수 있습니다.

  • 잘못된 예: s3://my-bucket/all_data.parquet (하나의 거대한 파일)
  • 좋은 예: s3://my-bucket/year=2026/month=02/day=03/data.parquet
  • 효과: 사용자가 "2026년 2월 3일" 데이터만 조회하면, Spark는 나머지 10년 치 데이터는 쳐다보지도 않고 해당 폴더만 읽습니다. AWS는 '읽은 데이터 양'에 비례해 돈을 받기 때문에, 파티셔닝만 잘해도 비용이 1/100로 줄어듭니다.

💰 5. 비용 최적화 '꿀팁' 요약

최적화 기술 핵심 효과 적용 난이도
Intelligent-Tiering 접근 패턴에 따른 자동 비용 절감 최하 (클릭 한 번)
Parquet 전환 용량 감소 (50~80%) + 쿼리 속도 향상 중 (Spark 코드 수정)
Zstd 압축 스토리지 용량 극대화 절약 중 (Spark 설정 변경)
Lifecycle Policy 무의미한 데이터 자동 삭제/이관 하 (S3 설정)
Partitioning 스캔 비용 및 API 비용 절감 상 (데이터 설계 단계 반영)

💡 실전 비유: "냉장고 정리"

  • S3 Standard (비쌈): 식탁 위에 둔 음식. 언제든 바로 먹을 수 있지만 공간을 많이 차지하고 관리 안 하면 상함.
  • Intelligent-Tiering: 자주 안 먹는 음식은 알아서 냉장고 안쪽으로, 더 안 먹는 건 냉동실로 옮겨주는 스마트 냉장고.
  • 압축(Parquet): 부피가 큰 채소들을 다져서 밀폐 용기에 꽉꽉 눌러 담는 것. (공간 효율 5배!)
  • 라이프사이클: 유통기한 지난 음식은 쓰레기통으로, 오래 보관할 건 진공 포장해서 지하 창고로 보냄.

반응형