환경
군대에서 운이 좋게도 Python 2.7이 설치되어 있었다. 우리가 사용하는 프로그램이 python과 java로 이루어진 프로그램이였기 때문인데 일하면서 틈틈히 python으로 2048, 테트리스, 포커 등 게임들을 만들면서 python을 처음으로 접해봤다. 추가로 Beautiful soup 같은 외부 라이브러리도 몇개 있었고 anaconda, pycharm, sublime text, notepad++ 등이 있어서 나쁘지 않은 환경이였다. 다만 외부망이랑은 연결되어 있지 않기 때문에 인터넷 검색이 불가능 했고 추가로 라이브러리를 설치하거나 하지 못하였다.
첫번째 프로젝트 - 자동 입력 매크로
- 사용 언어 : VBA
- 사용한 툴 : Excel (Internet Control Library)
- 기간 : 제작 3개월 + 유지보수 9개월
- 사령관 표창 수령
기밀이라 자세히 애기할 수는 없지만, 그 당시 우리가 하던 주된 일 중 하나가 하루에 200개 정도의 파일을 분석하여 웹사이트에 종류별로 분류하고 값들을 입력해주는 일을 했다. 웹사이트 자체가 불편하기도 하고 파일 이름을 보고 분류하는데 파일 이름이 잘못되어 있는 경우도 많아서 상당히 스트레스 받고 오래 걸리며 배우기도 힘들었다. 그 당시 나는 우연히 아이디어 뱅크라는 것을 알게 되었고 거기서 수상을 하면 휴가를 준다는 소리에 매우 솔깃했다. 그때 이걸 크롤링을 활용하여 값들을 자동으로 입력되게 해보자 하고 프로젝트를 시작하게 되었다.
python에 beautiful soup를 사용하려다가 추가로 라이브러리가 필요하다는 것을 알게되었고 이를 가지고 오기에는 코드 줄수가 몇천 줄이 되었기에 우리는 다른 방법을 알아보았다. 옆 팀에서 보고서를 자동으로 써주는 프로그램을 개발한 분이 있으셔서 그분의 도움을 받아 엑셀 VBA에 Internet Control Library을 알게 되었고 그때부터 개발을 시작하였다.
우리는 파일 이름에 시간, 내용 등 여러 정보를 담아 일정한 형식으로 파일 이름을 작성했으므로 Regular Expression을 사용하여 파일 이름을 분리 시켰고 각 파일에 맞는 행동을 짜기 시작했다. 중간에 한번 크게 막힌 부분이 있는데 버튼의 javascript 실행 함수가 클라이언트 파트에서 아무리 찾아도 찾을 수가 없었다. 결국 우리는 sendkey()를 사용하여 해당 버튼을 focus하고 Enter키를 클릭하게 하였다. 이외에도 로딩(busy)상태가 제대로 체크 되지 않아 sleep을 사용하여 딜레이를 주고 파일 명에 오류가 있는데 해당 오류를 알려주는 기능도 만들었다. 결국 완성되었고 분단위로 처리되던 일이 초단위가 되어서 매우 편해졌다.
힘들었던 부분은 인터넷이 되지 않아 검색을 할 수 없고 그에 따라 제작 기간이 길어졌다. 또한 VBA언어 오류도 많고 Internet Control Library에 대한 정보는 정말 적었다. 사실 밖에 있었으면 Python을 썻을 것이다. 직접 몸으로 부딪치며 문제를 해결하였고 아이디어 뱅크에서 2등을 하여 사령관 표창을 받았다. 1등은 박사분들이 패킷 손실을 줄이는 논문을 활용하여 만든 것이 1등을 하였다..
이후에도 이 프로그램은 부대내에서 내가 전역할때 까지도 사용되었다. 중간에 위에서의 지시로 형식이 바뀌거나 하면 그에 맞추어 프로그램을 수정하였고 여러 에러나 불편 사항들을 받아 개선하였다.
두번째 프로젝트 - 데이터 관리 사이트(?)
- 사용 언어 : Python, javascript, html, css
- 사용한 툴 : Flask
- 제작 기간 : 4개월
첫번째 프로젝트로 상과 휴가를 받고 나니 자신감이 생겼다. 그래서 이전부터 생각해왔던 프로젝트를 하기로 마음 먹었다. 기밀이라 자세히 애기할 수 없지만 우리는 약 500개가 넘는 00을 관리하였는데 매년 100개 정도의 신규 00이 새로 생기고 사라지고를 반복한다. 내가 가장 놀랐던 것은 이 00을 파워 포인트로 관리했다는 점이다. 많은 그림파일과 텍스트를 담은 파워포인트는 키는데 2~3분이나 걸리고 툭하면 사용 도중 강제 종료 되었다. 그래서 데이터 베이스를 만들고 웹사이트를 통해서 이걸 관리해보자 라는 생각에 새로운 프로젝트를 시작했다.
처음에는 Django를 사용하여 만들려고 했지만 허락을 받지 못해 anaconda에 내장되어 있는 flask를 사용하였다. html과 css를 사용하여 웹페이지를 구성하였고 SQlite를 사용하여 데이터 베이스를 만들었다. 로컬 서버에 있는 컴퓨터끼리 연결하고 싶었지만 보안상의 이유로 local로 돌리되 데이터베이스와 그림파일들을 공유 폴더에 넣어 모든 컴퓨터에서도 사용가능 하게 만들었다.
어려웠던 점은 생각보다 데이터 베이스에 오류가 자주 일어났다는 점이다. 예를 들어 저장을 빠르게 두번 두르면 한번에 여러 개가 저장되었고 이는 에러 페이지가 나왔다.. 또한 각 00이 종류도 다양하고 속성도 다양해서 데이터 베이스 구조를 짜는데도 애를 먹었다.
아쉽게도 이번 프로젝트는 상을 타지 못하였다. 저번에 상을 한번 받았고 바로 옆 팀에서도 아이디어 뱅크에 제출하였기 때문에 상을 몰아주는 건 안된다 라는 이유였다. 아쉽지만 보상으로 하루를 받았다.
-- 2022 수정 --
오랜만에 군대 간부을 만나서 내 프로그램들의 근황을 들었다. 2년이 지난 지금도 자동 입력 매크로의 경우 아직도 유용하게 쓰고 있다고 한다. 웹사이트에 대해서는 놀라운 소식을 들었다. 막상 내가 군대에 있을때는 이 웹사이트에 대해서 휴가 하루를 받고 방치되었었다. 당시 팀장님이 곧 은퇴라 그러신지 이런거에 관심이 없었기 때문..
하지만 전역하고 나서 윗 라인이 바뀌고 나자 공유 폴더속 버려져있던 이 웹사이트를 발견하고 이런걸 왜 않쓰고 있었냐면서 병사들에게 데이터를 입력하면 휴가를 주겠다고 선언하셨다고 한다. (나는..?) 이제 완벽히 ppt는 버려졌고 웹사이트가 주류가 되어 사용되었고 한번은 사령부에서 데이터를 어떻게 관리하냐고 연락이 왔고 병사가 만든 웹사이트로 관리한다고 하자 사령부에서 직접 와서 살펴보고 갔다고 한다. 그 정도 수준은 아니였는ㄷ.. , 다만 그 당시 급하게 만들었고 제대로 된 지식도 없이 만들었으며 서비스 하면서 수정도 할 기회가 없었기 때문에 버그가 상당하다고 한다. 하지만 유지보수 해줄 사람이 없어서 그냥 쓰고 있다고 하는데 참 웃겼다.
약간의 서운한 것은 해당 사이트를 누가 만들었는지 몰랐다는것..?! 후임이랑 나는 SIGMA라고 웹사이트를 이름 지었는데 SIGNAL Dictionary by Mark & Alex의 약자고 홈페이지 대문에 써놨는데 아무도 보지 못했다고 한다..
마침
야근하면서 알고리즘 문제도 풀고 게임도 만들면서 시간이 매우 잘갔다. 군대에서 그래도 열심히 공부하며 자신감도 붙었고 그냥 시간을 보내지 않아 다행이라고 생각한다.