[아테나] 분석용 데이터 적재를 위한 Amazon RDS ⚔️ S3 + Athena

문제 상황

  • 현재 프로젝트에서 AWS RDS를 통해 MySQL 프리티어를 사용하며, 8개 컬럼으로 이루어진 데이터 46,584개를 데일리로 적재하고 Redash를 통해 분석하고 있다.
  • Redash를 통해 쿼리를 수행 시 오랜 시간이 걸리는데, 데이터가 꾸준히 더 쌓였을 때가 더욱 걱정이다.

궁금 사항

  • 프리티어 및 프리티어 기간이 지난 후에도 부하 충당 여부
  • RDS를 통한 파이프라인으로 진행 시의 예상 과금액
  • 현재 파이프라인보다 효율적인 방안

수집 정보

  • AWS 계산기를 이용한다.
  • 용량보다 걱정되는 건 프리티어 성능으로 분석용 쿼리를 버틸 수 있는 지 여부이다.
  • 보통 서비스에 영향이 가기 때문에 분석용 쿼리를 RDS에서 바로 수행하지 않는다.
    일반적인 경우 데이터를 ETL 작업을 통해 DW로 이관한 뒤 분석을 진행한다.
    • 서비스에 영향이 간다는 것은 해당 RDS를 사용하고 있는 서비스에 분석용 쿼리를 수행하게 되면 RDS에 부하가 가게 되고 서비스에 지연이 발생할 가능성이 있다는 뜻이다.
    • 예를 들어 월간 게시글 통계를 내는 쿼리를 서비스에 사용중인 RDS에 수행하면 게시글 생성 및 조회 쿼리에 지연이 발생한다.
    • 그래서 Scale Out이 용이한 Redshift나 Trino를 사용한다.
  • AWS에서는 보통 DW로 Redshift를 많이 사용하지만 비용이 많이 나온다.
  • 단순 조회나 생성 없이 적재만 진행한다면 S3에 적재하는 것도 괜찮다.
    • 그 이후 Spark, Redshift, Trino, Atena 등 S3에서 데이터를 가져와 분석을 진행할 수 있는 툴을 사용하면 된다.
  • S3에 바로 적재하는 것이 훨씬 저렴하다.
  • 저 정도 데이터량은 MB 단위의 비교적 적은 데이터이다.
  • 분석용으로만 사용하는 데이터면 RDS에 저장하지 말고, S3에 바로 저장하는 게 추후에 분석하기도 괜찮다.
    • RDS 사양을 고려하지 않아도 된다.
    • 데이터 구조를 원하는 대로 변경할 수 있다.
    • Athena 사용 시 월 요금도 크게 나오진 않는다.
    • Redash에도 Athena 연결이 가능하다.

Amazon Athena

  • Athena란 S3에서 표준 SQL을 사용하여 데이터를 쉽게 바로 분석할 수 있는 대화형 쿼리 서비스이다.
  • 파일 로드, 압축, 풀기와 같은 과정이 필요없다.
  • SQL로 제약조건을 걸어 원하는 데이터만 가져올 수 있다.
  • 서버리스 서비스이기 떄문에 따로 인프라를 관리할 필요가 없다
  • 실행한 쿼리에 대해서만 비용을 지불한다.
  • 실행한 쿼리가 스캔한 데이터의 용량만큼만 비용청구가 된다.
  • 테이블 생성을 위한 CREATE, 파티셔닝을 위한 ALTER 같은 DDL문, 실패한 쿼리문은 비용청구가 되지 않는다.

효율적으로 쓰는 방법

  • 데이터 압축과 파티셔닝을 하게 되면 스캔하는 데이터의 양을 제한할 수 있다.
  • 따라서 비용 절감의 효과가 있다.

S3 버킷(Bucket) 파티셔닝

  • S3에 쌓인 로그를 조회할 때 성능을 향상시키고 비용을 절감한다.
  • 파티셔닝을 진행하지 않으면 아테나 쿼리는 모든 데이터를 스캔한다.
  • 파티셔닝을 통해 쿼리당 스캔하는 데이터의 양을 줄일 수 있다.
  • 보통 카테고리/년/월/일/시간등의 파티셔닝을 진행한다.(쪼개면 쪼갤수록 좋다.)

최종 구성 아키텍쳐

스크린샷 2022-02-16 오전 10 58 27

  • 최종적으로 위 이미지와 같이 파이파라인을 설계했다.
  • S3에 데이터 웨어하우스를 구축할 것이다.
  • Redash에 Athena를 연결하여 쿼리 서비스를 이용하는 논리가 아직은 잡혀있지 않으니, 일단 적재 후 추가로 학습할 것이다.

참조

0%