codex를 활용한 업무 자동화(1)
[codex
AX
]
이번에 나름 기획성 글을 써보려고 한다. 이름하여 codex를 활용한 업무 자동화 …
그 첫번째 사례로 ‘정산내역서 발송 시스템’ 을 정했다. 참고로 이전에 정산내역서 발송 시스템은 nginx unit + python flask로 구축을 한 적이 있다.
정산내역서 확인 및 발송 시스템
매월 고객사로부터 정산내역서를 메일로 받고 이를 확인 후 사인을 해 pdf 로 저장 후 담당자에게 이를 발송하는 시스템이다. 이를 자동화하는 도구로서 codex를 이용해 간단한 웹 애플리케이션을 만든 후에 이를 활용할 것이다.
작업 방식은 두 가지가 있다.
- Codex가 직접 엑셀 파일을 열어 작업 후 메일로 발송
- Codex가 원하는 동작을 수행하는 애플리케이션을 만들고 이를 사용자가 수행
여기에서는 두 번째 방식을 선택한다. 일관성(Consistancy)때문이다.
LLM의 큰 단점중의 하나는 반복작업시 일관성 유지가 어렵다는 것이다. 동일한 프롬프트로 수행을 해도 조금씩 그 결과가 다르게 나온다. 가능하면 코드 형태로 결과를 남기고 이를 실행하는게 좋다
수행 환경은 다음과 같다.
- windows11
- python3.13 설치
- codex client 설치됨
- MS Office 365 설치됨
이제 작업은 크게 3가지로 나누어 할 것이다.
- excel파일을 읽어들여 사인 파일을 삽입하고 이를 pdf로 변환하기
- 위 pdf파일을 첨부로 하여 담당자에게 자동으로 메일링하기
- 1,2 를 하나로 만들고 이를 웹 애플리케이션화 하기
1. 엑셀 파일을 읽어들여 사인 파일 삽입 후 pdf 로 변환하기
아래 요구사항을 구현한 파이썬 코드를 만들어 줘
이 폴더의 엑셀 파일에 sign.png 를 J열 4행 셀에 삽입해줘..셀의 중앙이 아닌 '(인)'이라는 글자의 위치에 이미지를 위치시켜줘. 이미지는 가로 및 세로 비율이 원본 그대로 유지되어야 해. 그리고 그 엑셀 파일을 pdf로 변환한뒤 pdfs폴더에 저장해 줘
codex에 프롬프트를 던지고 3분 정도 기다리니 작업이 끝났다.

실행해 보자.

Sign파일도 엑셀 파일 및 생성된 pdf파일에도 잘 박혔다.

2. 위 pdf파일을 첨부로 하여 담당자에게 자동으로 메일링하기
메일을 보내는 일은 좀 복잡하다.
파이썬 같은 코드가 메일을 보내려면 SMTP를 제공하는 서비스 업체의 정보가 필요하다. 여기에서는 Google의 gmail smtp를 사용할 것이다.
이의 사용을 위해서는 앱 비밀번호(gmail의 사용자 비밀번호와는 다름)가 필요하다.

구글 계정관리 –> ‘앱 비밀번호’ 검색 하면 앱 비밀번호를 생성할 수 있다. 이를 잘 복사해 놓는다.
이제 pdf파일을 첨부로 하는 메일을 보내는 파이썬 코드를 만들어 줘
gmail의 smtp서버를 이용할 거야.. 이를 위한 정보는 다음과 같어
발신자 email = "[사용자ID]@gmail.com"
사용자 = "[사용자ID]"
앱 비밀번호 = "[아까 복사한 앱 비밀번호]"
메일 수신인, 제목, 내용은 다음과 같어
수신인 : [테스트메일 계정]
제목 : 【정산내역서|김성준】 [pdf폴더내 확장자를 제거한 pdf파일명]
본문내용 : "안녕하세요 김 성준 입니다.
정산내역서 확인해 보내드립니다.
감사합니다."


