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