의뢰를 받아 만든 공유오피스 관리 프로그램 Office MOO 입니다. 지점 몇 곳에 입주업체가 여러 곳 들어와 있는 구조에서, 매달 반복되는 계약서 갱신·발송과 입금 확인, 세금계산서 발행 준비를 프로그램 한 곳에서 끝내는 게 목표였습니다. 이번이 1차 개발이고, 필요한 기능은 의뢰처에서 쓰면서 추가로 업데이트해 나갈 예정이라고 합니다.

화면 구성

Office MOO 로그인 화면

광고

로그인 화면입니다. 관리자 계정은 아래 회원 등록 화면에서 만듭니다.

Office MOO 회원 등록 화면

로그인 후 실행되는 Office MOO 메인 창

로그인하면 메인 창이 뜨고, 여기서 각 관리 메뉴로 들어갑니다.

메일 자동 발송에 쓸 SMTP 계정 설정 화면

프로그램이 계약서를 메일로 직접 보내기 때문에 발송용 SMTP 계정을 설정하는 화면을 따로 뒀습니다. 회사 메일 계정을 바꾸더라도 코드 수정 없이 여기서만 바꾸면 됩니다.

지점 등록 및 수정 화면

입주 업체 등록 화면

지점을 먼저 등록하고, 그 지점에 들어온 업체를 등록하는 순서입니다.

매월 계약서 갱신과 입금 처리

이 프로그램에서 제일 손이 덜 가게 만든 부분이 업체 리스트 화면입니다. 매월 갱신되는 계약서를 자동으로 만들어 이메일로 보내고, 입금이 확인되면 클릭 한 번으로 입금 처리를 합니다.

업체 리스트 - 계약서 자동 생성, 이메일 전송, 원클릭 입금 처리 화면

계약서 메일 발송 진행 화면

입주 업체가 받은 계약서 안내 메일

입주 업체는 이런 메일로 계약서를 받습니다. 메일에는 갱신된 임대차 계약서가 PDF 로 첨부돼 있습니다.

이메일에 첨부된 갱신 임대차 계약서 PDF

입금 관리 쪽에는 세금계산서 엑셀 변환 기능이 있습니다. 홈택스에 대량으로 등록할 세금계산서 발행 목록을 엑셀로 뽑아 주기 때문에, 업체 수만큼 홈택스에서 한 건씩 입력하던 작업이 파일 업로드 한 번으로 줄어듭니다.

입금 관리 - 홈택스 대량 등록용 세금계산서 엑셀 변환 화면

이 기능을 만들 때 신경 써야 하는 건 홈택스 쪽 양식입니다. 일괄 발행용 엑셀은 홈택스가 내려 주는 양식의 열 순서와 형식을 그대로 따라야 업로드가 통과됩니다. 사업자등록번호, 작성일자, 공급가액·세액 같은 칸이 어긋나면 파일 전체가 거부되거나 일부 행만 오류로 빠집니다. 양식은 홈택스 사정에 따라 바뀔 수 있으니, 이런 기능을 넣는다면 양식 파일을 프로그램 안에 고정해 두기보다 최신 양식을 받아 비교해 볼 수 있게 해 두는 쪽이 유지보수가 편합니다.

이런 프로그램을 만들 때 미리 정해 둘 것

매월 반복되는 발송 기능은 "이번 달 것을 이미 보냈는가"를 프로그램이 알고 있어야 합니다. 발송 이력을 업체·월 단위로 남겨 두지 않으면, 담당자가 버튼을 한 번 더 누르는 것만으로 같은 계약서가 두 번 나갑니다. 입금 처리도 마찬가지로 누가 언제 처리했는지 남겨 둬야 나중에 금액이 안 맞을 때 거슬러 올라갈 수 있습니다.

메일 발송은 실패를 전제로 짜는 게 맞습니다. SMTP 계정 비밀번호가 바뀌었거나, 받는 쪽 주소가 틀렸거나, 메일 서버가 대량 발송을 잠시 막는 경우가 생깁니다. 한 업체에서 실패했다고 전체 발송이 멈추지 않게 하고, 어느 업체가 실패했는지 목록으로 보여 주면 담당자가 그 건만 다시 보내면 됩니다.

클라이언트가 MySQL에 직접 접속하지 않고 서버의 PHP를 거치게 한 것도 이런 소규모 프로그램에서 흔히 쓰는 구조입니다. 사무실 PC마다 DB 계정과 비밀번호를 심어 두지 않아도 되고, DB 포트를 외부에 열 필요도 없습니다. 대신 PHP 쪽에서 로그인 확인과 권한 체크를 빠짐없이 해야 이 구조의 의미가 있습니다.

개발 환경과 기간

클라이언트 프로그램은 VB.NET, 데이터는 서버 쪽 PHP + MySQL 로 처리했습니다.

  • Visual Studio 2019
  • PHP 7.3.17
  • MySQL 5.6.30
항목 기간
미팅(클라이언트·내부 개발 미팅) 2 M/D
기획 2 M/D
UI 기획 및 디자인 1 M/D
PHP 프로그래밍 1 M/D
MySQL 1 M/D
Visual Basic 1 M/W

표의 M/D는 한 사람이 하루 일한 양(Man-Day), M/W는 한 사람이 일주일 일한 양(Man-Week)입니다. 전체 2 M/W 정도 걸렸습니다. 처음에 정리된 기획 없이 시작한 일이라 표에서 보듯 기획과 미팅에 들어간 시간이 코딩 시간보다 많았습니다. 의뢰처의 요구사항이 명확하지 않아 하나씩 확인해 가며 정해야 했고, 요구서가 제대로 있었다면 훨씬 짧게 끝났을 겁니다. 이런 소규모 의뢰일수록 "어떤 화면에서 무엇을 누르면 무엇이 나오는지" 정도라도 첫 미팅에서 문서로 받아 두는 게 결국 양쪽 시간을 아끼는 길이라는 걸 다시 느꼈습니다.

구조 자체는 단순하게 가져갔고, 테스트 기간까지 마친 뒤 프로젝트를 인계했습니다.