은은한 빛이 드는 사무실에 서류와 녹색 폴더가 쌓여 있습니다.

프로덕트 노트

조용히 늘어나는 데이터베이스

사용자가 늘어나는 것은 반가운 일입니다. 하지만 현재 데이터베이스가 언제까지 감당할 수 있을지도 고민하게 됩니다. Authrim은 필요한 시점보다 먼저 새 계정의 저장소를 준비합니다.

데이터를 옮기기 전에 저장소를 늘립니다

Authrim이 사용하는 Cloudflare D1은 데이터베이스 하나당 무료 플랜 500 MB, 유료 플랜 10 GB의 용량 제한이 있습니다. 사용자와 데이터가 늘면 새로운 저장 공간이 필요해집니다.

Authrim은 처음부터 여러 데이터베이스에 계정을 배분할 수 있어, 확장할 때 모든 기존 계정을 옮길 필요가 없습니다. 이 저장 단위를 샤드라고 부릅니다.

기존 계정은 그대로 두고 새 계정의 저장 위치를 늘립니다. 이것이 계정 저장소 확장의 기본입니다.

데이터마다 증가 속도가 다릅니다

OAuth 클라이언트와 정책 같은 테넌트 설정, 계정과 개인정보, 이메일로 계정 위치를 찾는 인덱스를 각각 저장합니다.

사용자가 늘어도 모든 데이터베이스를 함께 늘릴 필요는 없습니다. 계정과 검색 인덱스는 건수와 증가 속도가 달라 필요한 곳에 용량을 추가합니다.

테넌트 설정 OAuth 클라이언트와 정책 테넌트 구성 저장 계정과 개인정보 Core와 PII 별도 저장 할당 건수와 증가 추적 검색 인덱스 계정 저장 위치 검색 예측 후 용량 추가 데이터 용도별로 필요한 저장소의 용량을 늘립니다.
계정과 개인정보는 별도 데이터베이스에 저장합니다. 이유는 개인정보를 두는 곳에서 설명합니다.

남은 계정 수용량을 확인합니다

새 계정은 해당 테넌트가 사용할 수 있는 샤드에 배정됩니다. 정상 작동하며 목표 대비 할당 비율이 낮은 샤드를 우선합니다.

기준은 디스크 사용률이 아니라 설정한 목표 계정 수까지 얼마나 더 받을 수 있는가입니다. 예를 들어 목표가 10만 개라면 2만 개의 여유를 다음 저장소 준비의 기준으로 삼습니다.

여유가 적어지면 준비한 예비 샤드를 배정합니다. 여러 테넌트가 공유하는 경우와 하나가 전용으로 사용하는 경우 모두 같은 방식입니다.

공유 테넌트

A·B·C가 공유하며 구분선은 테넌트 경계

전용 테넌트

A만 사용

공유와 전용 혼합

공유 풀 전용: D A·B·C 공유 D 전용
공유·전용·혼합 구성 모두 새 샤드가 새 계정의 저장소가 됩니다. 수위는 계정 할당 건수를 나타내며 디스크 사용률이나 실제 증설 시각이 아닙니다. 공유 샤드의 구분은 논리적 테넌트 격리입니다.

일상 운영에서 반복하지 않아도 되는 일

자동 프로비저닝을 설정하면 등록량이 늘 때마다 운영자가 데이터베이스와 테이블을 만들고 새 등록 위치를 연결할 필요가 없습니다. 용량을 추가할 때마다 기존 계정의 이전 계획을 세울 필요도 없습니다.

운영자는 증설 진행, 실패, 사용량과 비용이 예상 범위인지 확인합니다. 권한 부족이나 서비스 한도는 여전히 해결해야 합니다. 이 역할 분담 아래 Authrim이 다음 저장소를 준비합니다.

지금의 빈자리만으로는 부족합니다

2만 계정을 더 받을 수 있어도 하루 100개 증가하는 서비스와 시간당 1만 개 증가하는 서비스의 준비 시간은 다릅니다.

