매달 수십 통씩 보내던 거래명세서,
버튼 한 번으로 전체 고객에게
자동 발송부터 미납 안내까지 끝낸 방법
차량렌트업 경영지원 담당자가 ChatGPT X Python 업무자동화 교육에서 직접 만든 거래명세서 일괄 이메일 자동화 프로그램.
고객별 차량 렌트 데이터 → 개별 거래명세서 파일 제작 → 개별 이메일 자동 발송 → 입금 확인 및 미납 안내까지, 매월 반복되던 수작업을 클릭 한 번으로 줄인 실전 사례.
매월 반복되는 41시간의 수작업
언제까지 이렇게 해야 할까?
이 수강생은 차량 대여 업체의 경영지원 담당자였습니다. 매달 말이 되면 어김없이 반복되는 작업이 기다리고 있었습니다.
고객별로 차량 데이터를 정리하고, 거래명세서를 하나씩 만들어서 이메일로 발송하고, 은행 거래내역을 열어 입금 여부를 확인하고, 미입금 고객에게 안내 메일을 보내는 것. 이 모든 과정을 한 사람이 처음부터 끝까지 수작업으로 처리했습니다.

수작업으로 하던 방식
| 단계 | 작업 내용 | 소요 시간 |
|---|---|---|
| STEP 1 | 고객별 차량 대여 데이터 정리 (엑셀 수동 편집) | 월 12시간 |
| STEP 2 | 거래명세서 작성 및 이메일 개별 발송 | 월 15시간 |
| STEP 3 | 3개 주거래 은행 내역 확인 후 개별 입금 내역 정리 | 월 9시간 |
| STEP 4 | 미납 고객 별도 확인 후 입금 요청 메일 재발송 | 월 5시간 |
명확한 실무 규칙에 기반한 완전자동화
수강생은 교육을 통해 배운 파이썬 기초와 업무자동화 로직을 결합해, 자동화 프로그램을 직접 만들었습니다. 핵심은 아래 3가지 자동화로 나뉩니다.
|
1
|
STEP 1 · pandas
고객 이메일 매핑 구성
차량 데이터 엑셀을 읽어 고객명 → 이메일 주소 대응표를 자동으로 만듭니다.
주식회사, (주), 특수문자 등을 제거한 정규화 처리로 오류를 줄입니다. 결과값: 정규화된 고객명 ↔ 이메일 매핑 완성
|
|
2
|
STEP 2 · openpyxl + difflib
거래명세서 파일 매칭 + 금액 자동 추출
폴더 안의 거래명세서 파일을 스캔해 파일명에서 고객명을 추출합니다.
파일명이 DB 이름과 약간 달라도 유사도 매칭(60% 이상)으로 자동 연결됩니다. 매칭된 파일에서 청구금액과 납부기한을 자동으로 읽어옵니다. 예외처리: 매칭 실패 건 CSV 리포트 자동 저장
|
|
3
|
STEP 3 · smtplib + MIME
이메일 자동 발송 (첨부 포함)
고객명, 청구금액, 납부기한이 반영된 HTML 이메일 본문을 자동 생성합니다.
거래명세서 엑셀 파일을 첨부해서 각 고객 이메일로 발송합니다. 로그: 성공/실패 건수 실시간 GUI 표시
|
|
1
|
STEP 1 · pandas
3개 은행 거래내역 통합 분석
파일 3개를 자동으로 읽어 입금 내역을 하나로 통합합니다.
고객명 정규화 후 발송 대상과 자동 대조해 입금 여부를 판별합니다. 결과값: 고객별 입금 완료 / 미입금 자동 분류
|
|
1
|
STEP 1 · pandas + difflib
미납 고객 필터링 + 이메일 매핑
차액 > 0인 고객만 자동 필터링합니다.
고객명 정규화 후 이메일 주소와 자동 매핑합니다. 결과값: 안내 대상 고객 목록 확정
|
|
2
|
STEP 2 · smtplib + MIME
안내 메일 자동 발송
납부 금액과 7일 납부 기한이 포함된 안내 메일을 자동으로 발송합니다.
발송 실패 시 프로그램이 멈추지 않고 다음 고객으로 넘어갑니다. 예외처리: 실패 건 CSV 자동 저장 → 재처리 가능
|
어떤 기술과 도구를 사용했나요?
이 자동화 프로그램은 아래 기술들을 조합해 만들어졌습니다.
| 기술 / 라이브러리 | 역할 및 활용 |
|---|---|
| Python (파이썬) | 전체 자동화 로직 구성. 조건 분기, 반복 처리, 예외 처리 |
| pandas | 엑셀 파일(차량 데이터, 미납 데이터) 읽기 및 고객 정보 처리 |
| openpyxl | 거래명세서 엑셀 파일에서 청구금액(F8), 납부기한(L7) 셀 직접 읽기 |
| smtplib / email | SMTP를 통한 이메일 발송. HTML 본문 + 첨부 파일 포함 전송 |
| difflib | 고객명 유사도 매칭. 파일명과 DB 고객명이 약간 달라도 자동 연결 |
| tkinter | GUI 화면 구성. 청구 연월 입력 → 버튼 클릭 → 발송 로그 실시간 확인 |
| re (정규표현식) | 고객명 정규화 처리. 주식회사, (주), 특수문자 자동 제거 후 매칭 |
실제로 이렇게 작동합니다
청구 연월을 입력하고 버튼 하나를 누르면, 전체 고객 거래명세서 생성부터 이메일 발송, 결과 로그 출력까지 순서대로 자동 실행됩니다. (① 거래명세서 자동 발송 사례 일부)
▲ 수강생이 직접 만든 Tkinter GUI 프로그램 — 청구연월 입력 후 버튼 1회 클릭으로 전체 자동 처리
▲ 발송 완료 후 자동 저장되는 결과 리포트 — 성공/스킵/실패 전 건 자동 기록
▲ 코드가 템플릿 셀에 직접 기입하는 거래명세서 — 고객명 · 차량 · 이용 기간 · 금액이 모두 자동 채워집니다
자동화 전과 후, 무엇이 달라졌나요?

