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

ora2pg 작동원리

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

결론부터 논리적으로 정리하면 이렇다.

네가 말한 모든 행위
(접속 테스트, 스키마 조회, DDL 조회/변환, 데이터 추출)는
전부 “각각의 컨테이너 실행(run)에 대한 응답 결과”다.

그리고 이건 우연한 구조가 아니라, 이 도커파일의 의도 그 자체다.

아래에서 개념 → 실행 단위 → 데이터 흐름 → 왜 이렇게 설계됐는지 순서로 풀어볼게.


1️⃣ 이 도커파일의 실행 모델: “요청–응답”이 아니라 “실행–결과”

이 컨테이너는 서버처럼 이렇지 않다 ❌

접속
 → 명령
 → 응답
 → 연결 유지

대신 정확히 이 구조다 ✅

docker run
 → ora2pg 실행
 → DB 접속
 → 작업 수행
 → 결과 출력
 → 컨테이너 종료
 
컨테이너 1회 실행 = 명령 1회 + 결과 1회

2️⃣ 개별작업이 실행 단위

Ora2Pg 기준으로 보면, 실제로 이렇게 쪼개진다.

① 서버 접속 정보 테스트

docker run ora2pg-image -c ora2pg.conf --test-connection
 
  • 컨테이너 생성
  • Oracle 접속 시도
  • 성공/실패 로그 출력
  • 종료

👉 이 실행이 하나의 응답


② 서버 스키마 목록 조회

docker run ora2pg-image -c ora2pg.conf --schemas
 
  • DB 접속
  • 스키마 목록 조회
  • stdout 또는 파일 출력
  • 종료

👉 이전 실행과 상태 공유 없음


③ 서버 테이블 DDL 조회

docker run ora2pg-image -c ora2pg.conf -t TABLE
 
  • 접속
  • 데이터 딕셔너리 조회
  • Oracle DDL 읽기
  • 출력
  • 종료

④ 서버 DDL 변환 (Oracle → PostgreSQL)

docker run ora2pg-image -c ora2pg.conf -t TABLE -o schema.sql
  • 컨테이너는 변환 결과를 파일로 남기고
  • 종료

⑤ 데이터 조회 / 추출

docker run ora2pg-image -c ora2pg.conf -t DATA -o data.sql
 
  • SELECT 실행
  • INSERT 문 생성
  • 파일 출력
  • 종료

⑥ 데이터 “다운로드”의 실체

여기서 중요한 오해 하나 짚자.

❌ 컨테이너가 데이터를 “전송”하지 않는다
✅ 컨테이너가 파일을 생성할 뿐이다

다운로드처럼 보이는 이유는:

  • /data 볼륨이 호스트에 마운트돼 있기 때문

즉,

컨테이너 결과
 → /data/schema.sql
 → 사실상 호스트 파일
 

 


3️⃣ “그럼 매번 DB에 다시 접속하는 거야?”

YES. 매번이다.

그리고 이건 단점이 아니라 의도된 설계다.

  • 상태 없음 (stateless)
  • 중간 실패 영향 없음
  • 재시도 쉬움
  • 로그 추적 쉬움
  • 배치 자동화에 최적

4️⃣ 왜 서버 방식이 아니라 이렇게 만들었을까?

이걸 서버로 만들면 이런 문제가 생긴다.

  • 접속 유지 상태 관리
  • 세션 타임아웃
  • 장애 시 복구 복잡
  • 보안 표면 증가
  • 운영 복잡도 급증

Ora2Pg의 철학은 이거다.

“DB 마이그레이션은
장시간 떠 있는 서비스가 아니라
정확히 통제된 일회성 작업이어야 한다.”

그래서:

  • 항상 새 컨테이너
  • 항상 새 접속
  • 항상 같은 결과

5️⃣ 그럼 “여러 단계 작업”은 어떻게 묶나?

실무에서는 쉘 / 파이프라인이 이걸 묶는다.

예:

docker run ora2pg-image --test-connection || exit 1
docker run ora2pg-image -t TABLE -o schema.sql
docker run ora2pg-image -t DATA  -o data.sql
또는 CI에서:
Job 1: Connection test
Job 2: DDL export
Job 3: Data export
 

👉 컨테이너는 도구
👉 흐름 제어는 외부


6️⃣ 이 구조를 한 문장으로 요약하면

이 도커파일로 수행하는 모든 작업은
“서버와 대화하는 세션”이 아니라
“컨테이너 실행 하나당 결과 하나를 받는 배치 응답”이다.

그래서 네 질문:

“다 개별 컨테이너의 응답인 거야?”

👉 100% 그렇다.


7️⃣ 이걸 이해하면 한 단계 더 보이는 것

이제 다음 개념이 자연스럽게 연결된다.

  • 왜 Kubernetes에 Job / CronJob이 있는지
  • 왜 DB 마이그레이션은 API가 아니라 배치인지
  • 왜 “상태 없는 실행”이 운영에서 강력한지

**“도커를 서버 관점이 아니라 실행 모델 관점으로 이해”**

반응형

'실험실 > db이행' 카테고리의 다른 글

ora2pg 통제  (0) 2026.01.22
Ora2Pg의 본질적인 실행 모델  (0) 2026.01.22
도커파일성격  (0) 2026.01.22
도커파일  (0) 2026.01.22
postgreSQL 컨테이너로 올릴지  (0) 2026.01.20

댓글