chore: update database connection settings and enhance Prisma client configuration

- Added connection timeout to DATABASE_URL in .env.
- Introduced DATABASE_CONNECTION_LIMIT, DATABASE_POOL_MIN, and DATABASE_POOL_MAX for connection pooling.
- Enhanced Prisma client initialization with logging and connection pool settings.
- Implemented graceful disconnection on process termination signals.
This commit is contained in:
yoosangwook 2025-06-11 17:36:15 +09:00
parent 643895ccb2
commit b97af6338e
2 changed files with 45 additions and 7 deletions

5
.env
View File

@ -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"

View File

@ -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