본문 바로가기
실험실/db이행

언어선택의 기준

by 죄니안죄니 2026. 1. 14.
반응형

✔ 어플리케이션의 목표 아키텍쳐

[React Frontend]
        |
        | REST API
        v
[Backend API (Python / FastAPI)]
        |
        | subprocess / job
        v
[Ora2Pg 실행 환경]
 (Docker 컨테이너 or 로컬 실행)

 

1️⃣ 백엔드 언어 선택: Python (FastAPI 기준)

이유는 단순 취향이 아니라 요구사항을 모두 만족하는 유일한 선택지에 가깝다.

 


2️⃣ Python 선정 이유 : 요구사항에 가장 부합

  1. React에서 DB 접속 정보 입력
  2. Ora2Pg를 Docker로 실행
  3. 실행 상태 / 로그 확인
  4. 결과 파일 다운로드
  5. 나중에는 Docker 없이 실행 파일 형태로도 배포
  6. 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
 

동작 흐름

  1. React → /migrate 요청
  2. DB 접속 정보 수신
  3. ora2pg.conf 동적 생성
  4. Docker 컨테이너 실행
  5. 로그 파일 스트리밍
  6. 결과 파일 저장

② 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 단일 실행 파일

준비해야 할 것

  1. Ora2Pg Runner 추상화
  2. Config 생성기
  3. Job/로그 구조
  4. Docker ↔ 로컬 실행 전환 설계
반응형

댓글