From b5fe2117afa821c7362905a07cc2f3bdc1f9f58f Mon Sep 17 00:00:00 2001 From: kjs Date: Wed, 1 Oct 2025 14:44:49 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Prisma=20=EC=99=84=EC=A0=84=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0=20=EC=99=84=EB=A3=8C=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 최종 작업: 1. config/database.ts 삭제: - Prisma 기반 database.ts 완전 제거 - 더 이상 사용되지 않는 파일 2. referenceCacheService.ts 전환 (3개): - ✅ getTableRowCount: $queryRawUnsafe → query - ✅ cacheReferenceTable: $queryRawUnsafe → query - ✅ batchLookup: $queryRaw → query (ANY 연산자) 전체 완료: - ✅ 모든 Prisma 호출 전환 완료 - ✅ PrismaClient import 완전 제거 (에러핸들러 제외) - ✅ database.ts 삭제 - ✅ Raw Query 기반 시스템으로 완전 전환 최종 진행률: 54/54 (100%) 🎉 --- backend-node/src/config/database.ts | 50 ------------------- .../src/services/referenceCacheService.ts | 39 ++++++++------- 2 files changed, 20 insertions(+), 69 deletions(-) delete mode 100644 backend-node/src/config/database.ts 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) {