Authrim은 현재 할당량과 최근 등록 속도로 계정 및 검색 인덱스의 향후 용량을 예측합니다. 정기 처리는 1분마다 실행되고, 계정 할당 후에도 예측을 갱신합니다.

이미 생성 중인 샤드도 계산에 포함해, 여러 처리가 같은 부족을 감지하더라도 불필요한 데이터베이스를 중복 생성하지 않도록 합니다.

생성부터 사용 시작까지

예비 샤드가 부족하면 Cloudflare 관리 API로 D1을 생성하고 테이블을 준비하며 Worker 접근과 저장 위치를 설정·배포합니다. 읽기와 쓰기를 확인한 뒤 할당 대상으로 사용합니다.

자동 프로비저닝을 활성화하고 D1용과 Workers용 API 토큰을 각각 설정해야 합니다. 자동 실행이 불가능하면 운영자가 설정 도구로 진행합니다.

생성 중 진행 상태를 저장합니다. 일시적인 통신 장애는 그 상태에서 재시도할 수 있습니다. 권한이나 리소스 한도 문제는 원인을 해결한 뒤 재개합니다.

준비가 늦어 수용량이 소진되면 새 등록에 재시도가 필요할 수 있습니다. 미리 준비하는 이유는 이 대기 시간을 줄이기 위해서입니다.

데이터 이동은 운영자가 결정합니다

용량 추가와 기존 데이터 이동은 다른 작업입니다. 공유 샤드에서 전용 샤드로 옮길 때는 새 위치뿐 아니라 기존 데이터 복사도 필요합니다.

이전을 시작할지는 운영자가 결정합니다. 승인 후 동기화, 검증, 전환은 Authrim이 진행합니다.

공유 샤드 A B C 여러 테넌트가 한 샤드를 공유 승인 이전 승인이 이전의 시작점 동기화·검증·전환 하나의 테넌트가 전용으로 사용 A 전용 샤드
승인 후 데이터를 동기화·검증하고 공유에서 전용으로 전환합니다. 이 과정에는 쓰기를 잠시 멈추는 단계가 있습니다.

현재 지원하는 배치 변경은 공유에서 전용으로의 이전입니다. 전용에서 공유로 돌아가거나 기존 계정을 자동 재분배하는 기능은 없습니다.

사용이 끝난 샤드 삭제도 운영자의 승인이 필요합니다. 용량 증가만으로 기존 데이터 이동이나 삭제가 자동 시작되지는 않습니다.

어디까지 확인했는가

2026년 7월 20만 테스트 계정 측정에서 Core는 약 208 MB, PII는 238 MB, Lookup은 426 MB였습니다. 각각 유료 플랜의 단일 데이터베이스 한도 10 GB의 5% 미만입니다. 실제 사용량은 속성과 인덱스에 따라 달라집니다.

기본 목표는 샤드당 10만 계정입니다. 물리적 한도까지 채우는 대신 다음 샤드를 준비할 여유를 둡니다.

Authrim은 pre-1.0이며 장기간 대규모 운영 경험은 앞으로 쌓아 갈 단계입니다. 20만 테스트 계정의 저장 용량 측정과 수백만 명이 매일 사용하는 서비스 운영은 구분합니다.

성장할 때마다 이전 계획을 세우지 않도록

작은 서비스가 처음부터 대규모 구성을 준비할 필요는 없습니다. 적은 샤드로 시작해 등록 증가에 맞춰 저장 위치를 더할 수 있도록 Authrim에 준비 절차를 담았습니다.

사용자가 늘 때 데이터베이스 이사부터 고민하는 일을 줄이고, 서비스 자체에 더 많은 시간을 쓰도록 하고자 합니다.

2026년 7월 30일, 테스트 계정 20만 개로 측정했습니다. MB는 십진 단위입니다. D1 용량 한도는 Cloudflare 문서를 참고하세요.