블로그

실제 사용량에 따라 데이터베이스 요금을 청구합니다

데이터를 저장해야 하는 Mythex 앱에는 각각 자체 Postgres 데이터베이스가 생기며, 게시된 앱의 데이터베이스 사용량은 빌드할 때와 같은 크레딧 잔액에서 차감됩니다. 9월 말까지 우리는 그 사용량을 앱의 서버가 실행된 시간으로부터 추정했습니다. 그런데 그 추정은 중요한 면에서 틀렸고, 그래서 교체했습니다. 이제 각 데이터베이스는 제공업체가 실제로 측정한 컴퓨팅 사용량에 따라 완료된 한 시간 단위로 청구되며, 각 시간은 한 번만 청구될 수 있습니다.

데이터베이스의 작동 방식

각 데이터베이스는 **0으로 자동 축소(scale to zero)**되는 서버리스 Postgres에서 실행됩니다. 몇 분 동안 유휴 상태이면 잠들고, 다음 쿼리가 오면 깨어납니다. 깨어 있는 동안에는 부하에 따라 컴퓨팅을 늘리고 줄일 수 있습니다. 이 덕분에 "앱마다 데이터베이스 하나"가 감당할 만한 비용이 됩니다. 대부분의 앱은 대부분의 시간에 조용하고, 잠든 데이터베이스는 거의 비용이 들지 않습니다.

즉 데이터베이스의 비용은 외부에서 볼 수 없는 두 가지에 달려 있습니다. 얼마나 오래 깨어 있었는지, 그리고 깨어 있는 동안 얼마나 컸는지입니다.

추정이 틀렸던 부분

원래 미터는 가정 하나를 했습니다. 게시된 앱의 서버가 실행되는 매 시간마다 데이터베이스를 가장 작은 컴퓨팅 크기로 청구한다는 것입니다.

그 가정은 세 가지 면에서 틀렸습니다.

  1. 크기가 틀렸습니다. 실제 데이터베이스는 추정이 가정한 것보다 큰 기본 크기로 실행되고 있었습니다.
  2. 데이터베이스는 자동으로 확장됩니다. 부하가 걸리면 커지는데, 추정은 그것을 전혀 보지 못했습니다.
  3. 데이터베이스는 앱 서버를 따라가지 않습니다. 데이터베이스는 무엇이든 쿼리하는 동안 깨어 있습니다. 앱, 예약 작업, 데이터베이스를 계속 조회하는 스크립트 등이 앱 서버가 실행 중인지와 상관없이 쿼리하면 깨어 있습니다.

결과적으로 추정은 사용자에게 실제 데이터베이스 비용의 약 절반만 청구하고 있었습니다. 이는 우리에게 지속 가능하지 않았고, 앱에 표시되는 사용량 숫자도 사람들이 생각하는 의미를 갖지 못하게 했습니다.

추측 대신 측정

데이터베이스 제공업체는 각 프로젝트의 **시간당 컴퓨팅 단위 초(compute-unit-seconds)**를 보고합니다. 즉 크기까지 포함해서 실제로 얼마나 많은 컴퓨팅을 썼는지 알려 줍니다. 그래서 이제 미터는 다음과 같이 작동합니다.

  1. 데이터베이스가 있는 게시된 앱마다, 앱이 출시된 이후 완료된 모든 시간의 측정 사용량을 가져옵니다.
  2. 그 사용량을 제공업체 가격에 따라 비용으로 바꾸고, 요금제의 요율을 적용한 뒤 앱 소유자의 크레딧에서 차감합니다.
  3. 매번 최대 하루 전까지 되돌아봅니다. 그래서 API가 재시작되는 동안 놓친 시간도 나중에 청구됩니다.

스토리지는 활동과 상관없이 크기에 따라 따로 청구됩니다.

한 시간을 두 번 청구하지 않기

여러 서버에서 실행되고 충돌했다가 재시도할 수 있는 청구 미터는 이중 청구를 조심해야 합니다. 데이터베이스의 각 시간은 청구하기 전에 자체 데이터베이스 행에서 **점유(claim)**되며, (데이터베이스, 시간) 쌍에 유일성 제약이 걸려 있습니다. 두 서버나 재시도가 같은 시간을 청구하려고 하면 하나의 점유만 성공합니다.

드문 실패 사례에 대해서도 의도적으로 선택했습니다. 시간을 점유한 뒤 청구하기 전에 프로세스가 충돌하면, 그 시간은 점유된 채 청구되지 않은 상태로 남습니다. 드문 충돌로 약간의 매출을 놓치는 편이, 누군가에게 두 번 청구하는 것보다 낫습니다.

측정 기반 청구를 켰을 때는 다음 완전한 시간부터 시작했습니다. 그 이전 시간들은 이미 예전 추정 방식으로 청구되었고, 측정 데이터로 다시 청구했다면 그 구간을 두 번 청구하게 되었을 것입니다.

Mythex에서 빌드한다면 이게 의미하는 것

  • 데이터베이스 청구서는 이제 데이터베이스가 한 일을 반영합니다. 거의 사용되지 않는 앱은 비용이 아주 적고, 데이터베이스를 계속 쿼리하는 앱은 데이터베이스를 깨워 두어 비용이 더 듭니다.
  • 가장 큰 조절 요소는 앱이 데이터베이스를 어떻게 사용하느냐입니다. 데이터베이스를 몇 초마다 폴링하면 하루 종일 깨어 있게 됩니다. 필요할 때만 AI가 데이터를 가져오게 하거나 데이터를 캐시하면 데이터베이스가 잠들 수 있습니다. 기본 개념이 궁금하다면 데이터베이스란 무엇인가 가이드를 참고하세요.
  • Pro 요금제는 호스팅, 데이터베이스, 스토리지에 대해 무료 요금의 절반을 냅니다. 자세한 내용은 크레딧 문서에 있습니다.

얻은 교훈

  • 사용량 기반 비용의 추정은 점점 어긋납니다. 상위 제공업체가 실제 사용량을 알려 줄 수 있다면, 그 값으로 청구하세요.
  • 청구하는 가장 작은 단위에서 청구를 멱등적으로 만드세요. 우리에게 그 단위는 데이터베이스 한 시간입니다.
  • 실패해야 한다면, 고객에게 유리한 쪽으로 실패하세요.

Mythex · Pricing · AI로 무엇이든 만들기 · 웹사이트 및 앱 템플릿 · Mythex 비교 · AI 앱 개발 용어집 · 무료 AI 앱 개발 도구 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)