phase 2 변환계획 작성
This commit is contained in:
175
PHASE2.7_DDL_EXECUTION_MIGRATION.md
Normal file
175
PHASE2.7_DDL_EXECUTION_MIGRATION.md
Normal file
@@ -0,0 +1,175 @@
|
||||
# 🔧 Phase 2.7: DDLExecutionService Raw Query 전환 계획
|
||||
|
||||
## 📋 개요
|
||||
|
||||
DDLExecutionService는 **4개의 Prisma 호출**이 있으며, DDL(Data Definition Language) 실행 및 관리를 담당하는 서비스입니다.
|
||||
|
||||
### 📊 기본 정보
|
||||
|
||||
| 항목 | 내용 |
|
||||
| --------------- | -------------------------------------------------- |
|
||||
| 파일 위치 | `backend-node/src/services/ddlExecutionService.ts` |
|
||||
| 파일 크기 | 400+ 라인 |
|
||||
| Prisma 호출 | 4개 |
|
||||
| **현재 진행률** | **0/4 (0%)** ⏳ **진행 예정** |
|
||||
| 복잡도 | 중간 (DDL 실행 + 로그 관리) |
|
||||
| 우선순위 | 🟢 낮음 (Phase 2.7) |
|
||||
|
||||
### 🎯 전환 목표
|
||||
|
||||
- ✅ **4개 모든 Prisma 호출을 `db.ts`의 `query()` 함수로 교체**
|
||||
- ✅ DDL 실행 정상 동작 확인
|
||||
- ✅ 모든 단위 테스트 통과
|
||||
- ✅ **Prisma import 완전 제거**
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Prisma 사용 현황 분석
|
||||
|
||||
### 주요 기능
|
||||
|
||||
1. **DDL 실행**
|
||||
- CREATE TABLE, ALTER TABLE, DROP TABLE
|
||||
- CREATE INDEX, DROP INDEX
|
||||
2. **실행 로그 관리**
|
||||
- DDL 실행 이력 저장
|
||||
- 에러 로그 관리
|
||||
3. **롤백 지원**
|
||||
- DDL 롤백 SQL 생성 및 실행
|
||||
|
||||
---
|
||||
|
||||
## 📝 전환 계획
|
||||
|
||||
### 1단계: DDL 실행 전환 (2개 함수)
|
||||
|
||||
**함수 목록**:
|
||||
|
||||
- `executeDDL()` - DDL 실행
|
||||
- `validateDDL()` - DDL 문법 검증
|
||||
|
||||
### 2단계: 로그 관리 전환 (2개 함수)
|
||||
|
||||
**함수 목록**:
|
||||
|
||||
- `saveDDLLog()` - 실행 로그 저장
|
||||
- `getDDLHistory()` - 실행 이력 조회
|
||||
|
||||
---
|
||||
|
||||
## 💻 전환 예시
|
||||
|
||||
### 예시 1: DDL 실행 및 로그 저장
|
||||
|
||||
```typescript
|
||||
// 기존 Prisma
|
||||
await prisma.$executeRawUnsafe(ddlQuery);
|
||||
|
||||
await prisma.ddl_execution_log.create({
|
||||
data: {
|
||||
ddl_statement: ddlQuery,
|
||||
execution_status: "SUCCESS",
|
||||
executed_by: userId,
|
||||
},
|
||||
});
|
||||
|
||||
// 전환 후
|
||||
import { query } from "../database/db";
|
||||
|
||||
await query(ddlQuery);
|
||||
|
||||
await query(
|
||||
`INSERT INTO ddl_execution_log
|
||||
(ddl_statement, execution_status, executed_by, executed_date)
|
||||
VALUES ($1, $2, $3, $4)`,
|
||||
[ddlQuery, "SUCCESS", userId, new Date()]
|
||||
);
|
||||
```
|
||||
|
||||
### 예시 2: DDL 실행 이력 조회
|
||||
|
||||
```typescript
|
||||
// 기존 Prisma
|
||||
const history = await prisma.ddl_execution_log.findMany({
|
||||
where: {
|
||||
company_code: companyCode,
|
||||
execution_status: "SUCCESS",
|
||||
},
|
||||
orderBy: { executed_date: "desc" },
|
||||
take: 50,
|
||||
});
|
||||
|
||||
// 전환 후
|
||||
import { query } from "../database/db";
|
||||
|
||||
const history = await query<DDLLog[]>(
|
||||
`SELECT * FROM ddl_execution_log
|
||||
WHERE company_code = $1
|
||||
AND execution_status = $2
|
||||
ORDER BY executed_date DESC
|
||||
LIMIT $3`,
|
||||
[companyCode, "SUCCESS", 50]
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 3단계: 테스트 & 검증
|
||||
|
||||
### 단위 테스트 (8개)
|
||||
|
||||
- [ ] executeDDL - CREATE TABLE
|
||||
- [ ] executeDDL - ALTER TABLE
|
||||
- [ ] executeDDL - DROP TABLE
|
||||
- [ ] executeDDL - CREATE INDEX
|
||||
- [ ] validateDDL - 문법 검증
|
||||
- [ ] saveDDLLog - 로그 저장
|
||||
- [ ] getDDLHistory - 이력 조회
|
||||
- [ ] rollbackDDL - DDL 롤백
|
||||
|
||||
### 통합 테스트 (3개 시나리오)
|
||||
|
||||
1. **테이블 생성 → 로그 저장 → 이력 조회**
|
||||
2. **DDL 실행 실패 → 에러 로그 저장**
|
||||
3. **DDL 롤백 테스트**
|
||||
|
||||
---
|
||||
|
||||
## 🎯 완료 기준
|
||||
|
||||
- [ ] **4개 모든 Prisma 호출을 Raw Query로 전환 완료**
|
||||
- [ ] **모든 TypeScript 컴파일 오류 해결**
|
||||
- [ ] **DDL 실행 정상 동작 확인**
|
||||
- [ ] **모든 단위 테스트 통과 (8개)**
|
||||
- [ ] **모든 통합 테스트 작성 완료 (3개 시나리오)**
|
||||
- [ ] **`import prisma` 완전 제거 및 `import { query } from "../database/db"` 사용**
|
||||
- [ ] **성능 저하 없음**
|
||||
|
||||
---
|
||||
|
||||
## 💡 특이사항
|
||||
|
||||
### DDL 실행의 위험성
|
||||
|
||||
DDL은 데이터베이스 스키마를 변경하므로 매우 신중하게 처리해야 합니다:
|
||||
|
||||
- 실행 전 검증 필수
|
||||
- 롤백 SQL 자동 생성
|
||||
- 실행 이력 철저히 관리
|
||||
|
||||
### 트랜잭션 지원 제한
|
||||
|
||||
PostgreSQL에서 일부 DDL은 트랜잭션을 지원하지만, 일부는 자동 커밋됩니다:
|
||||
|
||||
- CREATE TABLE: 트랜잭션 지원 ✅
|
||||
- DROP TABLE: 트랜잭션 지원 ✅
|
||||
- CREATE INDEX CONCURRENTLY: 트랜잭션 미지원 ❌
|
||||
|
||||
---
|
||||
|
||||
**작성일**: 2025-09-30
|
||||
**예상 소요 시간**: 0.5일
|
||||
**담당자**: 백엔드 개발팀
|
||||
**우선순위**: 🟢 낮음 (Phase 2.7)
|
||||
**상태**: ⏳ **진행 예정**
|
||||
**특이사항**: DDL 실행의 특성상 신중한 테스트 필요
|
||||
Reference in New Issue
Block a user