얼마 전부터 리포트 관련 개발을 하고 있다.
Clip Report 라는 툴을 사용해서 crf 문서를 만들고 웹 사이트에서 출력 버튼을 누르면 해당 crf 파일을 띄우게끔 한다.
나는 유지보수를 하고 있기 때문에 새로운 문서를 만들기 보다 기존에 있던 문서를 수정하여 반영하는 일이 더 많다.
기존 문서를 수정할 때 나는 크게 두 가지 방식을 선택할 수 있다.
1. 기존 문서 파일을 변형한다.
2. 기존 문서 파일은 그대로 두고 새로운 문서를 만들어 새로운 파일로 코드를 연결한다.
어떤 수정을 하는 것인지, 수정의 규모가 어떻게 되는지, 그 팀의 개발 규칙 등에 따라 선택하는 방식이 달라질 수 있겠지만,
나는 2번을 압도적으로 지지한다!
왜일까?
우선, 나는 금융권 종사자임을 밝힌다.
우리나라에서 금융권은 굉장히 많은 규제를 받고 있다.
정말이다.. 실제로 정말 많은 규제가 있기에 비금융권 회사들이 금융권에 쉽게 발 들이지 못하는 것으로 알고 있다.
'규제 = 불편하고 나쁜 것' 은 아니다.
규제가 있기에 우리가 안전한 금융망 속에서 자유롭게 돈 거래를 할 수 있기 때문이다!
이 규제를 관할하는 기관은 여러 군데가 있는데 그 중 하나를 꼽자면 금융감독원을 꼽을 수 있다.
금융감독원은 금융소비자의 여러 민원을 처리할 뿐만 아니라 금융 기관이 규제를 잘 지키고 있는지 감사하고 지적하고 개선하도록 관장하는 역할을 한다.
자, 쉽게 예를 들어보자.
어느 날 고객 고지 의무가 한가지 추가되어 리포트를 수정하는데 이때 1번 방식을 택했다고 생각해보자.
1번 방식대로 리포트를 수정하여 운영하다가 갑자기 금융감독원에서
"너네 올해 장표 수정한 것들 이력 좀 보자."
라고 한다면 어떻게 해야할까?
커밋한 내용을 모두 Rollback 하거나 형상 관리 툴에서 이전 버전을 모두 찾아 다운로드를 받아야할 것이다.
말도 안되는 노가다 작업에 몇날며칠을 쏟을지 상상도 안간다...
그런데 내가 만약 2번 방식을 채택했다면 어떻게 됐을까?
VLD_EDT <= SYSDATE 인 데이터를 모아 파일들을 제출하면 끝!
모든 회사들이 그렇겠지만 금융권은 특히 내부감사, 외부감사에 항상 대비하고 있어야하기 때문에 버전 관리는 무엇보다 중요한 과제이다.
여러가지 버전 관리 방법을 사용하고 있지만 오늘은 그 중 DB에 버전 관리하는 방법을 소개할까 한다.
DB에서 PK(Primary Key)는 기본키라는 뜻으로 테이블의 각 행을 고유하게 구분하기 위해 사용되는 하나의 컬럼이다.
기본키는 후보키 중 하나로 선정된다.
2개 이상의 후보키 중 기본키로 선택되지 못한 나머지 키는 대체키로 남는다.
나는 후보키를 2개 두는 방식으로 버전을 관리했다.
| 문서 ID | 순서 번호 | 파일 이름 | 사용여부 | 유효시작일 | 유효종료일 |
| D0001 | 1 | D0001.crf | N | 20010201 | 20251123 |
| D0001 | 2 | D0002.crf | Y | 20251124 | 99991231 |
위 DB 테이블에서 후보키는 문서 ID와 순서 번호 이다.
일반적으로 문서 ID 값은 유일하다.
그래서 파일을 찾는 쿼리의 첫 조건절은
WHERE 문서 ID = #문서 ID# 이다.
그런데 내가 장표를 개정하여 새로운 파일을 만들고, 이제부터 새롭게 만든 파일을 호출해야한다면
나는 위처럼 문서 ID는 이전 버전과 동일하게 두고 순서 번호를 다음 숫자로 갱신하여 등록할 것이다.
이때 이전 버전 파일의 데이터에서는 사용여부와 유효종료일 값이 변경된다.
그래서 파일을 찾는 쿼리의 다음 조건절은
AND 순서 번호 = MAX(순서 번호)
AND 사용여부 = 'Y'
AND 유효종료일 >= SYSDATE 이다.
이렇게 하면 나는 D0002.crf 파일에 대한 데이터를 뽑아낼 수 있다.
다음에 또 D0001 파일을 수정해야될 때가 오면 그때는 순서 번호를 3으로 하고 D0002.crf의 사용여부와 유효종료일을 업데이트하면 된다!
이렇게 DB로 간단하게 버전관리하는 방법을 알아봤다.
규제때문이 아니더라도 버전 관리는 굉장히 유용한 기술이라고 생각한다.
IT 관련 종사자가 아닌 타 업종 종사자들에게도 유용한 정보가 되었으리라 믿는다!
'개발 공부' 카테고리의 다른 글
| Good Code, Clean Code (1) | 2025.12.16 |
|---|---|
| 숨길 땐 알고 숨기자! (0) | 2025.12.01 |
| 코드 관리 (1) | 2025.11.26 |
| 애자일 vs 폭포수 모델 (1) | 2024.07.11 |