From bc54d37ff20dd4ee42413ac7b25af43f7a2e7bd7 Mon Sep 17 00:00:00 2001 From: kjs Date: Wed, 1 Oct 2025 14:41:04 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Routes=20&=20Service=20Prisma=20?= =?UTF-8?q?=EC=A0=84=ED=99=98=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 완료된 파일: 1. ddlRoutes.ts (2개): - ✅ health check: PrismaClient 동적 import 제거 - ✅ SELECT 1 쿼리를 query() 함수로 변경 2. companyManagementRoutes.ts (2개): - ✅ findUnique → queryOne (회사 존재 확인) - ✅ update → query (soft delete) 3. multiConnectionQueryService.ts (4개): - ✅ executeSelect: $queryRawUnsafe → query - ✅ executeInsert: $queryRawUnsafe → query - ✅ executeUpdate: $queryRawUnsafe → query - ✅ executeDelete: $queryRawUnsafe → query 기술적 개선: - 동적 import 제거로 성능 향상 - 일관된 쿼리 인터페이스 사용 - 파라미터 전달 방식 통일 (...params → params) 전체 진행률: 50/54 (92.6%) 남은 작업: database.ts (4개 - 제거 예정) --- .../src/routes/companyManagementRoutes.ts | 20 +++++++++---------- backend-node/src/routes/ddlRoutes.ts | 7 ++----- .../services/multiConnectionQueryService.ts | 20 ++++++++----------- 3 files changed, 19 insertions(+), 28 deletions(-) diff --git a/backend-node/src/routes/companyManagementRoutes.ts b/backend-node/src/routes/companyManagementRoutes.ts index a2e4a85c..630a3234 100644 --- a/backend-node/src/routes/companyManagementRoutes.ts +++ b/backend-node/src/routes/companyManagementRoutes.ts @@ -3,10 +3,9 @@ import { authenticateToken } from "../middleware/authMiddleware"; import { AuthenticatedRequest } from "../types/auth"; import { logger } from "../utils/logger"; import { FileSystemManager } from "../utils/fileSystemManager"; -import { PrismaClient } from "@prisma/client"; +import { query, queryOne } from "../database/db"; const router = express.Router(); -const prisma = new PrismaClient(); // 모든 라우트에 인증 미들웨어 적용 router.use(authenticateToken); @@ -29,9 +28,10 @@ router.delete( }); // 1. 회사 존재 확인 - const existingCompany = await prisma.company_mng.findUnique({ - where: { company_code: companyCode }, - }); + const existingCompany = await queryOne( + `SELECT * FROM company_mng WHERE company_code = $1`, + [companyCode] + ); if (!existingCompany) { res.status(404).json({ @@ -58,12 +58,10 @@ router.delete( } // 3. 데이터베이스에서 회사 삭제 (soft delete) - await prisma.company_mng.update({ - where: { company_code: companyCode }, - data: { - status: "deleted", - }, - }); + await query( + `UPDATE company_mng SET status = 'deleted' WHERE company_code = $1`, + [companyCode] + ); logger.info("회사 삭제 완료", { companyCode, diff --git a/backend-node/src/routes/ddlRoutes.ts b/backend-node/src/routes/ddlRoutes.ts index f32ae586..ef80ede5 100644 --- a/backend-node/src/routes/ddlRoutes.ts +++ b/backend-node/src/routes/ddlRoutes.ts @@ -10,6 +10,7 @@ import { validateDDLPermission, } from "../middleware/superAdminMiddleware"; import { authenticateToken } from "../middleware/authMiddleware"; +import { query } from "../database/db"; const router = express.Router(); @@ -180,11 +181,7 @@ router.get("/info", authenticateToken, requireSuperAdmin, (req, res) => { router.get("/health", authenticateToken, async (req, res) => { try { // 기본적인 데이터베이스 연결 테스트 - const { PrismaClient } = await import("@prisma/client"); - const prisma = new PrismaClient(); - - await prisma.$queryRaw`SELECT 1`; - await prisma.$disconnect(); + await query("SELECT 1"); res.json({ success: true, diff --git a/backend-node/src/services/multiConnectionQueryService.ts b/backend-node/src/services/multiConnectionQueryService.ts index 0751dfef..45e77500 100644 --- a/backend-node/src/services/multiConnectionQueryService.ts +++ b/backend-node/src/services/multiConnectionQueryService.ts @@ -8,7 +8,7 @@ import { ExternalDbConnectionService } from "./externalDbConnectionService"; import { TableManagementService } from "./tableManagementService"; import { ExternalDbConnection, ApiResponse } from "../types/externalDbTypes"; import { ColumnTypeInfo, TableInfo } from "../types/tableManagement"; -import prisma from "../config/database"; +import { query } from "../database/db"; import { logger } from "../utils/logger"; // 🔧 Prisma 클라이언트 중복 생성 방지 - 기존 인스턴스 재사용 @@ -1002,7 +1002,7 @@ export class MultiConnectionQueryService { queryParams.push(...Object.values(conditions)); } - return await prisma.$queryRawUnsafe(query, ...queryParams); + return await query(query, queryParams); case "insert": if (!data) throw new Error("INSERT 작업에는 데이터가 필요합니다."); @@ -1019,11 +1019,10 @@ export class MultiConnectionQueryService { RETURNING * `; - const insertResult = await prisma.$queryRawUnsafe( - insertQuery, - ...insertValues - ); - return Array.isArray(insertResult) ? insertResult[0] : insertResult; + const insertResult = await query(insertQuery, insertValues); + return Array.isArray(insertResult) && insertResult.length > 0 + ? insertResult[0] + : insertResult; case "update": if (!data) throw new Error("UPDATE 작업에는 데이터가 필요합니다."); @@ -1052,7 +1051,7 @@ export class MultiConnectionQueryService { ...Object.values(data), ...Object.values(conditions), ]; - return await prisma.$queryRawUnsafe(updateQuery, ...updateParams); + return await query(updateQuery, updateParams); case "delete": if (!conditions) @@ -1068,10 +1067,7 @@ export class MultiConnectionQueryService { RETURNING * `; - return await prisma.$queryRawUnsafe( - deleteQuery, - ...Object.values(conditions) - ); + return await query(deleteQuery, Object.values(conditions)); default: throw new Error(`지원하지 않는 작업입니다: ${operation}`);