[바이브 코딩 외주 돈 벌기 03] 클로드 코드로 고객이 요청한 자동화 프로그램 만들기
앞에서 네이버에 자동으로 로그인하는 프로그램을 만들어 보았습니다. 그런데 로그인 자체가 목적인 프로그램은 거의 없습니다. 로그인은 시작일 뿐이고, 진짜 가치는 로그인 이후에 무엇을 하느냐에 있습니다. 이번 프로젝트는 네이버 로그인 이후 메일함에 접근하여 필요한 정보를 수집하는 프로그램입니다. 앞에서 만든 로그인 자동화가 실제 외주 프로젝트에서 어떻게 활용되는지 직접 경험해 보겠습니다.
[01] 고객 요구사항 확인하기
쇼핑몰을 운영하는 고객으로부터 의뢰가 들어왔습니다. 여러 쇼핑몰을 동시에 운영하고 있는데, 주문이 들어올 때마다 네이버 메일로 알림이 옵니다. 문제는 하루에 들어오는 메일이 수십 통이고, 그중에서 주문 관련 메일만 골라내서 확인하는 작업을 매번 수동으로 해야 한다는 것입니다. 특정 기간 동안 들어온 메일 중에서 주문과 관련된 메일만 걸러내고, 해당 메일의 제목과 수신 날짜를 엑셀로 정리해달라는 요청이었습니다.
대화를 나누면서 두 가지를 추가로 제안했습니다.
주문 메일을 구분하는 키워드를 고객이 직접 설정할 수 있도록 하는 기능입니다. 쇼핑몰마다 메일 제목이 다르고, 향후 새로운 쇼핑몰이 추가되더라도 고객이 직접 키워드를 추가하면 별도의 수정 의뢰 없이 대응할 수 있기 때문입니다.
메일을 확인할 기간도 직접 지정할 수 있게 하자고 제안했습니다. 오늘 하루치만 확인할 수도 있고, 일주일 치를 한꺼번에 확인할 수도 있으면 훨씬 유용할 것입니다.
이처럼 고객이 요구하지 않았더라도 사용 편의를 고려해 한 발짝 더 나아가는 것이 단골 고객을 만드는 비결입니다. 최종적으로 정리한 요구사항은 다음과 같습니다.
네이버 메일함에서 지정한 기간 동안 수신된 메일을 확인
메일 제목에 특정 키워드가 포함된 메일만 필터링(키워드 직접 설정 가능)
조건에 맞는 메일의 제목과 수신 날짜를 엑셀 파일로 저장
[02] 현실적으로 견적 제안하기
고객의 요구사항을 바탕으로 이번 프로젝트의 복잡도를 분석해 보겠습니다. 네이버 로그인 자동화는 이미 앞에서 만들어 본 경험이 있으니 익숙한 영역입니다. 여기에 메일함 이동, 메일 제목과 날짜 수집, 키워드 필터링, 엑셀 저장 기능이 추가됩니다. 로직 자체는 단순하지만 제법 신경써야할 것들이 있어 보입니다. 필요한 기능을 나열해 보면 다음과 같습니다.
네이버 자동 로그인(Selenium)
메일함 이동 및 메일 목록 크롤링
날짜 기간 필터링
키워드 매칭 필터링
엑셀 파일 저장(openpyxl)
GUI 화면 구성(아이디/비밀번호 입력, 키워드 설정, 기간 설정, 결과 테이블)
작업 기간은 개발 2일, 테스트 및 디버깅 1일로 총 3일 정도 소요될 것으로 예상했습니다. 웹 자동화와 크롤링이 결합된 프로젝트이고, GUI까지 포함되어 있으므로 30만 원을 제안했습니다. 고객도 큰 이견 없이 수락하여 바로 작업에 들어가게 되었습니다.
[03] 미리 생각하고 설계하기
이번 프로그램에 필요한 것들을 정리해 보겠습니다. 프로그램의 목적은 네이버 메일함에서 주문 관련 메일을 찾아 엑셀로 저장하는 것입니다. 필요한 기능은 네 가지입니다.
아이디와 비밀번호를 입력받을 수 있는 화면
조회할 기간과 키워드를 설정할 수 있는 기능
조건에 맞는 메일을 화면에서 바로 확인할 수 있는 테이블
결과를 엑셀 파일로 저장하는 기능
프로그램이 동작하는 순서도 생각해 보겠습니다.
네이버에 로그인
메일함 페이지로 이동
메일 목록에서 각 메일의 제목과 수신 날짜를 수집
사용자가 지정한 기간과 키워드 조건에 맞는 메일 추리기
결과를 화면에 표시하고 엑셀 파일로 저장
여기서 한 가지 팁이 있습니다. 메일함으로 이동하는 방법은 두 가지가 있습니다. 어떤 방법이 더 좋은 방법일까요?
웹 화면에서 네이버 메일을 클릭해서 이동하는 방법
인터넷 주소에 직접 네이버 메일함 주소로 이동하는 방법
정답은 네이버 메일함 주소(URL)을 이용해 이동하는 것이 더 좋은 방법입니다. 그 이유는 프로그램을 제작할 때는 무조건 과정을 줄이고 단순화해야 오류가 없습니다. 때문에 URL 정보를 직접 제공해 이동하도록 하는 것이 과정도 단순하고 간단한 방법이기 때문에 권장합니다. 네이버 메일 메인 화면으로 이동한 다음 상단 주소창에 떠 있는 URL을 기록해둡니다.
네이버 메일함 URL : https://mail.naver.com
이제 앞에서 배운 것처럼 메일함에서 필요한 웹 요소 선택자를 확인하겠습니다. 네이버 메일함에서 확인해야 할 요소는 두 가지입니다. 메일 제목과 메일 수신 날짜입니다.
메일 제목 요소 선택자 값
css selector : #mail_list_wrap > ul > li.mail_item.mail-54752 > div > div.mail_inner > div
Xpath : //*[@id="mail_list_wrap"]/ul/li[1]/div/div[4]/div
메일 수신 시간의 요소 선택자 값
selector : #mail_list_wrap > ul > li.mail_item.mail-54752 > div > div.mail_date_wrap > span
Xpath : //*[@id="mail_list_wrap"]/ul/li[1]/div/div[5]/span
또한 여러 페이지에 걸쳐서 메일을 확인할 필요가 있을 수 있기 때문에 다음 페이지로 넘기는 버튼의 요소를 확인해야 합니다. 그러나 앞서서 메일함으로 이동할때 URL을 이용했던 것처럼 메일함의 페이지를 이동할때도 ULR을 이용할 수 있습니다. 메일함의 페이지를 넘겨보면 아래와 같이 URL이 변경됨을 확인할 수 있고 이를 통해서 규칙을 확인할 수 있습니다.
1페이지 : https://mail.naver.com/v2/folders/-1?page=1
2페이지 : https://mail.naver.com/v2/folders/-1?page=2
이번에는 이 정보를 이용하여 페이지를 넘기는걸 응용해보겠습니다. 이전 프로젝트에서는 로그인에 필요한 선택자 세 가지만 정리하면 됐지만, 이번에는 로그인 이후 수집해야 할 데이터의 선택자까지 추가로 확인해야 합니다. 프로그램이 복잡해질수록 prd.md에 정리해야 할 정보도 늘어나지만, 결국 하는 일은 같습니다. 필요한 요소의 위치를 찾아서 인공지능에게 알려주는 것입니다. 최종 내용을 정리해보겠습니다.
프로그램 목적 : 네이버 메일함에서 주문 관련 메일을 키워드로 필터링하여 엑셀로 저장하는 프로그램
필요 기능
GUI (아이디/비밀번호 입력, 기간 설정, 키워드 설정, 결과 테이블)
네이버 자동 로그인
메일 제목/날짜 크롤링
키워드 필터링
엑셀 파일 저장
동작 순서
1. 네이버 로그인
2. 메일함으로 이동 (https://mail.naver.com/)
3. 메일 목록에서 제목과 수신 날짜 수집
4. 지정 기간 + 키워드 조건으로 필터링
5. 결과를 GUI 테이블에 표시하고 엑셀로 저장
웹 요소 선택자
아이디 입력창
Selector : #id
XPath : //*[@id="id"]
비밀번호 입력창
Selector : #pw
XPath : //*[@id="pw"]
로그인 버튼
Selector : #log\.login
XPath : //*[@id="log.login"]
메일 제목
Selector : #mail_list_wrap > ul > li > div > div.mail_inner > div
XPath : //*[@id="mail_list_wrap"]/ul/li[1]/div/div[4]/div
메일 수신 날짜
Selector : #mail_list_wrap > ul > li > div > div.mail_date_wrap > span
XPath : //*[@id="mail_list_wrap"]/ul/li[1]/div/div[5]/span
페이지네이션
1페이지 : https://mail.naver.com/v2/folders/-1?page=1
2페이지 : https://mail.naver.com/v2/folders/-1?page=2
[04] 개발 시작하기
01 커서를 실행하고 새 프로젝트를 생성합니다. 폴더 이름은 Vibe_20260223_NaverMailAuto로 지정하겠습니다.
02 설계한 내용을 바탕으로 prd.md 문서를 생성하겠습니다. 정리한 내용을 그대로 입력해 넣도록 합니다.
03 클로드 코드를 실행하고 [Shift + Tab]을 눌러서 [Plan] 모드로 변경한뒤 prd.md 문서를 첨부하고 구현 계획을 수립해달라고 요청하겠습니다.
[나] : 첨부 파일을 확인하여 네이버 메일 주문 확인 자동화 프로그램을 구현계획을 수립하고 개발을 진행해줘.
04 클로드가 작성해준 계획을 확인해보겠습니다.
[인공지능] :
계획을 읽다가 매우 놀란 부분이 있었습니다. 사실 이 부분에서 오류가 발생할 것을 예상하고 있었습니다. 네이버 메일함에서 날짜를 보면 오늘 수신된 메일은 날짜가 아닌 "오전/오후 HH:MM" 형식으로 표시됩니다. 날짜 기반 필터링을 하려면 이 부분을 별도로 처리해야 하는데, 클로드가 이미 그것까지 고려하여 계획을 수립해 준 것입니다. 이런 부분을 미리 잡아주는 것이 [Plan] 모드를 활용하는 가장 큰 장점입니다.
05 계획을 승인하고 개발을 진행한 후 main.py 를 직접 실행하여 가상환경을 구성하고 패키지를 설치하세요. 이 과정은 앞에서 다뤘기 때문에 내용은 생략하겠습니다. 모든 패키지를 설치하였으면 프로그램을 실행해보세요.
프로그램이 성공적으로 실행되었습니다.
[05] 테스트하고 디버깅하기
01 필요 정보들을 입력하고 추출을 시작해보겠습니다.
02 오늘 하루를 추출하고 있는데 너무 많은 과거 까지 확인하는 현상이 발견되었습니다. 오늘 하루 메일만 확인하는 거면 1페이지만 확인해도 충분한데 다른 페이지들까지 확인하고 있는 상황입니다.
03 터미널에 있는 로그를 확인해보니 특별히 확인되는 현상이 없습니다. 클로드가 문제를 해결할 수 있도록 정보를 제공해보겠습니다.
[나] : 프로그램을 실행해보니 현재 터미널에서는 문제 없이 진행되는 것으로 보이는데 내가 지정한 날짜는 오늘 하루 임에도 불구하고 여러 페이지를 확인하고 있어. 실제 오늘 수신된 메일은 1page에 전부 확인되거든. 원인을 확인해볼래?
[인공지능] :
결과를 보면 현재 프로그램은 전체 페이지를 크롤링 한 뒤 분류하는 로직으로 설계되어 있었습니다. 제가 명확하게 설계하지 않은 이유이기 때문에 기간을 넘어서면 크롤링을 중단하는 로직을 추가하여 보완하면 해결될 것 같습니다.
04 이후 테스트를 하면서 다음과 같은 문제들을 수정했습니다.
1page가 아닌 2page로 넘어가서 완료됨
상태바가 진행 상태와 상관없이 표시됨
제목에 ‘쿠팡’ 키워드가 포함된 메일은 1건인데 2건이 표시됨
프로그램에서 제목이 줄바꿈 되어 제대로 표시 안됨 1줄로 표시 필요
[06] 고객에게 프로그램 배포하기
모든 기능이 정상 동작하는 것을 확인했으니 이제 실행 파일로 배포할 차례입니다. 클로드에게 배포를 요청하고 빌드가 완료되면 dist 폴더 안에 생성된 실행 파일을 압축해 고객에게 전달하면 됩니다.
[나] : 가상 환경에 PyInstaller를 설치하고 실행 파일로 빌드해줘.
[07] 프로젝트 회고하기
이번 프로젝트의 전체 소요 시간을 정리해 보면 다음과 같습니다.
고객 상담 및 요구사항 파악 : 20분
견적 제안 및 협의 : 10분
개발 설계 (선택자 확인 포함) : 40분
초기 개발 : 40분
테스트 및 디버깅 : 120분
배포 및 안내 문서 작성 : 30분
고객 전달 및 사용법 안내 : 40분
총 소요 시간 : 약 5시간 (300분)
30만 원짜리 프로젝트를 약 5시간 만에 완료했으니 시급으로 환산하면 약 6만 원입니다. 이번 프로젝트는 앞에서 만든 네이버 로그인 자동화의 확장이었습니다. 로그인까지는 동일하고, 그 이후에 메일함 이동, 데이터 수집, 필터링, 엑셀 저장이라는 단계가 추가된 구조입니다. 프로그램의 규모는 커졌지만 개발 흐름은 동일했습니다. 필요한 웹 요소의 선택자를 찾고, 동작 순서를 정리해서 인공지능에게 전달하고, 테스트하면서 문제를 잡아나가는 과정입니다.
테스트 과정에서 인상적이었던 장면이 두 가지 있었습니다. 하나는 [Plan] 모드로 수립한 계획에서 클로드가 날짜 표시 형식 문제를 미리 잡아준 것입니다. 네이버 메일함에서 오늘 수신된 메일은 날짜가 아닌 시간으로 표시되는데, 이 부분을 사전에 고려하지 않으면 날짜 필터링에서 반드시 오류가 발생합니다. [Plan] 모드를 활용해 계획을 먼저 세우는 것이 단순히 절차가 아니라 실제로 오류를 예방하는 효과가 있다는 것을 다시 한번 확인한 순간이었습니다. 다른 하나는 크롤링 결과를 의심했다가 오히려 클로드가 맞았던 경험입니다. 키워드에 해당하는 메일이 1건이라고 생각했는데 프로그램은 2건이라고 표시했고, 실제로 대조해 보니 2건이 맞았습니다.
이번 프로젝트에서 배운 점은 크게 두가지 입니다. 첫째, 고객이 요청하지 않은 기능을 추가하는 센스가 단가를 높인다는 점입니다. 이번 프로젝트에서 고객은 엑셀 저장만 요청했지만, GUI 테이블과 키워드 직접 설정 기능을 추가로 제안했습니다. 이런 작은 차이가 고객 만족도를 높이고, 재의뢰와 좋은 리뷰로 이어집니다. 둘째, 웹 자동화에서는 과정을 단순화하는 것이 정답이라는 점입니다. 메일함으로 이동할 때 화면에서 아이콘을 클릭하는 대신 URL로 직접 이동하는 것처럼, 같은 결과를 내더라도 단계를 줄일수록 오류가 줄어듭니다. 프로그램의 안정성은 복잡한 코드가 아니라 단순한 설계에서 나옵니다.
