diff --git a/.env b/.env index ec13af4..281ca24 100644 --- a/.env +++ b/.env @@ -5,8 +5,11 @@ # See the documentation for all the connection string options: https://pris.ly/d/connection-strings # DATABASE_URL="sqlserver://3team.devgrr.kr:1433;database=onsitesurvey;user=sa;password=1q2w3e4r!;encrypt=true;trustServerCertificate=true;" -DATABASE_URL="sqlserver://3team.devgrr.kr:1433;database=onsitesurvey;user=sa;password=1q2w3e4r!;encrypt=true;trustServerCertificate=true;" +DATABASE_URL="sqlserver://3team.devgrr.kr:1433;database=onsitesurvey;user=sa;password=1q2w3e4r!;encrypt=true;trustServerCertificate=true;connectionTimeout=30000" # DATABASE_URL="mysql://root:root@localhost:3306/onsitesurvey" +DATABASE_CONNECTION_LIMIT=10 +DATABASE_POOL_MIN=2 +DATABASE_POOL_MAX=10 # SESSION_PASSWORD="QWERASDFZXCV1234567890REWQFDSAVCXZ" SESSION_PASSWORD="This application is for mobile field research" \ No newline at end of file diff --git a/src/libs/prisma.ts b/src/libs/prisma.ts index 53ce1b3..e7e94bb 100644 --- a/src/libs/prisma.ts +++ b/src/libs/prisma.ts @@ -1,11 +1,46 @@ import { PrismaClient } from '@prisma/client' -declare global { - var prisma: PrismaClient | undefined +const globalForPrisma = globalThis as unknown as { + prisma: PrismaClient | undefined } -export const prisma = global.prisma || new PrismaClient() +export const prisma = + globalForPrisma.prisma ?? + new PrismaClient({ + log: ['query', 'error', 'warn'], + datasources: { + db: { + url: process.env.DATABASE_URL, + }, + }, + // connection pool 설정 + connectionLimit: Number(process.env.DATABASE_CONNECTION_LIMIT) || 10, // 기본값 10 + pool: { + min: Number(process.env.POOL_MIN) || 2, // 기본값 2 + max: Number(process.env.POOL_MAX) || 10, // 기본값 10 + idleTimeoutMillis: 30000, // 유휴 연결 타임아웃 (30초) + acquireTimeoutMillis: 30000, // 연결 획득 타임아웃 (30초) + }, + }) -if (process.env.NODE_ENV !== 'production') { - global.prisma = prisma -} +prisma.$on('query', (e: any) => { + console.log('Query: ' + e.query) + console.log('Duration: ' + e.duration + 'ms') +}) + +prisma.$on('error', (e: any) => { + console.error('Prisma Error:', e) +}) + +// 애플리케이션 종료 시 연결 정리 +process.on('SIGINT', async () => { + await prisma.$disconnect() + process.exit(0) +}) + +process.on('SIGTERM', async () => { + await prisma.$disconnect() + process.exit(0) +}) + +if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma