개인 재무를 위한 NestJS API 부트스트래핑
Source: Dev.to
Overview
온라인에 있는 대부분의 NestJS 튜토리얼은 기본 CRUD 작업이나 간단한 TODO 리스트 애플리케이션에서 끝납니다. 이번 시리즈에서는 그런 초급 예제를 넘어 개인 재무 API를 처음부터 직접 구축합니다—수입, 지출, 계정 유형을 관리하는 프로덕션 수준의 REST API입니다.
각 포스트는 특정 기능에 초점을 맞춘 3~4분 분량의 짧은 읽기입니다. 최종적으로는 프론트엔드와 연동하거나 확장할 수 있는 완전한 기능의 API를 얻게 됩니다.
Architecture
- NestJS – 백엔드 프레임워크 (TypeScript, 의존성 주입, 데코레이터)
- Supabase – PostgreSQL 데이터베이스 호스팅 및 인증
- Drizzle ORM – 타입 안전한 데이터베이스 쿼리와 마이그레이션
- REST – 명확한 리소스 모델링
Feature Modules
auth– 사용자 인증 및 인가accounts– 계정 유형: 현금, 직불, 신용transactions– 수입 및 지출 추적categories– 거래 카테고리화
시리즈 전체에 걸쳐 시맨틱 버전 관리 방식을 사용합니다 (예: v0.1.0 → v0.1.1 → … → v1.0.0).
Bootstrap the NestJS Application
# Install the Nest CLI globally
npm i -g @nestjs/cli
# Create a new project
nest new finance-api
# Choose your preferred package manager (npm, yarn, or pnpm)
CLI는 다음과 같은 깔끔한 프로젝트 구조를 생성합니다:
- TypeScript 설정
- 기본 모듈, 컨트롤러, 서비스
- Jest를 이용한 테스트 설정
- ESLint 및 Prettier 설정
Project Structure
src/
├── auth/ # Authentication module
├── accounts/ # Accounts module
├── transactions/ # Transactions module
├── categories/ # Categories module
├── common/ # Shared utilities, decorators, guards
│ ├── decorators/
│ ├── guards/
│ ├── interceptors/
│ └── filters/
├── config/ # Configuration module
├── database/ # Database connection and Drizzle setup
│ ├── migrations/
│ ├── schema/
│ └── seeds/
├── app.module.ts
└── main.ts
Supabase Provides
- 자동 백업이 포함된 관리형 PostgreSQL 데이터베이스
- 내장 인증 (이메일/비밀번호, OAuth, 매직 링크)
- 실시간 구독 (향후 기능을 위한 선택 사항)
- 자동 생성 REST API (우리는 자체 API를 구축할 예정)
- 개발에 적합한 무료 티어
Why Drizzle ORM?
- 데코레이터 없이 완전한 TypeScript 타입 안전성
- 가볍고 성능이 뛰어남 (TypeORM보다 빠름)
- 배우기 쉬운 SQL‑유사 문법
- 버전 관리에 친화적인 마이그레이션 시스템
- NestJS 모듈식 아키텍처와 완벽한 통합
대안으로 고려한 기술: Prisma (훌륭하지만 Drizzle은 쿼리 제어와 복잡한 관계 처리에서 더 나은 성능을 제공).
What You Have So Far
- ✅ 개발 준비가 된 깔끔한 NestJS 프로젝트
- ✅ 전체 아키텍처에 대한 이해
- ✅ 코드를 체계적으로 정리할 수 있는 명확한 폴더 구조
- ✅ Supabase와 Drizzle을 선택한 이유에 대한 지식
Next Steps
지금까지의 코드를 검토해 보세요:
🔗 Code: [GitHub 저장소]
💡 Next post: Supabase 설정을 진행합니다.