티스토리 뷰

이관 도구와 스크립트 개발은 쉽게 말해 **"A 그릇에 담긴 데이터를 B 그릇에 맞게 모양을 다듬어 옮기는 로봇"**을 만드는 과정입니다. 데이터의 양과 복잡도에 따라 크게 세 가지 방식으로 나뉩니다.


1. SQL 스크립트 방식 (가장 보편적)

데이터 구조가 크게 복잡하지 않고, DB 간의 직접 연결(DB Link)이 가능할 때 사용합니다.

  • CTAS (Create Table As Select): 기존 테이블을 기반으로 새 테이블을 만들며 데이터를 복사합니다.
  • Insert Into Select: 이미 만들어진 규격(신규 설계안)에 맞춰 데이터를 밀어넣습니다.
  • SQL
     
    -- 예시: 신청 테이블 이관 (신규 컬럼에 당시 부서명 스냅샷 포함)
    INSERT INTO TARGET_REQ_TABLE (REQ_ID, USER_ID, REQ_DEPT_ID, REQ_DEPT_NAME)
    SELECT a.REQ_ID, a.USER_ID, b.DEPT_ID, b.DEPT_NAME
    FROM SOURCE_REQ_TABLE a
    JOIN SOURCE_DEPT_TABLE b ON a.DEPT_ID = b.DEPT_ID;
    
  • 특징: 개발이 빠르고 직관적이지만, 대량 데이터 처리 시 성능 튜닝(Parallel 처리 등)이 필요합니다.

2. ETL 도구 활용 방식 (대규모/복잡한 변환)

데이터 양이 수천만 건 이상이거나, 여러 소스(DB, Excel, API)에서 데이터를 합쳐야 할 때 사용합니다.

  • 도구 예시: Informatica, Talend, Pentaho, AWS Glue 등
  • 작업 흐름 (GUI 기반):
    1. Extract: 소스 DB에서 데이터를 추출합니다.
    2. Transform: 데이터를 가공합니다. (예: 문자열 합치기, 날짜 형식 변경, Null 값 처리)
    3. Load: 타겟 DB에 저장합니다.
  • 특징: 데이터 흐름을 시각적으로 볼 수 있고, 오류 발생 시 어느 단계에서 멈췄는지 파악하기 쉽습니다.

3. 프로그래밍 언어 활용 (Custom Script)

단순 SQL만으로 해결하기 어려운 복잡한 비즈니스 로직이 필요한 경우입니다.

  • 언어: Python, Java, Go 등
  • 방식: 1. 소스 DB에서 데이터를 읽어 메모리에 올립니다. 2. 코드로 복잡한 로직(예: 외부 API 호출 결과 결합, 복잡한 조건문 처리)을 수행합니다. 3. 타겟 DB에 Batch Insert 방식으로 집어넣습니다.
  • 특징: 유연성이 가장 높지만, 개발 공수가 많이 듭니다.

4. 실제 개발 시 고려해야 할 '디테일'

스크립트를 짤 때 단순히 INSERT만 생각하면 실제 운영 환경에서 사고가 날 수 있습니다. 다음 요소들을 코드에 녹여내야 합니다.

A. 데이터 매핑 (Mapping) 정의서 작성

개발 전 반드시 엑셀 등으로 "기존 테이블 A컬럼 -> 신규 테이블 B컬럼" 식의 지도를 그려야 합니다. 이때 '데이터 타입'이 변하는 구간을 체크합니다.

B. 로깅 (Logging) 및 예외 처리

  • 100만 건 중 50만 번째에서 에러가 났다면? 처음부터 다시 하는 게 아니라 에러 난 지점부터 재시작할 수 있도록 설계해야 합니다.
  • 성공 건수, 실패 건수, 실패 사유를 로그 테이블에 남기도록 짭니다.

C. 대량 처리를 위한 기법

  • Nologging / Drop Index: 이관 중에 인덱스나 로그를 기록하면 속도가 매우 느려집니다. 인덱스를 잠시 지웠다가 이관 후 다시 생성하는 로직을 스크립트에 포함합니다.
  • Commit 단위 조절: 1건마다 커밋하면 느리고, 100만 건을 한 번에 하면 DB 부하가 큽니다. 보통 5,000~10,000건 단위로 Commit 하도록 설정합니다.

💡 실제 진행 순서 제안:

  1. 먼저 매핑 정의서를 엑셀로 한 번 작성해 보세요.
  2. 그 후 가장 데이터가 적은 테이블 하나를 골라 위에서 보여드린 INSERT INTO ... SELECT 쿼리를 직접 작성해 보시는 것이 공부와 실무에 가장 큰 도움이 됩니다.

 

 

※ 해당 내용은 Google Gmini3.0에서 작성되었습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함