Ledgerly
2025-08-01 — present
가족·조직 단위 공유 가계부 앱 — Next.js 16 풀스택, Supabase PostgreSQL, 3단계 역할 기반 접근 제어(OWNER/ADMIN/MEMBER), NestJS Cron 정기거래 자동 처리, 99.45% 라인 커버리지 단위 테스트 + 300건 이상 E2E 통합 테스트
시스템 아키텍처
문제 해결 과정
가족/조직 내 역할별 권한 분리 없이 공유 가계부 운영 시 데이터 보안 위험
OWNER/ADMIN/MEMBER 3단계 RBAC 설계, SupabaseAuthGuard → MembershipGuard → SuperAdminGuard 3단계 Guard 체인으로 인증+인가 이중화
조직별 독립 데이터 관리 + 역할별 세분화된 접근 제어 실현
Vercel Hobby 플랜 Cron 제한(1일 1회)으로 정기거래 자동 처리 불가
NestJS 기반 별도 백엔드를 Mac mini에서 Docker로 분리 운영, @nestjs/schedule로 매일 15:00 KST 실행
정기거래 매일 자동 처리 실현, 플랫폼 제한 우회
SSR 환경에서 서버/클라이언트 컴포넌트 간 인증 상태 불일치
Next.js 16 App Router + Supabase Auth SSR 조합으로 쿠키 기반 세션 복원 + 인증 컨텍스트 전파 패턴 설계
서버/클라이언트 컴포넌트 간 원활한 인증 상태 동기화
복잡한 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를 연동한 풀스택 통합 테스트 환경을 구축하며 테스트 피라미드 전략을 체득