| 항목 | Before (수작업) | After (자동화) |
|---|---|---|
| 이메일 주소 확인 | 엑셀 직접 열어 확인 | 자동 매핑 (유사도 매칭 포함) |
| 파일 첨부 | 폴더에서 직접 찾아 첨부 | 파일명 파싱 후 자동 첨부 |
| 이메일 본문 작성 | 매번 수기 입력 | 금액·기한·고객명 자동 반영 |
| 미납 독촉 메일 | 별도로 수동 발송 | 미납 고객 필터링 후 자동 발송 |
| 오류 추적 | 기억에 의존 | 매칭 실패 리포트 CSV 자동 저장 |
이 자동화의 핵심은 단순히 클릭 수를 줄이는 것이 아닙니다. 고객 수가 2배가 되어도, 10배가 되어도 사람이 해야 할 작업량은 그대로입니다. 연월을 입력하고 버튼 한 번만 누르면 됩니다.
속도 보다 더 중요했던 것, 고객과의 신뢰

매달 말, 혼자 노트북 앞에 앉아 고객 한 명 한 명의 이름을 확인하며 명세서를 만들던 수강생 있었습니다. 이 수강생이 가장 두려워했던 건 속도가 아니라 오발송이었습니다. 잘못된 명세서가 잘못된 고객에게 가는 순간, 그건 단순한 실수가 아니라 관계의 균열입니다. 자동화는 처리 속도보다 먼저, 실수가 날 수 없는 구조를 만들었습니다.
자동화가 없앤 것은 반복 노동이지, 이 담당자의 역할이 아닙니다. 매달 확보되는 37시간은 이제 고객을 더 깊이 이해하고, 더 나은 서비스를 고민하는 시간이 되었습니다.
개발자가 만든 매끄러운 코드보다,
현장에서 고객과 함께했던 담당자가 만든 투박하지만 정확한 규칙이 더 큰 힘을 발휘합니다.
같은 방식으로 해결할 수 있는 다른 업무들
이 자동화의 핵심 구조는 "데이터 읽기 → 매칭 → 개별 발송"입니다. 이 구조는 아래와 같은 다양한 업무에 동일하게 적용할 수 있습니다.
HR / 경영지원팀 — 다수의 임직원의 급여 데이터을 통해 명세서 자동 생성 및 개별 이메일 발송
영업 / 계약팀 — 고객별 견적서 및 계약서 맞춤 생성 → 이메일 개별 자동 발송 → 입금 내역 대조 후 미납 안내
협회 / 회원 관리팀 — 갱신월에 자동 알림 및 회비 청구 발송 → 입금 내역 자동 대조 → 미납 회원 안내
경영관리 / 기획팀 — 실적 데이터 자동 취합 및 분석 → (주간/월간) 정기 보고서 생성 → 부서별 자동 발송
나의 업무와 나의 데이터를 관찰하면,
나의 하루를 더욱 가치있게 보낼 수 있습니다.
코딩 경험 없던 수강생이 Python 업무자동화 교육을 통해 직접 만든 실전 사례