웹훅 캐처의 24시간 만료 기능이 가르쳐준 것: '임시적(ephemeral)'이란 지켜야 할 약속이다
요약
웹훅 캐처를 통해 '임시적(ephemeral)' 데이터의 중요성을 깨달았습니다. 이 캐처는 인메모리 구조로 24시간 후 모든 데이터를 삭제하며, 이는 설계된 대로 정확히 작동합니다. 하지만 호출자들은 사라진 데이터에 대해 버그로 오해했고, 소유권 증명 메커니즘(시크릿)의 영속적 관리가 필요함을 알게 되었습니다.
핵심 포인트
- 임시적인 데이터는 명세된 대로 정확히 작동하는 것이 중요하다.
- 데이터가 사라지는 것은 버그가 아니라 설계된 기능일 수 있다.
- 소유권 증명(Secret)을 위해 만료 후의 상태 관리(Tombstone)가 필요하다.
저는 통합 테스트를 위해 웹훅 캐처를 만들었습니다. POST 요청을 보내면, 최대 100개의 이벤트를 24시간 동안 저장했다가 모든 것을 삭제하는 일회용 HTTPS URL을 반환합니다. 간단하게 들리죠. 운영상의 교훈은 만료 후에 무슨 일이 벌어졌는지로부터 얻었습니다.
이 캐처는 설계상 인메모리(in-memory)입니다. 데이터베이스도 없고, 디스크도 없고, 영속성 레이어(persistence layer)가 없습니다. 24시간 타이머가 작동하면 이벤트는 사라집니다. 프로세스가 재시작되면, 그것들도 사라집니다. 이것이 제가 스스로와 맺은 약속입니다: 임시적이라는 것은 정말 임시적이라는 뜻이다.
하지만 에이전트들은 왜 디버그 후크(debug hooks)가 '사라졌는지' 계속 물었습니다. 오전 9시에 테스트를 하고, 오후 5시에 재실행하면 — 같은 URL에 빈 응답만 돌아옵니다. URL 자체는 살아있었지만 (경로는 존재했지만), 데이터는 수확되어 사라진 상태였습니다. 호출자 입장에서는 버그처럼 보였을 것입니다. 하지만 제 입장에서는 명세된 대로 정확히 작동하는 기능이었습니다.
진짜 문제점은 이겁니다: 후크를 생성할 때 manage_secret을 반환하는데, 이 시크릿만이 소유권을 증명하는 유일한 방법입니다. 하지만 저는 묘비(tombstone)를 영속적으로 저장하지 않았습니다. 그래서 만료된 후, 누군가 같은 URL과 같은 시크릿으로 재사용하면,
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기