글

TinyDebt 개발기: 백엔드 없는 미니멀 부채 트래커

로컬 우선 저장소, 백엔드 없는 구조, 방해되지 않는 차분한 인터페이스 등 TinyDebt의 기술적 결정을 살펴봅니다.

TinyDebt 개발기: 백엔드 없는 미니멀 부채 트래커

지난 몇 주 동안 부채, 대출, 상환을 추적하는 작은 앱 TinyDebt를 만들었습니다. 작고 집중된 앱을 만드는 분들께 도움이 될 수 있도록 그 뒤에 있는 몇 가지 기술적 결정을 공유하고 싶습니다.

🧩 만든 이유

친구 사이의 소소한 빚을 자꾸 잊어버렸는데, 기존 앱은 회원가입, 곳곳의 광고, 복잡한 금융 기능 때문에 무겁게 느껴졌습니다.

저는 다음과 같은 앱을 원했습니다.

  • 즉시 열리고
  • 3~5초 만에 부채를 추가할 수 있으며
  • 오프라인에서 작동하고
  • 앞으로도 계속 단순한 앱

그렇게 TinyDebt가 탄생했습니다.

⚙️ 기술 스택

TinyDebt는 의도적으로 가볍게 만들었습니다.

  • 모바일용 React Native(Expo)
  • AsyncStorage를 사용한 로컬 우선 방식
  • 백엔드 없음 - 데이터는 기기에 저장됩니다(백업에만 Firebase 사용)
  • 모든 곳에 TypeScript
  • UI 라이브러리 대신 커스텀 컴포넌트로 만든 미니멀 UI
  • EAS build를 통한 App Store 및 Google Play 패키징

사용자 계정도, 분석도, 필수 요소 외의 외부 의존성도 없습니다.

🗂️ 데이터 모델

모든 부채 항목은 다음과 같은 형태입니다.

type Debt = {
  id: string;
  name: string;
  amount: number;
  type: "owed" | "borrowed";
  createdAt: number;
  history: Repayment[];
};

type Repayment = {
  amount: number;
  date: number;
};

모든 것을 직렬화 가능하게 유지하면 저장과 마이그레이션이 매우 쉬워집니다.

🧠 로컬 우선 UX

TinyDebt는 서버에 의존하지 않으므로:

  • 동작이 즉시 반영되고
  • 로딩이나 “동기화” 상태가 없으며
  • 오래된 휴대폰에서도 빠르게 느껴집니다

작은 개인용 유틸리티에는 딱 맞는 방식입니다.

🎨 UI 철학

앱이 “차분하게” 느껴지길 원했습니다.

  • 단순한 중성 색상
  • 차트나 대시보드 없음
  • 복잡함 없음 - 한 화면이 작업의 90%를 처리
  • 빠른 입력을 위한 접근성 좋은 탭 영역

작은 앱이 유용하기 위해 복잡한 비주얼은 필요하지 않습니다.

📦 출시

하지만 범위를 아주 작게 유지하고 싶습니다. 그게 핵심이니까요.

🙌 피드백 환영

모바일 앱을 만들거나 로컬 우선 유틸리티에 대한 생각이 있다면 피드백을 듣고 싶습니다. 앞으로도 계속 개선하겠습니다.