Files
vexplor/PHASE2.5_EXTERNAL_DB_CONNECTION_MIGRATION.md
kjs 5f3f869135 feat: Phase 2.5 ExternalDbConnectionService Raw Query 전환 완료
- 15개 Prisma 호출을 모두 Raw Query로 전환
- 동적 WHERE 조건 생성 구현 (ILIKE 검색 지원)
- 동적 UPDATE 쿼리 구현 (변경된 필드만 업데이트)
- 비밀번호 암호화/복호화 로직 유지
- TypeScript 컴파일 성공 (linter 에러 0개)
- Prisma import 완전 제거

전환된 주요 함수:
- getConnections() - 외부 DB 연결 목록 조회
- createConnection() - 새 연결 생성 + 중복 확인
- updateConnection() - 연결 정보 수정
- deleteConnection() - 연결 삭제
- testConnectionById() - 연결 테스트
- getTables() - 테이블 목록 조회

Phase 2 진행률: 131/162 (80.9%)
전체 진행률: 217/444 (48.9%)
2025-10-01 10:11:19 +09:00

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 호출)

  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 클래스와 통합 유지

🎯 완료 기준

  • 15개 Prisma 호출 모두 Raw Query로 전환
  • 암호화/복호화 로직 정상 동작
  • 연결 테스트 정상 동작
  • 모든 단위 테스트 통과 (10개 이상)
  • Prisma import 완전 제거
  • TypeScript 컴파일 성공

작성일: 2025-09-30 완료일: 2025-10-01 소요 시간: 1시간 담당자: 백엔드 개발팀 우선순위: 🟡 중간 (Phase 2.5) 상태: 전환 완료 (테스트 필요)