금호 2-3가 동주민센터에서 근무하며 만든 자동화 도구들
-
만든 이유?
당시 2층 서가에 약 8000 권 되는 도서가 있었다. 이게 서가 정보 시스템과 연동이 되어있었으나, 실제로 일치하는지 수기 로 작업을 해야 했다.
처음엔 내 업무가 아니었으나, 도서관에 있으며 자원봉사자께서 책을 일일히 꺼내 확인하는 모습에 경악을 금치 못했다.
8000권을 하루에 100권씩해도 최소 80일이 걸린다. (Ω(8000) = 80
) 100권씩 확인하는데에도N시간
이 소모됐다. (N이 충분히 컸다!!! 책 꺼내기 - 확인(O(N)
) - 다시 집어넣기) 기존 방법은 엑셀에서 ISBN 순으로 정렬하여 책들을 인쇄하고 있으면 체크, 없으면 없음 표시했다.
그래서기계가 노동을 해방해주리라
라는 생각과 python으로 GUI 프로그램을 만들고 싶어서 도서관 스캐너를 만들었다. -
아이디어 (기획)
먼저 도서관엔 도서 스캐너가 이미 존재하였고, 이를 통하여 바코드를 읽을 수 있었다.
스캐너는 바코드를 읽고, 바코드값이 책을 구별해주는 어떤 유니크한 값(Serial No.)이라면, 엑셀을 다운로드 받아 이 책이 정보 시스템에 존재하는지를 확인 할 수 있었다.
그러므로 정보시스템내 모든 도서를 엑셀로 반출하고, 이를 메모리에 올려놓고, 스캐너로 받은 값을 읽어들여 엑셀에 존재하는지 확인하면 됐다! -
해결 과정
- PyQt5로 GUI 제작 (GUI 제작 툴이 있었다.)
1.1시리얼 입력 칸
과입력
버튼
1.2집계 현황
(해당 시리얼 번호가 존재하는지)
1.3엑셀화
(현재까지 작업을 저장하고 엑셀화) -> 구현안된듯
1.4 (우측하단) 현재시리얼 번호
표시 - 반출된 엑셀을 메모리에 올리기
- 맞다면 파랗게
존재합니다!
없으면 빨갛게존재하지 않습니다!
출력
- 성과, 피드백
먼저 소장자료 확인 시간이 거진 1/10 ~ 1/100으로 줄어들었다.
사람이 일일히 해당 자료가 존재해야 하는지 확인 할 필요가 전혀 없었기에, 스캐너를 노트북에 꽂아놓고 이동하며 바코드만 찍었으면 됐다.
해당 스캐너를 만들고 한 500권정도 테스트해보며 소장자료를 확인했는데, 시리얼 번호가 똑같거나 하는 문제가 가끔 있었긴 했다.
이를 해결하려면 시리얼 번호를 확인하여 새로운 바코드를 부착하면 됐다.
- 만든 이유?
사회복무요원(Agent.. 큭큭)을 하며 대형생활폐기물 창구에서 일명딱지
를 떼어주는 업무를 했다.
그리고딱지
를 끊으면 돈을 받고(카드, 현금) 정산하여 합계가 맞는지 확인하였다.
기존 확인 프로세스는 이러했다.
- 대형생활 폐기물 관리자 홈페이지 접속
- 엑셀 반출
- 엑셀의
필터
기능 이용하여 카드, 현금 합계 계산 - 실제 현금과 카드 정산가격이 맞는지 확인
여기서 4는 자동화 하려면 돈 세는 기계가 필요했기 때문에 불가능하다고 생각했다.
그러면 1~3을 자동화 해보자고 생각했다.
- 해결 과정
먼저 실패한 해결 과정이다.
웹사이트를 접속하여 크롤링하여 정산하는 것이었다. 그러나 당시 DOM에 대해 잘 몰랐었기에 실패했다.(지금은 잘 아는척)
뭔가 계속 가져와야하는데 class이름이 같아서 forEach문을 돌릴줄 몰랐던거 아닐까? 생각한다.
성공한 해결 과정
- 크롬을 키고 대형생활 폐기물 관리자 페이지에 로그인한다. (크롬 드라이버 이용)
- 오늘 날짜를 받아와 웹 페이지에 입력한다.
- 웹사이트의 엑셀반출 기능 이용
- python excel library를 이용하여 엑셀을 읽는다.
- 프롬프트 창에 카드, 현금 합계를 출력한다! 정산 끝!
- 해결 중 마주친 문제
- 먼저 크롬드라이버를 사용하려면 웹 사이트를 켜야하는데 안켜진 경우 예외가 생겼다.
-> pyautogui라는 입력 라이브러리를 사용해서win+숫자키
로 크롬을 켰다!잔머리 - 인터넷으로 접수한 사람도 전산에 뜨는데 나는 인터넷에 접수한 사람에게 결제를 받은 적이 없다.
-> 인터넷 접수 flag를 찾아(동접수
) 이를 제외하고 정산하였다.
-
추가 기능
정산 끝나고 항상 프린터로 뽑아 인쇄물 형태로 저장했어야 했는데, 정산하는김에 같이 추가했다.
SRP를 아주 제대로 어겼던 샘이다 -
성과, 피드백
실제 성과는 이 프로그램 돌려놓고 잠시 담배타임 가지는 여유가 생겼다는 정도다.
그렇지만 이 역시도 내가 개발자로서실생활
문제를 해결할 능력이 있구나!라고 생각되어 뿌듯했다.
실생활
의 문제를 직접 푸는게 나에겐 중요했다.
많은 기업에 자소서에 성장과정이나, IT 업계에 들어온 이유를 적으라면 항상 적는 구절이 있는데,
TV나 영화속 공학자/개발자들이 세상의 문제를 해결하는게 멋있어 보인다!
라고 적었다.
문제를 해결한다
는 매력적이고세상의(실제)
문제를 해결하는 것은 더욱 매력적이다!
그러나 실제로 컴공과에서 배운건 실생활의 문제를 해결하는 것과는 죄금 거리가 있었다.
그렇지만서도, 컴공과에서 배운 지식들 + 조금의 구글링으로실생활
문제를 풀었음에 큰 의미를 둔다.
먼저 크롬 드라이버를 사용하느라고 크롬을 키고 로그인하는 장면까지 보였기에 여러가지 문제가 있었을 것 같다.(이용자 입력 등)
애초에 디버그 한다고 excel, web 페이지를 전면에 보이게 했기 때문에,, 그렇게 좋은 UI/UX는 아닐 것이다.
지금 문제를 다시해결한다하면 아무래도 ajax 요청을 보내 엑셀을 다운로드 받아 해결 했을 것 같다.(그때도, 지금도 DB접근이 안되기에)
물론 UI/UX가 훌륭하진 않지만, 당시에 빠르게 만들 수 있는 솔루션이었다.
뭔가 SW로 내가 문제를 해결했다는 생각에 매우 뿌듯했고, 담당하셨던 봉사자 분도 자녀를 컴공에 보내고 싶어하셨다 😎
이렇게 일상에 SW로 문제를 해결 할 수 있다는 것에 매우 기뻤다!
반복되는 일을 하기 싫어한다는 것은 개발자의 숙명 아닐까? (큭..큭큭.. 반복되는,, 숙명,, 큭큭)
이때부터 자동화를 돌리려는 노력을 했다니 대견하기도 하면서 뿌듯하기도하면서 그렇다.
종합해보자면 참 좋은 토이프로젝트였다.
어떤 심오한 알고리즘이나 큰 문제점은 없었지만(PyQt5 GUI 만드는 법 정도?) 실생활의 문제를 풀었다는 것이 매우 뿌듯하다.
그리고 개발자로써 가져야하는 소양같은 것도 보여줄 수 있다고 생각한다. (귀찮으면 코딩해라)
문제를 효율적으로 해결하기
, 반복되는 작업은 자동화하기
앞으로의 커리어 개발에도 이 두가지는 빠지지 않을 것 같다.