[회고] AWS 배포 비용 최소화

DY_DEV·2023년 12월 3일
1

PROJECT - COZYSTATES

목록 보기
2/3

github: https://github.com/11dy/seb44_main_029_personal

해당 프로젝트는 기획 초기에 음원과 동영상 데이터를 스트리밍의 형태로 사용자에게 제공하도록 구성됐다. 이런 서비스 핵심 기능 때문에 우리의 프로젝트는 AWS S3와 RDS에 높은 의존성을 가질 수밖에 없었다. 이런 우려가 정확했는지, 프로젝트 프런트엔드 멘토님도 구현 난이도, 운영비용 등의 문제로 기획을 변경하길 추천하셨다. 프런트엔드 팀원들은 멘토님의 권유를 수용해 기획 변경을 희망했지만, 백엔드는 기존의 계획을 진행하길 바랐다. 서로 많은 의견을 주고받고, 백엔드 멘토님의 조언도 받은 결과 동영상이 아닌 이미지 데이터를 사용하는 중재안이 선택됐다.

기획에 기반한 아키텍쳐 구상과 배포 환경 구현은 대부분 내가 담당했는데, 프로젝트가 끝나고 HTTPS 환경 구현까지 너무 많은 시간이 소요되서 제대로 된 QA를 진행하지 못해 많은 아쉬움이 남는다.

배포환경

전체적인 배포환경은 위와 같다. 주목할 점은 S3와 RDS다. 객체는 S3에 온라인의 오브젝트 형태로 저장되는데, 객체가 저장되는 순간 URL이 생성된다. 우리는 URL을 아래와 같이 이용한다.

  1. S3에 저장된 객체의 URL을 RDS에 생성된 테이블의 컬럼에 저장한다
  2. 클라이언트 요청 시 서버는 질의를 통해 객체의 URL을 사용자에게 전달한다.

위 방법 처럼 객체 URL을 RDS에 저장해도 됐지만, 스트리밍의 기능을 구현하기 위해 반복적으로 객체를 조회하는 서비스의 특성상 많은 비용 지출이 예상됐다. 그래서 나는 AWS SDK를 이용해 클라이언트 요청 시 RDS가 아닌 S3에서 객체 URL 리스트를 조회해 클라이언트에게 반환하는 로직을 구상했다. (https://velog.io/@11dy/AWS-S3-SDK-V2-%EA%B0%9D%EC%B2%B4-%EC%A1%B0%ED%9A%8C)

이런 방식으로 위 아키텍처 구성도 처럼 서비스를 완성할 수 있었다.

🌏S3, RDS 사용량에 따른 비용

서울 리전을 기준으로 데이터 전송에 대한 비용을 알아보자.

S3

해당 프로젝트에서는 AWS 프리티어를 사용했기 때문에 저장비용, GET요청에 대한 비용이 많이 나오진 않았다. 그 후 추가적인 요청 비용은 아래와 같다.


RDS

RDS 비용 정책은 다음과 같다.

더 자세한 내용은 아래 링크를 이용하자.
S3: https://aws.amazon.com/ko/s3/pricing/
RDS: https://aws.amazon.com/ko/rds/mysql/pricing/

📊 프로젝트 지출 비용

프로젝트 배포가 종료 된 현재 위 지출 내용을 살펴보자. AWS에 로그인 하면, 우측 상단에 계정 토클이 있다. 토글을 누르고
"결제 및 비용 관리 > 비용 분석 > Cost Expolorer에서 비용 분석" 순서로 들어가면 시간순으로 aws의 서비스별 사용량이 다양한 그래프형태로 표현된다.

HTTPS 배포를 위해 설정한 ALB와 RDS의 사용량이 대부분임을 알 수 있다. 해당 프로젝트에서는 다양한 이미지의 썸네일을 무한스크롤의 형태로 불러오는 기능이 있다. 사용자가 이렇게 불러온 썸네일 중 하나를 선택하면 본 이미지 객체의 URL은 AWS SDK를 이용해 S3에서 조회하고, 음원 스트리밍 서비스를 이용한다. 이때 썸네일의 URL은 RDS에서 조회하게 된다. 정리하자면

  • 음원, 이미지, 썸네일은 S3에 저장된다.
  • 썸네일의 URL은 RDS에 저장된다.
  • 음원, 이미지의 URL은 서버에서 SDK를 이용한 로직을 통해 S3에게 요청된다.

🚨음원, 원본 이미지까지 RDS에서 조회했다면 추가적인 비용지출이 발생했을 것이다.

결과적으로 비용 지출을 최소화 할 수 있었다.



참고)
https://www.youtube.com/watch?v=iCZ7KULNQys
https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-RDS-%EA%B0%9C%EB%85%90-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90-%EC%A0%95%EB%A6%AC-%EC%9D%B4%EB%A1%A0%ED%8E%B8
https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-S3-%EB%B2%84%ED%82%B7-%EC%83%9D%EC%84%B1-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%8B%A4%EC%A0%84-%EA%B5%AC%EC%B6%95

0개의 댓글