개발 slecs

디스코드 리뷰 링크를 ID 기반 경로로 교체해 장기 안정성 확보

목차

review_loop 에서 Discord 에 보내는 원문 링크의 URL 형식을 legacy slug 방식에서 새로운 ID 기반 경로(/p/{id}/)로 변경했다. 작은 수정 같지만 이 과정에서 URL 마이그레이션의 관점과 팀 도구의 안정성을 다시 생각하게 됐다.

왜 legacy 형식을 버려야 했나

slug 기반 URL(/{slug})은 한때 충분해 보였다. 사람이 읽을 수 있고, SEO 친화적이었으니까. 그런데 시간이 지나면서 문제들이 드러났다.

  • 변경 가능성: slug는 콘텐츠 업데이트 시 변할 수 있다. 제목을 바꾸거나, slug 규칙을 개선하려 할 때 기존 링크가 깨진다.
  • ID의 불변성: 반면 내부 ID는 영원히 변하지 않는다. 콘텐츠가 어떻게 수정되든 /p/{id}/는 항상 같은 리소스를 가리킨다.
  • Discord 아카이브: review_loop에서 공유되는 링크들은 Discord에 영구 기록된다. 한 달, 몇 개월 뒤에 팀원이 그 메시지를 다시 찾으려고 클릭했을 때 404가 나면 안 된다.

review 루프는 여러 팀원이 참고하는 공유 채널이기도 해서, URL 안정성이 정말 중요했다.

변경 전후 비교

항목 이전 현재
URL 형식 /{slug} /p/{id}/
안정성 slug 변경 시 깨짐 불변 ID
Discord 아카이브 시간 지나면서 링크 부패 가능 장기 유지
코드 패턴 slug 조회 필요 ID 직접 사용

구현 과정에서 고려한 것들

review_loop.py에서 URL을 조립하는 로직을 변경할 때, 단순히 format string을 고치는 것 이상의 것들을 생각해야 했다.

1. 기존 데이터 호환성

이미 Discord에 legacy 형식의 링크가 수백 개 흩어져 있다. 그걸 모두 새 형식으로 재공유할 수는 없으니, 기존 링크가 여전히 작동하도록 유지했다. 서버 라우팅에서 legacy 경로를 redirect 처리하는 방식으로.

2. 팀 커뮤니케이션

이 변경을 배포했을 때, review 채널을 주로 보는 팀원들에게 "앞으로 공유되는 링크가 이렇게 생겼습니다" 정도 간단히 알렸다. 사소한 변경 같지만, 누군가는 링크 형식이 변했다는 걸 인식할 필요가 있었다.

비슷한 상황에서의 교훈

URL 마이그레이션은 생각보다 자주 마주친다. 각각 다른 고려사항이 있다.

  • API 버전닝: /v1/resource vs /v2/resource — 이것도 비슷한 문제. 레거시 엔드포인트를 deprecate하되 충분한 전환 기간을 줄 필요가 있다.
  • 매직 링크 형식: 초대 링크, 공유 토큰 같은 경우, ID vs 토큰 형식을 고를 때도 "변경 가능성"과 "보안"을 함께 봐야 한다.
  • 문서화: format 변경이 일어날 때, 팀 위키나 코드 주석에 "왜 이 형식인가"를 남기는 게 나중에 유지보수할 사람한테 정말 도움이 된다.
# 변경 전
discord_url = f"/{content_slug}/"

# 변경 후
discord_url = f"/p/{content_id}/"

한눈에 보면 단순한 변경이지만, 그 뒤엔 "왜 slug에서 ID로?"라는 질문에 대한 답이 필요하고, 그게 코드를 읽는 다음 사람에게 결정의 맥락을 전달한다.

마무리: 작은 수정이 주는 신호

이런 작은 fix들이 팀에 신호를 보낸다. "우리는 공유 도구의 안정성을 신경 쓴다", "외부 플랫폼(Discord)과의 통합에서 링크 부패를 방지하려고 한다" 같은 메시지가. review_loop는 단순한 로그 채널이 아니라 팀의 코드 리뷰 문화가 남는 곳이기 때문에, 그곳의 링크들이 계속 살아 있어야 한다는 작은 고민이 모여서 결국 더 신뢰할 수 있는 시스템이 된다.


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

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

댓글 0

첫 댓글 달아줘.