티스토리 뷰
이관 도구와 스크립트 개발은 쉽게 말해 **"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 기반):
- Extract: 소스 DB에서 데이터를 추출합니다.
- Transform: 데이터를 가공합니다. (예: 문자열 합치기, 날짜 형식 변경, Null 값 처리)
- 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 하도록 설정합니다.
💡 실제 진행 순서 제안:
- 먼저 매핑 정의서를 엑셀로 한 번 작성해 보세요.
- 그 후 가장 데이터가 적은 테이블 하나를 골라 위에서 보여드린 INSERT INTO ... SELECT 쿼리를 직접 작성해 보시는 것이 공부와 실무에 가장 큰 도움이 됩니다.
※ 해당 내용은 Google Gmini3.0에서 작성되었습니다.
'WEB > DB' 카테고리의 다른 글
| 테이블 정의서 추출 SQL (오라클 기준) (0) | 2026.04.02 |
|---|---|
| DB 데이터이관시 테이블을 수정하는 방식? 신규 생성 방식? (0) | 2026.03.16 |
| DB데이터 이관 수행 절차 (0) | 2026.03.16 |
| 데이터 베이스 부서와 사용자 테이블 설계 (0) | 2026.03.16 |
| 데이터 베이스 정규화(Normalization) (0) | 2026.03.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파비콘사이즈
- 좋은책
- sw기술자평균임금 #2025년 sw기술자 평균임금
- 쇼팬하우어 #좋은책
- 정보처리기사 #정보처리기사요약 #정보처리기사요점정리
- css미디어쿼리 #미디어쿼리 #mediaquery
- 테스크탑무선랜카드 #무선랜카드 #아이피타이무선랜카드 #a3000mini #무선랜카드추천
- echart
- thymeleaf
- iptime와이파이증폭기 #와이파이증폭기설치
- 무료폰트 #무료웹폰트 #한수원한돋움 #한수원한울림 #한울림체 #한돋움체
- 와이파이증폭기추천 #와이파이설치
- jdk #jre
- ajax
- // 사진직: 데이터가 없으면 DEFAULT_IMG 사용 const profileSrc = (d.img && d.img !== "") ? d.img : DEFAULT_IMG;('#user-photo').attr('src'
- 자바스크립트countiue
- lg그램pro #lg그램 #노트북 #노트북추천 #lg노트북
- 썬크림 #닥터지썬크림 #내돈내산 #내돈내산썬크림 #썬크림추천 #spf50썬크림 #닥터지메디유브이울트라선
- 탭메뉴자바스크립트
- 자바스크립트정규표현식
- 자바스크립트break
- 좋은책 #밥프록터 #부의원리
- 바지락칼국수 #월곡동칼국수 #칼국수맛집
- 연명의료결정제도 #사전연명의료의향서 #사전연명의료의향서등록기관 #광주사전연명의료의향서
- SQL명령어 #SQL
- 증폭기 #아이피타임증폭기
- jQuery #jQuery이미지슬라이드 #이미지슬라이드
- 광주분식 #광주분식맛집 #상추튀김 #상추튀김맛집 #광주상추튀김
- 파비콘 #파비콘 사이트에 적용
- 자바스크립트 #javascript #math
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함
