반응형
✔ 어플리케이션의 목표 아키텍쳐
[React Frontend]
|
| REST API
v
[Backend API (Python / FastAPI)]
|
| subprocess / job
v
[Ora2Pg 실행 환경]
(Docker 컨테이너 or 로컬 실행)
1️⃣ 백엔드 언어 선택: Python (FastAPI 기준)
이유는 단순 취향이 아니라 요구사항을 모두 만족하는 유일한 선택지에 가깝다.
2️⃣ Python 선정 이유 : 요구사항에 가장 부합
- React에서 DB 접속 정보 입력
- Ora2Pg를 Docker로 실행
- 실행 상태 / 로그 확인
- 결과 파일 다운로드
- 나중에는 Docker 없이 실행 파일 형태로도 배포
- PoC → 실무 → 운영까지 확장 가능
3️⃣ 백엔드 언어 후보별 현실 평가
❌ Java / Spring Boot (탈락)
장점
- 안정성
- 엔터프라이즈 이미지
치명적 단점
- 외부 CLI 프로세스 제어가 번거롭다
- Docker / subprocess 제어 코드가 장황
- 실행 파일 단일화(jar → native)는 난이도 높음
- Ora2Pg + Perl + Oracle Client와 궁합이 나쁨
👉 “무거운 망치로 섬세한 작업” 느낌
❌ Node.js (탈락)
장점
- React랑 언어 통일
- 빠른 개발
치명적 단점
- long-running job 관리 불안
- 대용량 로그 스트림 처리 취약
- subprocess 안정성 ↓
- 운영에서 “이게 왜 죽었지?” 상황 잦음
👉 마이그레이션 도구에는 부적합
⭕ Go (조건부)
장점
- 단일 실행 파일 빌드 최고
- 성능 좋음
단점
- subprocess + env 관리가 생각보다 번거롭다
- Ora2Pg / Oracle Client 세팅 자동화 난이도 ↑
- PoC 속도 느림
👉 최종 제품용 언어로는 좋지만, 1차 선택은 아님
✅ Python (FastAPI) — 최종 선택
이게 왜 정답이냐면
- Ora2Pg가 Perl
- Oracle Client가 C 라이브러리
- subprocess / env / 파일 처리 → Python 최강
- Docker 제어도 매우 쉬움
- FastAPI로 API 구성 간결
- PyInstaller로 단일 실행 파일 생성 가능
👉 Ora2Pg 생태계와 가장 자연스럽게 맞는다
4️⃣ 아키텍처 (실무 기준)
① 1단계: Docker 기반 (PoC + 초기 운영)
backend/
├─ app/
│ ├─ main.py (FastAPI)
│ ├─ api/
│ │ ├─ migrate.py (마이그레이션 요청)
│ │ ├─ status.py (상태 조회)
│ ├─ service/
│ │ ├─ ora2pg_runner.py
│ │ ├─ config_builder.py
│ │ └─ log_watcher.py
│ └─ model/
│ └─ job.py
├─ Dockerfile
└─ requirements.txt
동작 흐름
- React → /migrate 요청
- DB 접속 정보 수신
- ora2pg.conf 동적 생성
- Docker 컨테이너 실행
- 로그 파일 스트리밍
- 결과 파일 저장
② 2단계: Docker 없이 실행 파일 배포
Python의 강점.
pyinstaller --onefile main.py
결과: ora2pg-migrator.exe 실행파일
- ora2pg 실행
- config 생성
- 로그 관리
- 결과 출력
👉 고객 PC / 내부 서버에서 바로 실행 가능
(※ Oracle Instant Client는 별도 포함 필요)
5️⃣ “Docker → 실행 파일” 전환을 위해 지금 준비해야 할 것들
이게 진짜 핵심이다.
✅ 반드시 준비해야 할 것
1. Ora2Pg 실행 추상화
- Docker인지
- 로컬인지
→ Runner 클래스로 분리
class Ora2PgRunner: def run(self, config_path: str): ...
2. 환경 의존성 최소화
- 경로 하드코딩 ❌
- ORACLE_HOME / LD_LIBRARY_PATH 동적 설정
- 상대 경로 기반
3. 설정 파일 생성기
- ora2pg.conf를 코드로 생성
- React 입력값 → config 매핑
build_config( oracle_host, oracle_sid, user, password, allow_tables )
4. Job 단위 실행 구조
- 요청 1개 = Job 1개
- Job ID 발급
- 상태 관리 (RUNNING / DONE / ERROR)
5. 로그 / 결과 파일 분리
- logs/{jobId}.log
- output/{jobId}/schema.sql
👉 이 구조가 있어야 API / CLI 둘 다 가능
6️⃣ React 프론트와의 연결 포인트
프론트는 단순해야 한다.
- DB 접속 정보 입력
- 마이그레이션 타입 선택
- 진행률 로그 표시
- 결과 다운로드
👉 비즈니스 로직은 전부 백엔드
7️⃣ 최종 판단 정리
백엔드 언어
Python + FastAPI
실행 전략
- 초반: Docker 기반
- 후반: PyInstaller 단일 실행 파일
준비해야 할 것
- Ora2Pg Runner 추상화
- Config 생성기
- Job/로그 구조
- Docker ↔ 로컬 실행 전환 설계
반응형
'실험실 > db이행' 카테고리의 다른 글
| 이슈 업무범위 ddl까지 vs data 이행까지 (0) | 2026.01.15 |
|---|---|
| 이슈 (1) | 2026.01.15 |
| 실행모델, Job구조, 상태모델, 보안모델, 결과물 스펙 등 결정사항 (0) | 2026.01.14 |
| 핵심 유즈케이스 (0) | 2026.01.14 |
| ORACLE -> PostgreSQL (0) | 2026.01.12 |
댓글