버튼에 제어 달기

This commit is contained in:
kjs
2025-09-29 15:21:14 +09:00
parent e057c4d960
commit 3c26f24179
17 changed files with 291 additions and 71 deletions

View File

@@ -10,6 +10,7 @@ import {
} from "../types/externalDbTypes";
import { PasswordEncryption } from "../utils/passwordEncryption";
import { DatabaseConnectorFactory } from "../database/DatabaseConnectorFactory";
import logger from "../utils/logger";
export class ExternalDbConnectionService {
/**
@@ -694,7 +695,8 @@ export class ExternalDbConnectionService {
*/
static async executeQuery(
id: number,
query: string
query: string,
params: any[] = []
): Promise<ApiResponse<any[]>> {
try {
// 연결 정보 조회
@@ -751,7 +753,20 @@ export class ExternalDbConnectionService {
let result;
try {
result = await connector.executeQuery(query);
const dbType = connection.db_type?.toLowerCase() || 'postgresql';
// 파라미터 바인딩을 지원하는 DB 타입들
const supportedDbTypes = ['oracle', 'mysql', 'mariadb', 'postgresql', 'sqlite', 'sqlserver', 'mssql'];
if (supportedDbTypes.includes(dbType) && params.length > 0) {
// 파라미터 바인딩 지원 DB: 안전한 파라미터 바인딩 사용
logger.info(`${dbType.toUpperCase()} 파라미터 바인딩 실행:`, { query, params });
result = await (connector as any).executeQuery(query, params);
} else {
// 파라미터가 없거나 지원하지 않는 DB: 기본 방식 사용
logger.info(`${dbType.toUpperCase()} 기본 쿼리 실행:`, { query });
result = await connector.executeQuery(query);
}
} finally {
// 🔧 연결 해제 추가 - 메모리 누수 방지
await DatabaseConnectorFactory.closeConnector(id, connection.db_type);