diff --git a/backend-node/src/config/database.ts b/backend-node/src/config/database.ts deleted file mode 100644 index d3ecfd44..00000000 --- a/backend-node/src/config/database.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { PrismaClient } from "@prisma/client"; -import config from "./environment"; - -// Prisma 클라이언트 생성 함수 -function createPrismaClient() { - return new PrismaClient({ - datasources: { - db: { - url: config.databaseUrl, - }, - }, - log: config.debug ? ["query", "info", "warn", "error"] : ["error"], - }); -} - -// 단일 인스턴스 생성 -const prisma = createPrismaClient(); - -// 데이터베이스 연결 테스트 -async function testConnection() { - try { - await prisma.$connect(); - } catch (error) { - console.error("❌ 데이터베이스 연결 실패:", error); - process.exit(1); - } -} - -// 애플리케이션 종료 시 연결 해제 -process.on("beforeExit", async () => { - await prisma.$disconnect(); -}); - -process.on("SIGINT", async () => { - await prisma.$disconnect(); - process.exit(0); -}); - -process.on("SIGTERM", async () => { - await prisma.$disconnect(); - process.exit(0); -}); - -// 초기 연결 테스트 (개발 환경에서만) -if (config.nodeEnv === "development") { - testConnection(); -} - -// 기본 내보내기 -export = prisma; diff --git a/backend-node/src/services/referenceCacheService.ts b/backend-node/src/services/referenceCacheService.ts index 6f3bb9ec..33f6ace8 100644 --- a/backend-node/src/services/referenceCacheService.ts +++ b/backend-node/src/services/referenceCacheService.ts @@ -1,12 +1,10 @@ -import { PrismaClient } from "@prisma/client"; +import { query, queryOne } from "../database/db"; import { logger } from "../utils/logger"; import { BatchLookupRequest, BatchLookupResponse, } from "../types/tableManagement"; -const prisma = new PrismaClient(); - interface CacheEntry { data: Map; expiry: number; @@ -38,11 +36,12 @@ export class ReferenceCacheService { */ private async getTableRowCount(tableName: string): Promise { try { - const countResult = (await prisma.$queryRawUnsafe(` - SELECT COUNT(*) as count FROM ${tableName} - `)) as Array<{ count: bigint }>; + const countResult = await query<{ count: string }>( + `SELECT COUNT(*) as count FROM ${tableName}`, + [] + ); - return Number(countResult[0]?.count || 0); + return parseInt(countResult[0]?.count || "0", 10); } catch (error) { logger.error(`테이블 크기 조회 실패: ${tableName}`, error); return 0; @@ -140,13 +139,14 @@ export class ReferenceCacheService { logger.info(`참조 테이블 캐싱 시작: ${tableName}`); // 데이터 조회 - const data = (await prisma.$queryRawUnsafe(` - SELECT ${keyColumn} as key, ${displayColumn} as value - FROM ${tableName} - WHERE ${keyColumn} IS NOT NULL - AND ${displayColumn} IS NOT NULL - ORDER BY ${keyColumn} - `)) as Array<{ key: any; value: any }>; + const data = await query<{ key: any; value: any }>( + `SELECT ${keyColumn} as key, ${displayColumn} as value + FROM ${tableName} + WHERE ${keyColumn} IS NOT NULL + AND ${displayColumn} IS NOT NULL + ORDER BY ${keyColumn}`, + [] + ); const dataMap = new Map(); for (const row of data) { @@ -301,11 +301,12 @@ export class ReferenceCacheService { const keys = missingRequests.map((req) => req.key); const displayColumn = missingRequests[0].displayColumn; // 같은 테이블이므로 동일 - const data = (await prisma.$queryRaw` - SELECT key_column as key, ${displayColumn} as value - FROM ${tableName} - WHERE key_column = ANY(${keys}) - `) as Array<{ key: any; value: any }>; + const data = await query<{ key: any; value: any }>( + `SELECT key_column as key, ${displayColumn} as value + FROM ${tableName} + WHERE key_column = ANY($1)`, + [keys] + ); // 결과를 응답에 추가 for (const row of data) {