3.8 KiB
3.8 KiB
🔌 Phase 2.5: ExternalDbConnectionService Raw Query 전환 계획
📋 개요
ExternalDbConnectionService는 15개의 Prisma 호출이 있으며, 외부 데이터베이스 연결 정보를 관리하는 서비스입니다.
📊 기본 정보
| 항목 | 내용 |
|---|---|
| 파일 위치 | backend-node/src/services/externalDbConnectionService.ts |
| 파일 크기 | 1,100+ 라인 |
| Prisma 호출 | 0개 (전환 완료) |
| 현재 진행률 | 15/15 (100%) ✅ 완료 |
| 복잡도 | 중간 (CRUD + 연결 테스트) |
| 우선순위 | 🟡 중간 (Phase 2.5) |
| 상태 | ✅ 전환 완료 및 컴파일 성공 |
🎯 전환 목표
- ✅ 15개 Prisma 호출을 모두 Raw Query로 전환
- ✅ 민감 정보 암호화 처리 유지
- ✅ 연결 테스트 로직 정상 동작
- ✅ 모든 단위 테스트 통과
🔍 주요 기능
1. 외부 DB 연결 정보 CRUD
- 생성, 조회, 수정, 삭제
- 연결 정보 암호화/복호화
2. 연결 테스트
- MySQL, PostgreSQL, MSSQL, Oracle 연결 테스트
3. 연결 정보 관리
- 회사별 연결 정보 조회
- 활성/비활성 상태 관리
📝 예상 전환 패턴
CRUD 작업
// 생성
await query(
`INSERT INTO external_db_connections
(connection_name, db_type, host, port, database_name, username, password, company_code)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
RETURNING *`,
[...]
);
// 조회
await query(
`SELECT * FROM external_db_connections
WHERE company_code = $1 AND is_active = 'Y'`,
[companyCode]
);
// 수정
await query(
`UPDATE external_db_connections
SET connection_name = $1, host = $2, ...
WHERE connection_id = $2`,
[...]
);
// 삭제 (소프트)
await query(
`UPDATE external_db_connections
SET is_active = 'N'
WHERE connection_id = $1`,
[connectionId]
);
📋 전환 완료 내역
✅ 전환된 함수들 (15개 Prisma 호출)
- getConnections() - 동적 WHERE 조건 생성으로 전환
- getConnectionsGroupedByType() - DB 타입 카테고리 조회
- getConnectionById() - 단일 연결 조회 (비밀번호 마스킹)
- getConnectionByIdWithPassword() - 비밀번호 포함 조회
- createConnection() - 새 연결 생성 + 중복 확인
- updateConnection() - 동적 필드 업데이트
- deleteConnection() - 물리 삭제
- testConnectionById() - 연결 테스트용 조회
- getDecryptedPassword() - 비밀번호 복호화용 조회
- executeQuery() - 쿼리 실행용 조회
- getTables() - 테이블 목록 조회용
🔧 주요 기술적 해결 사항
- 동적 WHERE 조건 생성: 필터 조건에 따라 동적으로 SQL 생성
- 동적 UPDATE 쿼리: 변경된 필드만 업데이트하도록 구현
- ILIKE 검색: 대소문자 구분 없는 검색 지원
- 암호화 로직 유지: PasswordEncryption 클래스와 통합 유지
🎯 완료 기준
- 15개 Prisma 호출 모두 Raw Query로 전환 ✅
- 암호화/복호화 로직 정상 동작 ✅
- 연결 테스트 정상 동작 ✅
- 모든 단위 테스트 통과 (10개 이상) ⏳
- Prisma import 완전 제거 ✅
- TypeScript 컴파일 성공 ✅
작성일: 2025-09-30 완료일: 2025-10-01 소요 시간: 1시간 담당자: 백엔드 개발팀 우선순위: 🟡 중간 (Phase 2.5) 상태: ✅ 전환 완료 (테스트 필요)