실행해보니 메일도 잘 발송되었다.
3. 1,2 를 하나로 만들고 이를 웹 애플리케이션화 하기
이제 1,2 단계를 하나로 만들고 웹 애플리케이션 화 시킨다.
정산 내역서 발송 웹 어플리케이션을 하나 만들려고 해
하나의 페이지에서 엑셀 파일하고 이미지를 입력 받으면 엑셀 파일에 이미지를 삽입하고 이를 pdf 로 변환한 뒤 메일을 입력받은 타깃 주소로 발송을 하면 돼.
기능을 정리하면 다음과 같어
【기능】
1. 화면에는 엑셀 파일과 이미지 파일을 업로딩하는 양식, 그리고 수신인 이메일을 입력하는 양식이 있음
2. 업로딩한 이미지 파일을 엑셀 파일의 J열 4행 셀에 삽입해줘..셀의 중앙이 아닌 '인'이라는 글자의 위치에 이미지를 위치시켜줘. 그리고 그 엑셀 파일을 pdf로 변환한 뒤 확장자를 제외한 엑셀 파일명은 그대로 유지하면서 pdf폴더에 저장해 줘. 이는 insert_sign_and_export.py파일을 참고해줘
3. 다음에는 아까의 pdf 파일을 첨부로 하는 이메일을 작성해 발송할꺼야.
- 제목은 “【정산내역서|김성준】 [pdf폴더내 확장자를 제거한 pdf파일명]”
수신인은 입력받은 수신인,
본문내용은 "안녕하세요 김 성준 입니다.
정산내역서 확인해 보내드립니다.
감사합니다."
- 이는 send_gmail_pdf.py파일을 참고로 해서 만들면 돼.
【기술】
- 파이썬을 사용해 줘

알려준대로 파워셀 프롬프트를 띄워 실행 방법대로 실행한다.

화면이 떴다. 테스트 해 보자.

실제 발송을 해 봤더니 오류가 뜬다…


Excel의 COM 초기화 문제로 보인다. 이제 다시 해 보자.

성공이다… 메일 박스를 열어 내용확인 결과 정상적으로 메일 도착.. 인줄 알았는데… 파일명이 이상하다..

이것도 정리를 부탁하자

실행 결과 이제 정상적으로 파일명이 넘어왔다.

이제 수행할 때 마다 명령어를 치기가 귀찮을 것 같다. 이를 클릭만으로 실행하는 도구를 만들어 보자.

콘솔 없이 조용히 실행을 하면 웹 브라우저를 종료해도 프로세스가 죽지 않으므로 우리는 콘솔 보이게 실행 인 run_web_app.bat을 실행하여 띄우면 된다.
생성된 코드를 조금 보면 알겠지만 이 작업은 pywin32를 활용하여 excel com에 접속해 작업한 것이다. 내 pc가 windows os이고 ms office 가 설치가 되어 있어야 원활하게 돌아간다.
여기까지 자동화를 위한 웹 애플리케이션을 만들어 보았다. 여기까지 작업을 정리해 보면
- 먼저 엑셀 파일에 사인 파일을 삽입하고 이를 pdf로 저장하는 코드 만들기
- pdf파일을 첨부로 메일링 하는 코드 만들기
- 두 코드를 하나로 합치기
이렇게 나누어 작업을 시키는게 한 번에 작업을 시키는 것 보다 오류 대응에 더 낫다. codex client 로 작업을 하니 하나로 합치는 작업도 아주 쉽게 할 수 있다.
이렇게 만든 코드는 다음과 같은 단점을 가진다.
- MVC패턴 등을 전혀 지키지 않았다.
- 테스트 코드가 전혀 없다.
여러 사람들이 쓸 서비스가 아니고 나만 쓸 용도라면, 유지 보수를 할 일이 없는 코드라면 위 단점들은 크게 문제가 되지 않을 것 같다.