전송과 재시도
Petify가 Webhook 이벤트를 전송하고, 실패를 재시도하고, 중복과 사용 중지된 엔드포인트를 다루는 방식, 그리고 전송 로그에서 재전송하는 방법
전달됨의 기준
Petify는 이벤트를 HTTPS POST로 보내고 최대 10초 동안 응답을 기다립니다.
| 엔드포인트의 응답 | 결과 |
|---|---|
10초 이내의 2xx 상태 | 전달됨 |
그 밖의 상태(3xx, 4xx, 5xx) | 실패한 시도 |
| 10초 안에 응답 없음, 또는 연결 오류 | 실패한 시도 |
Petify는 리다이렉트를 따라가지 않습니다. 301이나 302 응답은 실패한 시도이므로 최종 URL을 등록하세요.
무거운 작업은 응답한 뒤에 하세요. 서명을 검증하고, 이벤트를 저장하거나 큐에 넣고, 2xx로 응답한 다음 백그라운드에서 처리하면 됩니다.
재시도
시도가 실패하면 Petify는 정해진 일정에 따라 재시도합니다. 각 대기 시간은 실패한 시도를 기준으로 하며 약 ±10% 편차가 있습니다.
| 시도 | 전송 시점 |
|---|---|
| 1 | 작업이 끝나는 즉시 |
| 2 | 1회차 실패 1분 후 |
| 3 | 2회차 실패 5분 후 |
| 4 | 3회차 실패 30분 후 |
| 5 | 4회차 실패 2시간 후 |
| 6 | 5회차 실패 6시간 후 |
| 7 | 6회차 실패 12시간 후 |
7회차도 실패하면 전송 상태가 실패가 되고, Petify는 그 이벤트를 더 이상 자동으로 보내지 않습니다. 그래도 직접 재전송할 수 있습니다. 어느 시도든 성공하면 남은 재시도는 취소됩니다.
재시도를 기다리는 동안 엔드포인트를 삭제하면, Petify는 해당 전송을 삭제하고 더 이상 시도하지 않습니다.
최소 한 번 전송과 중복
전송은 최소 한 번(at-least-once) 입니다. 응답이 늦게 도착해 Petify가 재시도하거나 로그에서 재전송하는 경우처럼, 엔드포인트가 같은 이벤트를 두 번 이상 받을 수 있습니다.
webhook-id로 중복을 걸러 내세요. 모든 시도, 모든 재전송, 이벤트를 받는 모든 엔드포인트에서 같은 값입니다. 처리한 ID를 저장해 두고, 반복되면 건너뛰세요.- 엔드포인트가 여러 개라면 엔드포인트별로 중복을 걸러 내세요.
- 순서는 보장되지 않습니다. 특히 재시도 뒤에는 이벤트가 순서와 다르게 도착할 수 있습니다. 한 작업의 이벤트가 다른 작업의 이벤트보다 먼저 도착한다고 가정하지 마세요.
- 드물게 작업이 다시 실행되면
*.failed가 먼저 오고*.succeeded가 나중에 올 수 있습니다. 기준은 계속 작업 폴링 엔드포인트이므로 그 최신 응답을 따르세요.
사용 중지된 엔드포인트와 건너뛴 이벤트
점검 중처럼 필요할 때 사용 스위치로 엔드포인트를 끌 수 있습니다.
- 엔드포인트가 사용 중지 상태인 동안 해당 이벤트는 전송 로그에 건너뜀 상태로 기록되고, Petify는 이벤트를 보내지 않습니다.
- 재시도를 기다리는 전송이 있을 때 엔드포인트를 끄면, Petify는 시도를 멈추고 그 전송을 건너뜀으로 표시합니다.
- 엔드포인트를 다시 켜도 건너뛴 이벤트는 자동으로 전송되지 않습니다. 전송 로그에서 직접 재전송하세요.
- 엔드포인트가 사용 중지 상태여도 테스트 이벤트 보내기는 동작합니다.
전송 로그에서 재전송하기
Console에서 엔드포인트를 열면 전송 로그가 보입니다. 이 엔드포인트로 보낸 이벤트를 최신순으로 보여 주며, 상태, 이벤트 유형, 기간으로 필터링할 수 있습니다.
재전송하려면 다음 중 하나를 하세요.
- 전송 항목의 재전송을 클릭합니다.
- 항목을 최대 100개 선택하고 선택 항목 재전송을 클릭합니다.
재전송 규칙은 다음과 같습니다.
- 상태가 전달됨, 실패, 건너뜀인 전송을 재전송할 수 있습니다. 대기 상태의 전송은 재전송할 수 없습니다.
- 엔드포인트가 사용 설정되어 있어야 합니다. 먼저 사용 설정하세요.
- 재전송은 원래 본문과 같은
webhook-id로 한 번만 시도합니다. 재시도 일정을 다시 시작하지 않습니다. 중복으로 보고 평소처럼 걸러 내세요. - 시도 후 엔드포인트가
2xx로 응답하면 전송이 전달됨, 아니면 실패가 됩니다. - 선택한 항목 중 하나라도 재전송할 수 없으면 Petify는 아무것도 재전송하지 않고, 고쳐야 할 항목을 알려 줍니다.
전송 로그
로그에는 전송 내역이 30일 동안 보관되고, 이후 시도 기록과 함께 삭제됩니다. 엔드포인트를 삭제하면 그 로그도 삭제됩니다.
| 상태 | 의미 |
|---|---|
| 대기 | 전송 시도 또는 재시도를 기다리는 중입니다. |
| 전달됨 | 엔드포인트가 2xx 상태로 응답했습니다. |
| 실패 | 모든 시도가 실패했거나 재전송이 실패했습니다. |
| 건너뜀 | 엔드포인트가 사용 중지 상태여서 보내지 않았습니다. 필요하면 직접 재전송하세요. |
전송 항목을 열면 이벤트 본문과 모든 시도 이력을 볼 수 있습니다. 각 시도에는 시각, 상태 코드, 오류, 소요 시간, 응답 본문의 처음 1KB가 표시됩니다. 엔드포인트가 이벤트를 거부할 때 응답 본문에 이유가 드러나는 경우가 많으니, 짧은 오류 메시지를 반환하세요.
테스트 이벤트는 로그에 기록되지 않습니다.
놓친 이벤트 복구하기
엔드포인트가 재시도 일정보다 오래 중단되었거나, 전송이 실패 또는 건너뜀 상태라면 다음 방법으로 복구하세요.
- 보관 기간 30일 안이라면 로그에서 해당 전송을 재전송합니다.
- 놓친 작업의 폴링 엔드포인트를 조회합니다. 등록/검증/식별을 참고하세요.
jobId로 폴링하는 방법은 이벤트가 전달되었는지와 관계없이 항상 사용할 수 있습니다.