[AWS] S3: 저장비용 최적화하기

S3는 정말 편리하고 좋은 서비스이긴 하지만, 종종 비용적으로 부담이 될 때도 있다.
물론 RDS 같은 헤비서비스들에 비교하면 그렇게 크지는 않다.

액세스 비용 같은건 Cloudfront 같은걸 앞에 대서 최적화가 쉬운데, 스토리지 비용의 경우에는 더 많은 고려가 필요하다.

이게 거의 저장 공간으로만 나온 비용이다.

이런식으로 뜯긴다.

캐시레이어를 잘 달아뒀다면 대부분의 요금은 저장공간에서 나온다.




스토리지 클래스

S3의 비용 산정 방식에 대해 이해하려면, 스토리지 클래스란 것을 알아야 한다.

스토리지 클래스는, 말 그대로 저장공간을 어떻게 저장할지에 대한 방법이다.
S3 콘솔에서 파일 상세페이지에 들어가면, 이런 버튼이 있다.

별다른 설정을 하지 않는다면, S3 파일들은 위와 같이 "Standard" 타입으로 저장이 된다.

성능도 대체로 가장 빠르고, 액세스 비용도 무난하지만, 저장 비용은 가장 비싸다.

버킷에 저장되어있는 데이터 전부가 자주 액세스하는 데이터라면 이걸 그냥 쓰는게 맞다. 하지만 항상 그렇지는 않다는 것이 문제다. 대부분의 사용사례에서는, 자주 쓰지 않는 파일이 쓰는 데이터보다 훨씬 많을 것이다.



1. Standard: Infrequent Access

접근 빈도가 매우 적은 데이터가 대부분이라면 "Infrequent Access" 타입의 Standard 클래스를 사용할 수 있다.

이건 스토리지 비용이 10배 이상 싼 대신에


액세스비용이 10배 이상 비싸다. 대부분 이런 trade off가 있다. 그냥 주지는 않는다.


2. Gracier

이건 진짜 자주 사용되지 않는 데이터를 보관하는 용도다. 이걸로 저장하면 요금이 스탠다드보다 5배는 더 싼데, 읽는게 너무 느려서 일반적인 용도는 아니다. 읽는데 최대 12시간까지 걸릴 수 있다.


3. Gracier Deep Archive

이건 진짜 장기백업용이다. 삭제하기에는 뭔가 나중에 쓸일이 있을 것 같은데, 사이즈는 무식하게 큰게 있으면 이런데다 박으면 된다. 스탠다드보다 10배 이상 싸다.





Intelligent-Tiering 스토리지

S3에서 밀어주는 저장공간 절약 시스템이다.
자주 사용되지 않는 데이터를 자동으로 식별해서 더 저렴한 공간으로 옮겨주는 것이다.

조금 유의할 점은, 객체 모니터링을 추가로 해주긴 해야 하기 때문에 그 개수로 비용을 추가로 뜯는다는 것이다.

그래서 크기가 작은 파일이 많은 것보다는, 크기가 큰 파일이 많은 경우에 더 큰 절감효과를 볼 수 있을 것이다.

업로드할때 그냥 이걸로 올리거나, 올려져있는 파일의 스토리지 클래스를 편집하면 적용이 가능하다.

이건 대충 이런 원리로 동작한다.

  1. 128kb 미만의 파일은 비용 부담도 거의 없으니까 검사 대상이 되지 않는다. 항상 스탠다드로 저장된다.
  2. 특정 파일이 자주 호출되지 않는 것 같다면, 시스템은 파일을 Infrequent Access로 옮긴다.

일단 기본 기능은 이것뿐이다.
그래서 이것만 하면 성능은 안정적으로 유지할 수 있고, 비용도 어느정도 줄일 수 있다.

그리고 아카이브 기능도 필요하다면 필요에 따라서 버킷에 아카이브 설정을 추가할 수 있다.
버킷 설정 페이지에 가서 구성을 누르면

일반 아카이브와 딥 아카이브 설정을 추가할 수 있다.
일반 아카이브는 90일 이상 버려진 객체를, 딥 아카이브는 180일 이상 버려진 객체를 싸구려 저장소에 옮긴다.
당연히 빠르게 읽을 수는 없다. 둘다 다시 읽어오는데서 몇시간은 지연될 수 있을 것이다.



참조
https://aws.amazon.com/ko/blogs/korea/new-automatic-cost-optimization-for-amazon-s3-via-intelligent-tiering/
https://aws.amazon.com/ko/s3/pricing/
https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html?icmpid=docs_amazons3_console#sc-dynamic-data-access