문제의 시작: 링크는 정말 살아있나
매주 수십 개의 주문이 들어올 때마다, 우리는 각 바이어에게 맞춤형 송장 정보를 담은 메일을 보낸다. 여기에는 배송사별 추적 링크도 포함된다. 그런데 문제는 간단했다. 누군가는 링크를 잘못 복사했고, 또 누군가는 시스템 오류로 링크가 만료되었는데도 모르고 있었다.
"이거 수동으로 일일이 클릭해서 확인하는 건 너무 비효율적이지 않을까?"
Claude Code로 '링크 검증 봇' 만들기
비개발자 입장에서 접근한 방법은 이거였다.
단계 1: 윈도우 디바이스의 구글 시트에 데이터 정리
송장 정보(주문번호, 배송사, 링크)를 구글 시트에 나열했다.
주문번호 | 배송사 | 추적링크 | 검증상태
--------+-------+--------+--------
ORD001 | DHL | https://... | ?
ORD002 | FedEx | https://... | ?
단계 2: Claude Code에 검증 로직 요청
요청 내용은 이랬다.
「구글 시트에 있는 추적 링크들이 정말 접근 가능한지 확인해주고, 접근 불가능한 항목만 따로 표시해줄 수 있나?」
Claude Code는 다음과 같은 스크립트를 제안했다.
import requests
from google.colab import auth
from googleapiclient.discovery import build
auth.authenticate_user()
sheets = build('sheets', 'v4')
# 시트에서 링크 읽기
result = sheets.spreadsheets().values().get(
spreadsheetId='YOUR_SHEET_ID',
range='A2:C100'
).execute()
links = result.get('values', [])
# 각 링크 검증
for idx, row in enumerate(links, start=2):
try:
response = requests.head(row[2], timeout=5)
status = 'OK' if response.status_code < 400 else 'FAIL'
except:
status = 'ERROR'
# 검증 결과를 시트에 기록
sheets.spreadsheets().values().update(
spreadsheetId='YOUR_SHEET_ID',
range=f'D{idx}',
valueInputOption='USER_ENTERED',
body={'values': [[status]]}
).execute()
단계 3: 실행 후 발견한 것들
봇을 돌렸을 때 나온 결과는 좀 충격적이었다.
• 총 156개 링크 중 12개가 이미 만료됨
• 3개는 복사 오류로 도메인 부분이 깨져있음
• 5개는 배송사 서버 점검 중이었음
우리가 수동으로 확인했다면 아마 2~3개만 발견했을 것이다.
예상 밖의 부수 효과
더 흥미로운 건 이 다음이었다. 봇이 링크를 검증하면서 자동으로 기록한 "시간대별 링크 실패 패턴"을 보면, 특정 배송사의 추적 서버가 매주 수요일 오전 9시(GMT 기준)에 응답 지연을 겪는다는 걸 알 수 있었다.
그러니까 우리는 그 시간대를 피해서 링크를 보내기 시작했다.
비개발자가 얻은 것
이 자동화의 핵심은 "반복 작업을 기계에 맡기면 패턴이 보인다"는 거였다.
• 수동 검증: 오류 발견 정도
• 자동 검증: 오류 발견 + 패턴 인식 + 미리 예방
Claude Code는 단순 검증 도구가 아니라, 숨겨진 데이터 신호를 찾아내는 탐지기가 되어줬다.
다음 자동화는 뭘 해볼까. 이번엔 이메일 제목줄에서 "높은 답장률을 끌어내는 단어 패턴"을 찾아보려 한다.