feat: Prisma 완전 제거 완료 🎉

최종 작업:

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%) 🎉
This commit is contained in:
kjs 2025-10-01 14:44:49 +09:00
parent e444dd9d39
commit b5fe2117af
2 changed files with 20 additions and 69 deletions

View File

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

View File

@ -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<string, any>;
expiry: number;
@ -38,11 +36,12 @@ export class ReferenceCacheService {
*/
private async getTableRowCount(tableName: string): Promise<number> {
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<string, any>();
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) {