SaaS API 기반
테넌트 격리, 일관된 응답, 재사용 가능한 목록 API부터 시작합니다.
Step 1 · tenancy, safe-response, pagination
멀티테넌시, API 일관성, 감사 추적, RBAC, 안정적인 이벤트 처리 등 — Prisma & PostgreSQL 기반
패키지 카드의 Core는 문서와 생성 API 레퍼런스가 성숙한 모듈, Beta는 공개 패키지이며 생성 API 레퍼런스를 확장 중인 모듈을 뜻합니다.
PostgreSQL RLS + Prisma 멀티테넌시와 테넌트 인식 캐시 키로 데이터 격리를 제공합니다.
Core · v0.15.0safe-responseSwagger 통합, 페이지네이션, 필드 선택, 에러 카탈로그를 갖춘 API 응답 래퍼입니다.
Core · v0.1.0pagination필터, 정렬, Swagger helper를 포함한 커서 및 오프셋 페이지네이션입니다.
Core · v0.4.0soft-delete캐스케이드 삭제, 복원, purge, 이벤트를 지원하는 Prisma soft-delete 확장입니다.
Core · v0.2.0audit-logPrisma CUD 추적, Query API, retention, partition, actor metadata를 제공합니다.
Core · v0.3.0feature-flag캐시 어댑터, Admin API, rollout, 테넌트 override를 지원하는 DB 기반 플래그입니다.
Beta · v0.4.0idempotencyIETF draft-07 Idempotency-Key, 안정적인 fingerprint, Redis/Postgres 저장소, 응답/헤더 재생을 제공합니다.
Beta · v0.1.0api-keys해싱, versioned pepper, live/test 환경, scope를 갖춘 테넌트 범위 API 키입니다.
Beta · v0.1.0rbac테넌트 인식 역할, 권한, route guard, service check, resource scope를 제공합니다.
Beta · v0.1.0outboxpolling, retry, event decorator를 갖춘 Prisma 네이티브 transactional outbox입니다.
Beta · v0.1.0jobsin-memory scheduler, BullMQ, context propagation을 갖춘 테넌트 공정 백그라운드 작업입니다.
Beta · v0.12.1webhookHMAC 서명, retry, circuit breaker, delivery log를 갖춘 outbound webhook 전달입니다.
Beta · v0.1.0data-subjectentity policy, retention, outbox fan-out을 갖춘 GDPR/CCPA export 및 erase 워크플로입니다.
모든 멀티테넌트 SaaS 백엔드는 같은 운영 빌딩 블록들이 필요합니다. 이를 직접 구현하면 수 주가 걸리고 미묘한 버그가 생깁니다. nestarc는 이 문제를 한 번에, 올바르게 해결합니다.
// 50개 이상의 서비스에 흩어져 있고, 빠뜨리기 쉽고, 감사하기 어렵습니다
async updateUser(id: string, dto: UpdateUserDto) {
const before = await this.prisma.user.findUnique({ where: { id } });
await this.prisma.$executeRaw`SELECT set_config('app.current_tenant', ${tenantId}, true)`;
const after = await this.prisma.user.update({ where: { id, deletedAt: null }, data: dto });
await this.auditService.log({ action: 'user.update', before, after });
return { success: true, data: after, timestamp: new Date() };
}// 테넌트 격리, 감사 로그, 소프트 딜리트 필터링, 응답 래핑이
// Prisma 확장과 NestJS 인터셉터에 의해 자동으로 처리됩니다.
async updateUser(id: string, dto: UpdateUserDto) {
return this.prisma.user.update({ where: { id }, data: dto });
}