본문으로 건너뛰기
개인 가족/조직 단위 멀티테넌시 · 3단계 RBAC · FE+BE 분리 배포

Ledgerly

2025-08-01 — present

가족·조직 단위 공유 가계부 앱 — Next.js 16 풀스택, Supabase PostgreSQL, 3단계 역할 기반 접근 제어(OWNER/ADMIN/MEMBER), NestJS Cron 정기거래 자동 처리, 99.45% 라인 커버리지 단위 테스트 + 300건 이상 E2E 통합 테스트

Ledgerly project cover image

시스템 아키텍처

Ledgerly architecture diagram

문제 해결 과정

1

가족/조직 내 역할별 권한 분리 없이 공유 가계부 운영 시 데이터 보안 위험

해결 과정

OWNER/ADMIN/MEMBER 3단계 RBAC 설계, SupabaseAuthGuard → MembershipGuard → SuperAdminGuard 3단계 Guard 체인으로 인증+인가 이중화

결과

조직별 독립 데이터 관리 + 역할별 세분화된 접근 제어 실현

2

Vercel Hobby 플랜 Cron 제한(1일 1회)으로 정기거래 자동 처리 불가

해결 과정

NestJS 기반 별도 백엔드를 Mac mini에서 Docker로 분리 운영, @nestjs/schedule로 매일 15:00 KST 실행

결과

정기거래 매일 자동 처리 실현, 플랫폼 제한 우회

3

SSR 환경에서 서버/클라이언트 컴포넌트 간 인증 상태 불일치

해결 과정

Next.js 16 App Router + Supabase Auth SSR 조합으로 쿠키 기반 세션 복원 + 인증 컨텍스트 전파 패턴 설계

결과

서버/클라이언트 컴포넌트 간 원활한 인증 상태 동기화

4

복잡한 RBAC + 비동기 로직의 높은 결함 위험을 수동 테스트로 커버 불가

해결 과정

Vitest 단위 테스트 + Playwright E2E를 역할별(Admin/Member) 시나리오로 구성, 실제 BE + 로컬 Supabase 연동 풀스택 통합 테스트 환경 구축

결과

라인 커버리지 99.45%, 역할별 시나리오 자동 검증 체계 구축

프로젝트 설명

가족이나 조직 단위로 수입·지출을 함께 관리할 수 있는 공유 가계부 애플리케이션이다. Next.js 16 App Router 기반 프론트엔드에서 거래·카테고리·예산의 CRUD와 Recharts 기반 재무 분석 대시보드를 제공하고, Supabase Auth와 Row Level Security로 인증·인가를 처리한다. OWNER/ADMIN/MEMBER 3단계 역할 체계로 조직 내 권한을 세분화하고, TanStack Query v5로 서버 상태를 관리하며 Zod 4로 폼 입력을 검증한다. 정기거래 자동 처리는 Vercel Cron 제한을 우회하기 위해 NestJS 기반 별도 백엔드를 Mac mini에서 Docker로 운영하며, 매일 자정(KST) @nestjs/schedule로 실행한다. Vitest 단위 테스트 397건(라인 커버리지 99.45%)과 Playwright E2E 테스트 300건 이상을 역할별(Admin/Member) 시나리오로 구성하고, 실제 백엔드와 로컬 Supabase를 연동한 풀스택 통합 테스트 환경을 구축했다.

주요 내용

  • Vitest 397건 단위 테스트, 라인 커버리지 99.45% 달성
  • Playwright 300건+ E2E 테스트, 역할별 시나리오 분리
  • OWNER/ADMIN/MEMBER 3단계 RBAC + Supabase RLS 적용
  • NestJS Cron 정기거래 자동 처리 (Docker 배포)
  • 풀스택 통합 테스트 환경 구축 (FE+BE+Supabase)

성과 지표

성과 지표 이전 이후
Vitest 단위 테스트 - 397건 (BE 25 + FE 31 suites) (99.45% 커버리지)
Playwright E2E - 300건+ (24 specs · 5 projects) (역할별 시나리오)

기술 선택 근거

  • NestJS Docker 분리: Vercel Hobby 플랜 Cron 제한(1일 1회) 우회, 정기거래 매일 15:00 KST 실행 보장을 위해 Mac mini에서 독립 운영
  • Supabase Auth + 앱 레벨 RBAC 이중화: SupabaseAuthGuard(JWT 검증) → MembershipGuard(역할 확인) → SuperAdminGuard(관리자 전용) 3단계 Guard 체인
  • Prisma + Supabase PG: Prisma의 타입 안전성과 마이그레이션 도구 활용, Supabase 커넥션 풀러 경유로 서버리스 환경 커넥션 관리

깨달은 점

  • Next.js 16 App Router와 Supabase Auth를 조합하여 SSR 환경에서의 인증 상태 관리와 Row Level Security 기반 데이터 접근 제어를 구현하며, 서버·클라이언트 컴포넌트 간 인증 컨텍스트 전파 패턴을 학습
  • OWNER/ADMIN/MEMBER 3단계 역할 체계를 설계하며 조직 단위 멀티테넌시에서의 권한 분리와 데이터 격리 전략을 경험
  • Vercel Cron 제한을 우회하기 위해 NestJS 기반 별도 백엔드를 Docker로 분리 운영하며, 마이크로서비스 분리의 실무적 판단 기준과 공유 DB 스키마 관리 전략을 학습
  • Vitest 단위 테스트 397건(99.45% 커버리지)과 Playwright E2E 300 이상을 역할별 시나리오로 구성하고, 실제 백엔드와 로컬 Supabase를 연동한 풀스택 통합 테스트 환경을 구축하며 테스트 피라미드 전략을 체득

기술 스택

Next.js React TypeScript Supabase PostgreSQL Prisma NestJS Tailwind CSS TanStack Query Zod Vitest Playwright Docker Vercel

관련 링크

  • live