스튜디오 사진은 완성되기까지 조금 시간이 걸려요. 시스템이 몇 초마다 LotShow에 다 됐는지 물어볼 수도 있고, LotShow가 완성되는 순간 시스템에 알려 줄 수도 있어요. 두 번째 방식이 웹훅이고, LotShow API는 이 방식으로 결과를 전달해요.
폴링 vs 웹훅
폴링은 상태가 바뀔 때까지 코드가 타이머로 GET /v1/jobs/{id}를 호출하는 방식이에요. 작동은 하지만 대부분의 호출은 새 소식 없이 돌아오고, 처리하는 차가 많을수록 호출도 늘어나요.
웹훅은 이걸 뒤집어요. 작업을 만들 때 LotShow에 URL을 알려 주면, 작업이 끝났을 때 LotShow가 그 URL로 결과를 담은 HTTPS POST를 보내요. 할 일이 생기기 전까지 시스템은 아무것도 하지 않아도 돼요.
이벤트
- job.completed: 스튜디오 사진이 완성됐어요. 완성된 이미지의 URL이 함께 와요.
- job.failed: 사진을 완성하지 못했고, 크레딧은 환불됐어요.
- credits.low: 공유 잔액이 20크레딧 아래로 떨어졌어요.
엔드포인트마다 받을 이벤트를 고를 수 있어서, 재고 시스템은 완성된 사진만 받고 결제 도구는 잔액 부족 알림만 받게 할 수 있어요.
전달되는 내용
완성된 작업은 작은 JSON 본문으로 도착해요.
{
"event": "job.completed",
"created_at": "2026-10-14T09:41:40.000Z",
"id": "Hn4kR2pXq8VbT1sLw0Za",
"backdrop": "white-hall",
"vehicle_id": "pQ7mT2vK9cLx4RbN1sHd",
"name": "stock-4471",
"output_url": "https://firebasestorage.googleapis.com/v0/b/…/default.jpg?alt=media&token=…",
"seconds": 62,
"credits_left": 319
}id는 작업을 만들 때 돌려받은 작업 id예요. 그래서 작업 id를 시스템의 재고 번호 옆에 저장해 두면 좋아요. 웹훅은 어떤 작업이 끝났는지 알려 주고, 기록은 그게 어떤 차인지 알려 줘요.
좋은 엔드포인트 만들기
- 빠르게 응답하세요. 이벤트가 도착하면 바로 2xx 상태로 응답하고, 이미지 다운로드 같은 실제 작업은 백그라운드에서 하세요.
- 중복을 예상하세요. LotShow는 엔드포인트가 응답할 때까지 다시 보내기 때문에, 타임아웃 뒤 등에 같은 전달이 두 번 이상 올 수 있어요. 다시 처리하기 전에 이미 처리한 이벤트인지 확인하세요.
- 순서를 가정하지 마세요. 1초 간격으로 보낸 두 작업도 어느 쪽이든 먼저 끝날 수 있어요. 도착 시간이 아니라 작업 id로 결과를 맞추세요.
- 서명을 확인하세요. 모든 전달은 설정에 있는 계정의 서명 시크릿으로 서명되고, 서명은
webhook-id,webhook-timestamp,webhook-signature헤더에 담겨 와요(Standard Webhooks 방식). 검증되지 않는 것은 모두 거부하세요. - 모두 기록하세요. 모든 전달의 원본 본문과 시간을 남겨 두세요. 뭔가 이상해 보일 때 가장 먼저 보게 될 곳이 로그예요.
운영 전에 테스트하기
설정의 각 엔드포인트에는 테스트 보내기 버튼이 있고, API에는 POST /v1/webhooks/{id}/test가 있어요. 둘 다 엔드포인트로 샘플 이벤트를 보내서, 크레딧을 쓰지 않고 핸들러를 확인할 수 있어요. 엔드포인트가 정확히 무엇을 받는지 보려면 요청 검사 도구나 로컬 터널을 쓰면 편해요.
실패한 작업은 비용이 없어요
job.failed가 도착했을 때 크레딧은 이미 잔액으로 돌아가 있어요. 같은 사진을 다시 보내지 말고 그 차를 재촬영 대상으로 표시하세요.
개발을 시작해 볼까요? API 키는 프로와 엘리트 요금제에 포함돼요. 설정의 API 키에서 만들 수 있어요.
