Proxy 확장
src/proxy.ts는 Next.js가 찾는 고정 파일이라 삭제하거나 gitignore 처리하지 않습니다. 현재 프로젝트는 기본 proxy 구현을 @core/proxy/defaultProxy에서 직접 가져옵니다.
// src/extensions/proxy.ts
import type { NextRequest } from "next/server";
import { proxy as defaultProxy } from "@/core/proxy/defaultProxy";
export async function proxy(request: NextRequest) {
return defaultProxy(request);
}기본 proxy에는 관리자 접근 제어, 로그인 사용자 접근 제어, Redis active session 확인, CSRF origin 검증이 포함되어 있습니다.
Prisma 확장
DB 모델을 추가할 때 코어 prisma/schema.prisma를 직접 수정하지 않습니다. extension schema fragment를 만들고 npm run prisma:sync로 루트 스키마를 생성합니다.
// src/extensions/prisma/schema/issue.prisma
model IssueMeta {
id Int @id @default(autoincrement())
documentId Int
priority String?
createdAt DateTime @default(now())
@@index([documentId])
}코어 모델과 관계를 맺고 싶을 때는 우선 scalar 컬럼을 사용하세요. 예를 들어 documentId Int, userId Int를 두고 query에서 조합하면 코어 모델에 back relation을 추가하지 않아도 됩니다.
Prisma 명령
npm run prisma:sync
npm run prisma:generate
npm run migrate:dev
npm run dbpush:pushprisma:sync는 schema 파일만 생성합니다. DB에 실제 테이블을 만들려면 npm run migrate:dev를 실행해야 합니다.
Extension seed
프로젝트별 초기 데이터가 필요하면 src/extensions/prisma/seed.js를 추가합니다. 이 파일은 기본 seed 트랜잭션 안에서 실행됩니다.
module.exports = async ({ client }) => {
await client.query(`
INSERT INTO "IssueMeta" ("documentId", "priority", "createdAt")
VALUES ($1, $2, NOW())
ON CONFLICT DO NOTHING
`, [1, "normal"]);
};extension seed는 반드시 idempotent하게 작성해야 합니다.