자동화 slecs

자동화 봇 브로드캐스트의 깨진 URL을 ID 기반으로 수정

목차

money-bot이 보내는 broadcast 메시지의 URL을 레거시 형식 /{slug}/에서 새로운 형식 /p/{id}/로 변경했다. 작은 것 같지만 자동화 시스템의 신뢰성을 크게 좌우하는 변경이었다.

왜 이 fix가 필요했나

자동화된 bot이 사용자들에게 메시지를 보낼 때, 그 안에 URL을 포함한다. 사용자가 그 링크를 클릭하면 의도한 페이지로 가야 한다. 당연해 보이지만, URL 형식이 시스템 아키텍처 변화를 따라가지 못하면 깨진 링크 지옥에 빠진다.

이 경우, 시스템이 slug 기반 라우팅에서 ID 기반 라우팅으로 전환되었는데, bot이 여전히 레거시 형식으로 URL을 생성하고 있었다. 즉:
- 새 시스템은 /p/{id}/ 형식의 엔드포인트만 지원
- 하지만 bot의 broadcast는 여전히 /{slug}/ 형식으로 URL 생성
- 사용자 수백 명에게 매일 깨진 링크 전달

이건 사용자 경험뿐 아니라 추적 가능성(trackability), 서비스 신뢰도, 심지어 재정 영향까지 미친다.

slug vs ID: 왜 ID 기반이 나은가

처음엔 slug를 쓰는 게 사람 친화적으로 보인다.

관점 slug 기반 ID 기반
가독성 /{my-event-title}/ 직관적 /p/12345/ 덜 직관적
변경가능성 제목 변경 시 URL 깨짐 ID는 불변식
동시성 같은 이름의 여러 항목 처리 복잡 항상 유일한 식별자
자동화 안정성 의존 문자열 처리, 에러 위험 높음 단순 정수 처리

자동화 시스템, 특히 bot이 생성하는 링크는 수년 후에도 유효해야 한다. slug는 비즈니스 로직에 따라 변경될 수 있지만, ID는 처음 생성된 순간 영원한 식별자다. 따라서 broadcast 같은 장기 저장/전송 메커니즘에서는 ID를 쓰는 게 철칙이다.

money/generate.py에서 뭘 바꿨나

broadcast 메시지를 생성하는 로직이 있을 텐데, 여기서 URL을 조립하는 부분이 있다:

# Before: slug 기반
def generate_broadcast_url(item):
    return f"/{item['slug']}/"

# After: ID 기반
def generate_broadcast_url(item):
    return f"/p/{item['id']}/"

작은 변경처럼 보이지만, 이 함수가 매일 수백 수천 번 호출되고, 그 결과가 영구 기록(메시지 큐, 로그, 사용자 알림)으로 남는다. 따라서 한 번 고치면 앞으로의 모든 broadcast가 정상이 된다.

팀 관점에서의 의미

이런 fix는 흔히 세 가지 패턴 중 하나다:

  1. 기술 부채 상환: 시스템이 refactor됐는데, 의존 코드를 깜빡한 경우
  2. 사용자 버그 보고: "링크가 자꾸 깨져요"라는 신고가 들어온 후
  3. 자동화 감사: 배포 전 QA가 잡아낸 경우

어느 쪽이든, 자동화된 시스템은 사람의 손이 덜 갈수록 좋다. broadcast가 매일 자동으로 돈다면, 그 안의 URL 생성 로직이 한 번 깨지면 수개월 동안 사용자들이 깨진 링크를 받는다. 그래서 이런 부분은 deployment 후가 아니라 설계 단계부터 점검하는 게 중요하다.

앞으로 비슷한 자동화 시스템을 만들 때는:
- bot이 생성하는 모든 URL을 /{id}/ 형식으로 통일
- slug는 SEO나 UI에서만 쓰고, 자동화 로직에선 제외
- 배포 전 broadcast 메시지의 URL 형식이 현재 라우팅과 일치하는지 테스트

끝.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.