대량환불 설계 단일진실 확립과 대량 처리 버그 잡기
목차
오늘 오후 작업은 "흩어진 것들을 한 곳으로" 라는 맥락 하나로 꿰인다. 설계 문서가 로컬 ~/Downloads에 떠돌고 있고, 참고 경로가 제각각이고, 코드 버그는 두 곳에서 터지고, GSC 툴링은 새 사이트를 빠뜨리는 상황—이 모든 게 "단일진실이 없는 상태"에서 오는 문제였다. 그래서 이 한 시간은 자연스럽게 정비 → 단일진실 확립 → 버그 수정 순으로 흘렀다.
1단계: 문서 정비 — 단일진실을 레포 안으로
작업 초반에 가장 먼저 건드린 건 CLAUDE.md였다. 참고 문서 경로가 절대경로(~/Downloads/...)와 상대경로가 뒤섞여 있었는데, .claude/ 기준 상대경로로 전부 통일했다. 이게 별거 아닌 것 같지만, 봇이 문서를 못 찾으면 그냥 틀린 걸 출력하거나 조용히 넘어가기 때문에 나중에 추적이 안 된다.
그 다음으로 즐거운 대량환불 관련 설계 문서들을 정리했다:
| 작업 | 이전 상태 | 이후 상태 |
|---|---|---|
| 설계메모 | 로컬 ~/Downloads |
.claude/pdf/zlgoon/ 커밋 |
| OpenAPI 규격서 원본 (HTML) | 미포함 | .claude/pdf/zlgoon/ 추가 |
ZLGOON_BULK_REFUND_DESIGN.md |
경로 참조 깨짐 | 레포 루트, 커밋본 단일진실 |
규격서 원본을 레포에 넣은 이유는 간단하다. "최신 버전"이 어디 있는지 물어볼 일이 없어야 하기 때문이다. 파일 하나 찾느라 슬랙 뒤지는 시간이 사실 제일 비싸다.
2단계: 버그 수정 — 대량 처리 계열 두 건
문서 정비가 끝나니 자연스럽게 실제 버그로 넘어갔다. 공교롭게도 둘 다 "대량 처리" 계열이었다.
클라이프스 대량발송 MAX CONN ERROR
동시 처리 수가 많을 때 커넥션 풀을 소진해버리는 문제였다. 대응은 두 방향으로 했다.
- 동시 처리 수 상한선 축소
- 실패 시 재시도 로직 추가 (지수 백오프 방식)
재시도 로직을 안 넣으면 한 번 터진 건은 그냥 유실되기 때문에, 이건 선택이 아니라 필수였다.
즐거운 대량환불 미리보기 무한로딩
이쪽은 증상이 모호해서 좀 걸렸다. 미리보기를 클릭하면 로딩이 끝나지 않는 현상인데, 처음엔 API 응답 문제로 봤다. 그런데 실제 원인은 JSP 쪽 escapeHtml 함수가 선언 없이 호출되는 ReferenceError였다. 자바스크립트 에러가 조용히 프로미스 체인을 끊어버리면서 완료 콜백이 영영 안 도는 것—전형적인 무한로딩 패턴이다.
// 문제: escapeHtml 미정의 상태로 호출
const safeHtml = escapeHtml(responseText);
// 수정: 함수 정의 추가 후 호출
function escapeHtml(str) { ... }
const safeHtml = escapeHtml(responseText);
증상이 네트워크처럼 보여서 삽질했지만, 결국은 단순한 ReferenceError였다는 게 교훈이다. 브라우저 콘솔 먼저 보는 습관을 다시 새겼다.
3단계: 인프라 자동화 — GSC와 kpopdex 봇
마지막으로 공통 인프라 쪽 두 건을 처리했다.
- GSC 자동 탐지:
sites.list기반으로 GSC 속성과 사이트맵 제출 대상을 자동 탐지하도록 변경. 새 사이트가 추가될 때 하드코딩 목록을 수동으로 갱신하지 않아도 된다.NEW-SITE-ONBOARDING.md와hedvion-CLAUDE.md도 동시에 업데이트. - kpopdex 봇 데이터 품질: 날짜
01-01플레이스홀더 감지, 콜라보 아티스트 오귀속, 싱글곡을 앨범으로 잘못 분류하는 케이스에 대한 가드 조건 추가.
한 시간이지만 내용이 조밀했던 건, 결국 모든 작업이 "어딘가에 떠도는 것들"을 제자리로 끌어오는 작업이었기 때문이다. 문서든 코드든 경로든, 단일진실 하나 잡는 데 드는 비용이 나중에 헤매는 비용보다 항상 싸다는 걸 오늘도 확인했다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.