심진석

수정일

AWS 비용 절감기

최근 외주로 진행한 작업에서 서비스 규모에 비해 AWS 비용이 과도하게 청구되고 있다는 생각이 들었다. 자신있게 비용을 절반으로 줄일 수 있다고 얘기했지만 실상을 들여다보니 간단하게 할 수 있는 작업들이 아니었다.

다음 계약에서 비용 절감 작업을 진행한다는 내용을 넣었고, 결국은 절반 가까이 줄이는데 성공했다. 그 과정을 소개하려한다.

상세한 비용 확인

요금을 보는 페이지가 몇개 있지만 가장 정확한건 비용관리의 청구서 페이지였다. 서비스와 리전별로 어떤 사용 내역으로 청구가 되었는지 잘 보여준다.

왼쪽에 +를 누르면 자세한 항목이 나온다. 그런데 자세하게 나오는 것 같으면서 조금 이게 뭘까하는 부분이 많았다. 아무래도 서비스를 구축한 사람이라면 해당 항목이 어떤 비용인지 쉽게 감을 잡을 수 있겠지만, 경험이 부족하다면 정확하게 알기 어렵다.

ChatGPT에게 뭘 의미하는걸까 여러번 물어봤지만 도움이 되진 않았다. 그냥 의심이 드는 것 부터 차례대로 찾아보았다.

과도한 트래픽 비용

비용 중에서 가장 큰 비중을 차지하는게 트래픽 비용이었다. S3에서 직접 호스팅 하고 있어 테라바이트 단위의 트래픽에선 꾀나 부담스러울만한 비용이었다.

cloudfront로 바꾸면 비용이 절반으로 줄어들고, 이미지 프로세싱 기능도 적용하여 사이즈를 축소해 용량도 줄일 수 있었다. 이미지 프로세싱은 직접 구현할 수 있겠지만 그냥 안전하게 AWS에서 제공하는 소스코드를 사용했다.

그리고 가장 먼저 메인과 상품 상세 페이지를 손봤다. 왜냐하면 메인페이지에 접속만해도 100MB의 트래픽이 발생하여 이게 큰 문제이지 않을까 생각했다.

이미지에 대해 lazy load 적용과 반응형 이미지 사이즈 조정 및 CDN 적용하여 메인페이지 최초 접속시 10MB로 줄였다. 물론 이 것도 큰 용량으로 생각하지만 세세한건 나중에 생각하기로 했다.

며칠간 지켜봤는데, 비용이 별로 줄어들지 않았다. 그래서 GPT에게 물어봐서 S3에 트래픽 모니터링할 수 있게 로그를 추가하였고, atena로 어떤 항목이 가장 많은 트래픽 비중을 차지하는지 확인했다.

S3 트래픽 예시

결과는 놀랍게도 GIF 파일이었다. 30MB, 심지어 70MB 짜리 파일이 있었고, 메인페이지에서 100MB가 발생하는 것도 GIF 파일의 영향이 컸었다. 나는 이 파일의 존재는 알고 있었지만, 요청이 적으면 상관없다고 판단했다. 메인페이지의 하단에 있었고, 레이지로드가 적용되어 요청이 많지 않을 것이라 생각했었다. 하지만 일부 용량이 큰 파일들의 요청 수가 상위권에 있었다.

리퍼럴 체크는 되지 않아 제대로 확인하지 못했지만 아무래도 메인페이지 접속은 크지 않고, 인스타 홍보를 통해 상세 페이지로 바로 접근이 되어 많은 요청이 있다는 판단을 하게 되었다. 방법이 없어 바로 GIF 파일 변경을 요청드렸다.

SSD 용량

데이터베이스에 SSD 용량을 크게 잡아두어서 발생한 비용이다.

비싼 고성능 SSD를 400GB를 잡아두었는데, 확인해보니 그렇게 많이 필요하지 않았다.

그런데, 청구된 비용은 다음과 같다.

그리 큰 돈이 아닐 수 있겠지만, 안써도 될 불필요한 비용이다.

RDS에서 용량 증설은 가능하지만 축소하는 것은 데이터베이스를 새로 만들었어야해서 덤프떠서 새로운 인스턴스에 복구하는 작업을 했다. 우여곡절이 조금 있었지만 테스트 결과 잘 작동하고있다.

불필요하게 유지중인 인스턴스

해당 사이트는 몇년 전에 파이썬 기반으로 운영 중인 서비스를 node.js로 포팅하는 작업이 있었다. 새로운 사이트를 오픈하고 기존에 있던 인스턴스 삭제를 하지 않은 것이다. 물론 여기엔 업체 내부의 사정이 있다.

RDS, 로드밸런서, EC2, VPC 등 여러 서비스를 삭제했다. 실제로 사용중인지 아닌지를 정확하게 판단해야하는게 어려웠다. 아무래도 실제 운영중인 서비스가 있기 때문에 영향이 있으면 안되기 때문이다.