가상의 팀, 가상의 사고, 실제 메커니즘. 온콜 엔지니어가 기록하는 순서대로 이야기를 풀어갑니다.
Contentin 연구팀 ·
이것은 예시입니다
아래의 팀, 제품 및 일정은 실패가 어떻게 진행되는지 보여주기 위해 만들어졌습니다. 실제 회사, 고객 또는 측정값은 언급되지 않았습니다.
사고의 순서
1
09:10, 런칭 페이지가 CMS에 입력됨
6명의 제품 팀이 헤드리스 CMS와 정적 빌드를 사용하여 마케팅 사이트를 운영합니다. 편집자가 파트너 도메인으로 링크하는 파트너 발표를 준비합니다. 해당 도메인은 일주일 전에 등록되었습니다.
2
09:14, 편집자가 게시 버튼을 누름
게시 웹훅이 함수를 호출합니다. 이 함수는 파트너 도메인에 대해 링크백 체커 호출을 실행하며, 성공이 아닌 모든 응답에 대해 릴리스를 차단하도록 작성되었습니다.
3
09:14, 빌드가 시작되지 않음
두 가지 오류가 동시에 발생합니다. 도메인이 새로워져 인덱스가 아직 이를 모를 수 있습니다. 별도로, 팀의 키에 대한 선불 잔액이 고갈되어 유료 후속 호출이 HTTP 402를 반환했습니다.
4
09:40, 팀이 이를 발견함
편집자가 모호한 오류를 보고합니다. 엔지니어가 함수 로그를 확인하고 402 및 빈 결과를 보고, 두 가지 중 무엇이 차단의 원인인지 파악하는 데 20분을 보냅니다.
5
10:05, 수동 배포로 런칭 진행
누군가가 수동 배포로 훅을 우회합니다. 런칭은 55분 늦어졌으며, 우회 과정에서 어떤 검사가 건너뛰어졌는지 기록이 남지 않았습니다.
런칭 전에 팀이 확인한 항목
알고 보니 매우 적었습니다. 테스트 목록에는 잘 알려진 도메인만 포함되어 있었기 때문에 파트너 링크가 도착하기 전까지 격차가 숨겨져 있었습니다. 유명 사이트에서의 테스트는 파이프라인이 작동한다는 것을 증명할 뿐, 아직 인덱스에 등록되지 않은 도메인에 대해서는 아무것도 알려주지 않습니다.
더 나은 테스트 목록에는 세 가지 유형의 도메인이 포함되어야 합니다: 확립된 도메인, 작은 니치 도메인, 그리고 최근 등록된 도메인. 누구나 이를 신뢰하기 전에 이 세 가지를 모두 훅을 통해 실행해야 합니다.
테스트는 어떤 도메인을 포함했습니까?
쉬운 도메인만 포함했습니다. 목록의 모든 도메인은 수년 간의 이력을 가지고 있었으므로 모든 응답이 완전히 채워져 돌아왔고, 빈 응답이 게시에 어떤 영향을 미치는지 아무도 보지 못했습니다.
진짜로 새로운 도메인 하나를 추가하고 결과를 수동으로 확인하세요. 결과가 'unknown'이 아니라 'bad'라고 표시된다면, 런칭 전에 규칙을 수정해야 합니다.
스테이징 실행에서 누락된 항목은 무엇입니까?
스테이징 실행은 잔액이 건강한 키를 사용했으므로 빈 잔액 경로가 실행되지 않았습니다. 크레딧을 의도적으로 소모하는 테스트를 작성한 사람은 없었습니다.
해당 경로를 테스트로 유지하세요. 분기마다 한 번 402를 강제 실행하고, 이후 편집자가 무엇을 보는지 확인하세요. 아무도 실행하지 않는 실패 경로는 신뢰할 수 없는 경로입니다.
원인 분석
게이트는 모든 비성공 응답을 최종 판정으로 처리했습니다. 이것이 근본 원인입니다. 잔액 문제와 알 수 없는 도메인은 도구 및 인덱스에 대한 사실일 뿐, 페이지 자체에 대한 정보는 아닙니다.
우리의 그래프는 약 한 달에 한 번 재구축됩니다. 마지막 갱신 이후에 등록된 도메인은 빈 것처럼 보일 수 있으며, 새로운 파트너는 런칭 페이지의 정상적인 사례입니다. 아무도 이를 확인하지 않았습니다. 팀은 nytimes.com과 같은 오래되고 잘 알려진 도메인만을 사용하여 훅을 테스트했습니다.
두 번째 실수는 침묵이었습니다. 함수는 오류를 로깅했지만 알림을 보내지 않았고, 편집자는 크레딧이 고갈되었음을 암시하지 않는 일반적 실패 메시지를 보았습니다.
비용은 문제가 되지 않았습니다. 호출당 2 크레딧으로, 이 가상의 사이트의 한 달 전체 체크 비용은 약 $0.60이었습니다. 이는 비용 테이블의 3,000개 게시 행과 동일한 금액입니다. 게이트는 저렴했지만 2026년에 1시간의 비용을 발생시켰습니다.
402는 별도의 항목으로 다뤄야 합니다. 선불 잔액은 모니터링할 수 있는 상태이므로, $1에 해당하는 10,000 크레딧에서 간단한 알람을 설정했다면 며칠 더 일찍 알림이 발생했을 것입니다.
팀이 작성한 액션 아이템
소유자는 개인이 아닌 역할입니다. 모든 항목은 예시에 포함됩니다.
변경 사항
소유자
이유
402를 스킵 및 플랫폼 채널로 알림 처리
플랫폼
크레딧은 페이지 상태가 아닌 청구 상태입니다
새로운 도메인에 대한 빈 결과를 'bad'가 아닌 'unknown'으로 처리
플랫폼
인덱스는 약 한 달의 지연이 있습니다
편집자에게 이유를 평이한 언어로 표시
편집 도구
로그 읽기로 인한 20분 손실
건물에 건너뛴 검사를 기록
플랫폼
수동 배포는 흔적을 남기지 않았습니다
이번 주에 등록된 도메인으로 훅을 테스트
QA
오래된 도메인은 격차를 숨깁니다
런칭 주를 위한 리허설
다음 실패 후가 아닌, 다음 런칭 전에 이를 실행하세요.
1
아직 확인하지 않은 도메인 선택
최근에 등록된 도메인을 선택하고 해당 도메인에 대한 무료 개요 액션을 호출합니다. 얇은 응답이 차단이 아닌 'unknown'으로 로깅되는지 확인합니다.
2
테스트 잔액 고갈
작은 잔액의 테스트 키를 사용하고 의도적으로 0이 될 때까지 실행합니다. 402가 도착하고, 알림이 발생하며, 게시가 빌드로 계속되는지 관찰합니다.
3
편집자의 메시지 읽기
훅을 보지 않은 동료에게 오류 텍스트를 읽어보게 합니다. 그들이 다음 단계를 말할 수 없다면, 런칭 전에 메시지를 수정해야 합니다.
4
건너뛰기를 건물에 기록
건너뛴 검사가 날짜와 이유가 포함된 메모를 건물에 남기는지 확인합니다. 수동 배포가 아무도 설명할 수 없는 공백을 남기지 않도록 합니다.
수정 방법
팀은 하나의 일반적 실패를 세 가지로 분리했습니다. 각 응답에는 다른 소유자가 있기 때문입니다. 401은 키 문제, 402는 청구 상태이며, 새로운 도메인에 대한 빈 결과는 단순히 알 수 없는 상태입니다. 각각 고유한 분기 및 고유한 메시지를 가집니다. 이것이 전체 변경 사항입니다.
누구도 스택 트레이스를 읽어서 어떤 오류가 발생했는지 알 필요가 없습니다. 알림은 상태를 명시하며, 편집자는 다음 단계를 알려주는 문구를 봅니다.
왜 잔액 알람이 0보다 훨씬 높은 곳에 설정됩니까?
10,000 크레딧은 공개 가격으로 $1이며, 조기 도착 시에도 충분한 경고를 제공할 수 있는 작은 금액입니다. 사람이 볼 수 있는 곳에 알람을 설정하세요. 금요일에 아무도 열지 않는 로그가 아닌 곳에요.
하루에 한 번 크게 실패하는 체크가, 런칭 중에 조용히 실패하는 체크보다 낫습니다.
팀과 숫자에 대해 합의하고, 키 교체 규칙이 기록된 동일한 곳에 기록하세요. 두 항목이 함께 검토되도록 합니다.
새로운 도메인은 실패로 간주해야 합니까?
아니요. 인덱스가 아직 보지 못한 도메인은 인덱스에 대한 사실일 뿐, 페이지에 대한 사실이 아닙니다. 날짜와 함께 'unknown'으로 저장하고, 편집자가 다음 갱신을 기다릴지 여부를 결정하도록 합니다.
이 규칙은 모든 얇은 응답에 적용됩니다. 누락된 데이터로 처리하고 파트너에 대한 판정으로 간주하지 마세요.
알 수 없는 응답을 별도의 목록에 로깅하여, 일반 로그에 묻히지 않고 다음 검토 시 패턴을 확인할 수 있도록 합니다.
참고할 사항
링크 데이터는 실패 개방, 알림은 실패 개방
링크 체크는 편집자와 런칭 사이의 유일한 장벽이 되어서는 안 됩니다. 페이지를 통과시키고, 건물을 태그하며, 키 소유자에게 실패를 놓칠 수 없게 만드세요.