AWS 프리티어로 서비스를 배포하며 생긴 과금 상황과 비용 절감 방법을 공유합니다.
문제상황
팀프로젝트를 마무리하던 도중 AWS에 요금이 청구되었다는 사실을 발견했습니다. 1.37달러의 소액이긴 하지만 수익이 없는 서비스이기에 굳이 돈을 새어 나가게 하고 싶지 않았습니다. 비용이 없어야 부담 없이 서비스를 유지하며 리팩토링을 할 수 있다는 생각입니다.
프리티어를 시작한 지 약 한 달이 지났고 2월 빌지에는 과금이 없던 상황으로 봐서 3월에 추가한 기능 중 어디선가 과금이 되었을 거라 예상했습니다.
과금 원인
결론부터 말씀드리면 과금의 원인은 클라이언트와의 https 통신을 위해 도입했던 Load Balancer였습니다. 서버끼리는 http통신, 서버와 클라이언트는 https 통신을 하기 위해 로드밸런서를 이용했는데, 이 로드밸런서에 public IPv4를 할당하는 과정에서 첫 번째 과금이 되었고, 로드밸런서의 앞단에 위치한 Route53의 호스팅 영역 관리에서 두 번째 과금이 되었습니다.
과금 내용
1. public IPv4
AWS 정책에 따르면 2024년 2월부터 프리 티어의 public IPv4 1개당 약 월 5천원이 부과됩니다. ($0.005 per In-use public IPv4 address per hour)
*ec2에 해당하는 IPv4는 그대로 무료입니다. ($0.00 per In-use public IPv4 address per hour for EC2 Free Tier)
로드밸런서를 사용하기 위해서는 최소한 2개의 리전을 지정해야 되기 때문에 월 만원을 고정적으로 지불해야 합니다.
+ RDS에 public IPv4를 할당하셔도 과금이 됩니다.
2. Hosted Zone
Route53의 호스팅 영역 관리에도 월 0.5달러씩 소요됩니다. 호스팅 영역 한 개당 0.5달러라 사용하지 않는 영역은 바로 제거하는 게 좋습니다.
DNS 쿼리 제공 항목도 과금 요소에 포함되어 있으나, 백만 개 당 0.4 달러로 여유 있기 때문에 아직 고민할 부분은 아니라고 생각합니다.
해결 방안
https 통신을 적용하는 방법은 대표적으로 3가지가 있습니다.
1번과 2번은 인증서를 따로 발급받을 필요 없이 인프라 레벨에서 https 통신을 적용할 수 있기 때문에 많이 사용하는 방법입니다.
1. Load Balancer
저희 서비스가 사용하고 있던 방법입니다. Auto Scaling 대비용으로 선택한 이유도 있으나 지금은 AWS Certificate Manger의 인증서를 붙이는 용도로만 사용을 하고 있기에 유지할 이유가 없어졌습니다.
2. CloudFront
다음은 cloudfront를 이용한 방법입니다. 앞선 방법처럼 앞단에만 https 통신을 적용하고 뒷단에는 http 통신을 적용합니다. 캐싱도 가능해서 가능해서 많이 사용합니다.
이 방법으로 적용하려 했으나 왠지 모를 에러에 꺾여버렸습니다. get method에만 이런 에러를 뿜는 것을 보아하니 캐시 관련 오류 같으나 프로젝트 제출까지 얼마 남지 않아서 다시 로드밸런서 방식으로 복구했습니다.
3. ec2 인스턴스에 인증서 적용
프로젝트 제출 후 다시 유지비용에 대한 고민을 하다가 발견한 Nginx.
Nginx는 리버스 프록시로 활용되며, 로드 밸런싱, SSL 터미네이션, 캐싱과 같은 다양한 기능을 수행합니다. 이러한 기능들로 애플리케이션 앞단의 AWS 서비스들을 대체할 수 있어서 Nginx를 도입했습니다. 오픈소스라 요금도 들지 않고 성능도 확실하다는 점이 마음에 들었습니다. 추후 Nginx를 이용한 무중단 배포도 도전해보고 싶습니다.
진짜 Free Tier를 향해
Amazon VPC IP Adress Manager - 퍼블릭 IP 인사이트에서 public IPv4 adress가 잘 제거됐는지 확인할 수 있습니다.
Amazon 소유 EIP 1개만 보인다면 성공입니다.
참고사항: 리전별로 구분되니 꼭 사용중인 인스턴스가 있는 리전에서 확인하세요.
두 번째로는 Route53에서 호스팅영역이 존재하는지 확인합니다.
두 가지 모두 확인하셨으면 진짜 프리티어를 즐기실 수 있습니다. (트래픽 초과 비용은 당연히 별도)