피드로 돌아가기
Stop Hardcoding 301s: How I Built a Redirect Engine That Doesn't Break at 2 A.M.
Dev.toDev.to
Backend

결정론적 파이프라인 설계를 통한 예측 가능한 Redirect Engine 구축

Stop Hardcoding 301s: How I Built a Redirect Engine That Doesn't Break at 2 A.M.

Piotr Zielinski2026년 6월 4일8intermediate

Context

정적 Nginx 설정의 한계로 인한 운영 오버헤드와 비즈니스 요구사항의 빈번한 변경 발생. 단순 설정 문제를 넘어 호스트, 경로, 쿼리, 메서드에 기반한 정밀한 Routing Product로의 전환이 필요했던 상황.

Technical Solution

  • 요청 진입 시 Host 존재 여부, Rate Limit, 계정 상태(402)를 순차적으로 검증하는 Corridor of Gates 구조 설계
  • Priority DESC $\rightarrow$ createdAt DESC $\rightarrow$ ID DESC 순의 엄격한 정렬 기준을 통한 Rule Evaluation의 결정론적 보장
  • 단순 Path Match가 아닌 Target URL 생성 성공 여부를 기준으로 'Winner'를 결정하는 Rule Loop 메커니즘 적용
  • Regex Capture Group, Placeholders, Ternary 연산자를 지원하는 Dynamic Rule 엔진 구현
  • Destination Blacklist 검증 단계에서 인프라 장애 시 503을 반환하는 Fail-closed 전략 채택
  • Production Traffic과 Simulation 환경 간의 Resolution Logic을 완전히 일치시켜 배포 전 예측 가능성 확보

- Rule 충돌 방지를 위해 DB Tie-breaker가 아닌 명시적인 Priority 필드 도입 여부 검토 - Match 성공과 Redirect 타겟 생성 성공을 분리하여 Catch-all Rule의 동작 방식 정의 - 외부 의존성(Blacklist API 등) 장애 시 시스템의 기본 동작을 Fail-open과 Fail-closed 중 선택 - 운영 환경과 동일한 로직을 사용하는 Simulation 도구를 구축하여 설정 변경 리스크 최소화

원문 읽기