CDM 데이터 자동 생성 프로그램 만들기 회고
만들게된 경위
- 개발자들이 제일 싫어하는게 뭘까? 아마도 반복과 중복일 것이다.
- 나는 개발부서에서 일을하고 있지만 현재 코드일은 하지 않고 요금제 개발을 하는 일을 하고 있다.
- 관련하여서 요금제와 관련된 데이터들을 엑셀에 입력하고 엑셀의 매크로를 이용해서 쿼리를 만드는 식으로 진행되는 일이 있다.
- 하나의 작업에 여러 개의 요금제가 있고 하나의 요금제마다 7개의 테이블을 조회해서 조회된 값을 넣어야하는데 보통 많으면 수백개의 로우를 넣어야 한다.
- 와서보니 그걸 하나하나 복사해서 넣고 있는 나 자신에 대한 의문점이 들었고 이거 자동화를 해보자 라는 생각이 들었다.
어떻게 만들었나?
- Java와 PowerShell, 두 가지 서로 다른 기술 스택의 강점을 결합하여서 CDM 데이터를 엑셀 파일로 만들어지도록 프로그램을 짰다.
- 먼저 자바 쪽에서는 사용자에게 필요한 입력값을 받아 데이터베이스와의 연결을 통해 쿼리를 입력해서 원하는 값을 조회하고 CSV를 저장하게 했다.
- SQL스크립트에 사용자 입력값을 치환하여 유연하게 데이터 조회를 하고, 결과를 CSV 파일로 정형화시키는 방식을 사용해서 향후 유지보수 및 새로운 요구사항 반영에 있어서도 큰 유연성을 두었다.
- 그 후, 자바에서 CSV파일 추출 및 디비 작업과 별개로 파워쉘 스크립트를 호출하는 구조를 짰다.
- 여기서 파워쉘은 엑셀 콤 객체를 활용해 기존의 엑셀 템플릿 파일에 CSV데이터들을 삽입하는 역할을 하게 했다.
- 데이터의 전치를 통해 엑셀의 특정영역에 데이터를 넣는 방식을 사용해서 그냥 엑셀파일이 아닌 매크로가 있는 양식에 내가 원하는 데이터들이 들어갈수 있도록 하였다.
- 전체적인 플로우는 사용자 입력 -> SQL 템플릿 치환 및 실행 -> CSV파일 생성 -> 파워쉘을 통한 엑셀 업데이트 및 최종파일 저장 이다.
개발할 때 중요한 점은?
- 일단 진짜로 쓸만한 지가 중요하기 때문에 얼마나 편리하게 사용할 수 있는가였다. 자체 평가를 하자면 한달의 근무일을 20일로 쳤을때 적어도 2일은 소모해야되는 일을 10분으로 줄였다고 자부한다.
- 또한, 나혼자만 쓰면 더 쉽게 개발이 가능했을 테지만 프로그램에 대해서 전혀 모르는 사람도 쓰게 해주기 위해서 여러 작업들을 했다.
- 예를들면 자바 버전을 다른버전으로 경로를 곡정하는 사람을 위해서 프로그램 실행시에만 고정되게 바꾼다던지, 기본셋팅폴더구조를 해놓고 상대경로로 코드를 바꾼다던지 사용자입력값을 통해서 누구나 잘 사용할수있게 했다던지 하는 부분들이다.
개발 후 느낀점
- 프로그램을 구현하면서 데이터 형식의 전환, 인코딩 문제, 그리고 두 환경 간의 파라미터 전달 등 세밀한 부분까지 고려하게 되었고, 덕분에 실제 운영 환경에서 안정적인 실행이 가능하도록 디버깅과 테스트에 많은 노력을 기울일 수 있었다.
- 각 처리 단게에서 발생할 수 있는 예외 상황들을 세심하게 핸들링하여 프로그램 전체가 중단되지 않도록 신경 쓴 점도 기억에 남는다. 특히 파워쉘 스크립트를 호출할 때 프로세스 종료 코드와 엑셀 콤 객체의 적절한 해제를 통해 시스템 자원이 낭비되지 않게 관린한 부분은 만들어 놓고도 흐뭇했다.
- 무엇보다도 너무 재밌었다.
- 현 직장으로 이직하면서 코드만지는 일이 없이 다른 일들만 하다가 오랜만에 프로그램을 개발하니 시간가는줄도 모르고 빨리 출근하고 싶어질 정도로 재밌었다.
- 생각보다 빨리 개발하게 되서 다음에 무엇을 개발할 지 생각하게 되었고 이번에는 테스트를 조금 더 자동으로 하게 해주는 프로그램을 만들어봐야겠다는 생각이 들었다.