본문 바로가기

일상

DB 카탈로그로 테이블 정의서 엑셀 수백 장 자동 생성하기 (템플릿 기반 Excel COM)

반응형

DB 테이블 수백 개를 사내 표준 양식의 엑셀 정의서로 일일이 만들기 벅찰 때, DB 카탈로그를 읽어 템플릿 기반으로 자동 생성하는 방법입니다.


1. 문제: 테이블당 시트 한 장짜리 정의서를 수백 개 만들어야 한다
사내 표준 테이블 정의서는 보통 테이블 하나에 시트 한 장으로, 메타 정보와 컬럼 목록, 인덱스 목록을 정해진 서식에 채워 넣는 형태입니다. 테이블이 수백 개면 이걸 손으로 만드는 건 사실상 불가능하고, 스키마가 바뀔 때마다 다시 만들어야 합니다. 게다가 이 작업도 앞 글처럼 사내 DRM 때문에 폐쇄망 PC에서 직접 해야 해서, 파이썬 없이 Excel COM으로 자동화합니다.


- 사내 표준 정의서 = 테이블당 시트 1장(메타·컬럼·인덱스)
- 테이블 수백 개 + 스키마 변경마다 재작업 -> 수작업 불가
- 폐쇄망·DRM 환경이라 Excel COM으로 그 PC에서 직접 생성


2. 템플릿이 디자인을 소유하고, 코드는 데이터만 채운다
빌더가 셀 색이나 테두리, 폰트까지 코드로 그리게 하면 디자인이 바뀔 때마다 코드를 고쳐야 합니다. 그래서 디자인은 사내에서 완성한 템플릿 엑셀이 전부 갖고 있게 하고, 코드는 그 템플릿을 복제한 뒤 정해진 셀에 값만 채웁니다. 이렇게 역할을 나누면, 서식을 바꾸고 싶을 때 템플릿만 손보면 되고 코드는 건드릴 필요가 없습니다.


- 코드가 서식(색·테두리·폰트)까지 그리면 유지보수가 지옥
- 디자인은 템플릿 엑셀이 소유, 코드는 값만 채움
- 서식 변경 = 템플릿만 수정, 코드 불변


3. DB 카탈로그를 읽어 정규화한다
각 DB에서 컬럼, 인덱스, 코멘트를 조회해 탭으로 구분된 텍스트로 뽑아 두면, 빌더는 그걸 읽어 테이블별로 묶어 시트를 채웁니다. 이때 DBMS마다 표기가 달라서 그대로 쓰면 지저분해집니다. 예를 들어 NULL 허용 여부 표기가 제각각이라 Y/N으로 통일하고, 기본키가 인덱스 메타에만 있는 DBMS는 인덱스에서 역으로 추정해 채웁니다. 이런 방언 차이를 한 곳에서 정규화하면, 어느 DB에서 뽑아도 같은 양식의 정의서가 나옵니다.


- 컬럼·인덱스·코멘트를 탭 구분 텍스트로 추출
- DBMS 방언(NULL 표기·PK 표기 등)을 Y/N 등으로 통일
- 정규화 한 곳 -> 어느 DB든 같은 양식


4. 날짜로 쪼갠 파티션 테이블은 하나로 묶는다
로그나 이력 테이블은 월/일 단위로 잘려 이름 뒤에 날짜가 붙는 경우가 많습니다. 이런 테이블을 전부 시트로 만들면 똑같은 구조가 수십 장씩 반복돼 정의서가 지저분해집니다. 그래서 이름에서 날짜 접미사를 떼어 같은 그룹으로 묶고, 대표 한 장만 만들되 시트 이름은 날짜 자리를 표시자로 남깁니다. 이렇게 하면 수백 개 테이블이 수십 장으로 압축돼 훨씬 읽기 좋아집니다.


- 이름 뒤 날짜 접미사(YYYYMM 등) 테이블을 그룹으로 묶음
- 대표 1장만 생성, 시트 이름은 날짜 자리를 표시자로
- 반복되는 파티션 시트가 사라져 정의서가 깔끔해짐


5. 정리
테이블 정의서 자동화의 핵심은 디자인과 데이터를 분리하는 것입니다. 템플릿에 서식을 맡기고 코드는 카탈로그에서 읽은 값만 채우면, 스키마가 바뀌어도 다시 돌리기만 하면 됩니다. DBMS 방언은 한 곳에서 정규화하고, 날짜로 쪼갠 테이블은 묶어 주면, 수백 개짜리 정의서도 클릭 몇 번으로 최신 상태를 유지할 수 있습니다.


- 디자인=템플릿, 데이터=코드로 분리
- 방언은 정규화, 파티션 테이블은 머지
- 스키마 변경 시 다시 돌리기만 하면 최신 유지


함께 보면 좋은 글:
- 사내 DRM 때문에 폐쇄망 PC에서 PPT를 직접 자동 생성하기 - 같은 폐쇄망 문서 자동화 편(PPT)


여기까지 DB 카탈로그로 테이블 정의서 엑셀을 템플릿 기반으로 자동 생성하는 방법에 대해서 작성해봤습니다. 여기까지 읽어주셔서 감사합니다!

반응형