Blog
웹훅 | Gemini API | Google AI for Developers
2026.05.12
·Web·by igor#API#Gemini API#Google AI#LLM#Webhook
핵심 포인트
- 1Gemini API 웹훅은 비동기식 또는 장기 실행 작업 (LRO)이 완료될 때 서버에 실시간 알림을 푸시하여, 폴링 없이 상태 업데이트를 받을 수 있도록 지원합니다.
- 2웹훅은 프로젝트 수준에 등록되어 대칭 `signing_secret`으로 검증하는 정적 웹훅과, 특정 작업 요청에 바인딩되어 비대칭 `JWKS` 서명으로 검증하는 동적 웹훅 두 가지 방식으로 구성됩니다.
- 3수신 서버는 `HTTP POST` 요청으로 전송되는 씬 페이로드(thin payload)를 처리하고 `webhook-timestamp`로 재생 공격을 방지하며, `webhook-id`로 중복을 처리하는 등 안정적인 운영을 위한 모범 사례를 따르는 것이 권장됩니다.
이 문서는 Gemini API에서 비동기식 또는 장기 실행 작업(LRO) 완료 시 서버에 실시간 알림을 푸시하는 웹훅(Webhook) 기능에 대해 상세히 설명합니다. 웹훅은 상태 업데이트를 위한 API 폴링을 불필요하게 하여 지연 시간과 오버헤드를 줄입니다.
작동 방식 및 웹훅 유형:
Gemini API는 이벤트 트리거 시 리스너 URL에 HTTP POST 요청을 전송하여 작동합니다. 웹훅은 크게 두 가지 유형으로 나뉩니다.
- 정적 웹훅 (Static Webhooks): 프로젝트 수준에서 구성되는 엔드포인트로, 대칭 보안 비밀(symmetric security secret)을 사용하여 페이로드의 무결성을 확인합니다. 이는 전역적인 통합(예: Slack 알림, 데이터베이스 동기화)에 적합합니다.
- 생성 및 관리:
webhooks.create메서드를 통해 웹훅을 생성하며, 이때 발급되는new_signing_secret은 서명 확인에 필수적이므로 안전하게 저장해야 합니다.webhooks.get,webhooks.list,webhooks.update,webhooks.delete메서드를 사용하여 웹훅을 조회, 나열, 업데이트, 삭제할 수 있습니다. - 서명 보안 비밀 순환 (Signing Secret Rotation):
webhooks.rotate_signing_secret메서드를 통해 보안 비밀을 순환할 수 있으며, 이전 보안 비밀의 취소 시점을revocation_behavior파라미터로 설정할 수 있습니다(예:REVOKE_PREVIOUS_SECRETS_AFTER_H24). 새로운 보안 비밀은 한 번만 반환되므로 즉시 저장해야 합니다. - 서버에서의 요청 처리: Gemini API는 구독된 이벤트 발생 시 웹훅 URI로 HTTP POST 요청을 전송합니다. 리스너 엔드포인트는 몇 초 이내에 2xx 상태 코드로 응답해야 하며, 실패 시 지수 백오프(exponential backoff)를 사용하여 24시간 동안 재시도합니다.
- 페이로드 확인: 수신된 요청은
Webhook-Signature,Webhook-Timestamp,Webhook-Id헤더를 포함하며, 미리 저장된 대칭SIGNING_SECRET을 사용하여 페이로드의 서명을 검증해야 합니다. 이 과정은standardwebhooks라이브러리를 통해 예시로 제공됩니다. - 페이로드 구조: 웹훅은 대역폭 효율성을 위해 "씬 페이로드 모델(thin payload model)"을 사용하며, 원시 출력 파일 대신 상태 세부 정보와 결과 포인터(URI)가 포함된 스냅샷을 전송합니다. 페이로드는
type,version,timestamp,data필드를 포함합니다.data필드에는 이벤트 유형에 따라id,output_file_uri,error_code,error_message등의 항목이 포함됩니다. 예를 들어,batch.succeeded이벤트는id와output_file_uri를 제공합니다.
- 페이로드 확인: 수신된 요청은
- 생성 및 관리:
- 동적 웹훅 (Dynamic Webhooks): 특정 작업 호출의 구성 페이로드에서 웹훅 URL을 전달하는 요청 수준 재정의(request-level override)입니다. 에이전트 오케스트레이션 큐와 같이 특정 작업을 전용 엔드포인트로 라우팅하는 데 적합합니다.
- 주요 차이점: 대칭 보안 비밀 대신 비대칭 공개 키 JWKS(JSON Web Key Set) 서명을 활용합니다.
- 요청 제출: 비동기식 작업을 트리거할 때(예:
batches.create), 요청의config내에webhook_config객체를 추가하여 동적 웹훅 URI와 선택적user_metadata를 지정합니다. - 서명 확인 (JWKS): 수신된 동적 웹훅 요청의
Webhook-Signature헤더는 JSON 웹 토큰(JWT)을 포함합니다. 리스너는 JWT에서kid(Key ID)를 추출하고, Google의 공개 인증서 엔드포인트(https://generativelanguage.googleapis.com/.well-known/jwks.json)에서 해당 공개 키를 가져와 서명을 확인해야 합니다. 서명은RS256알고리즘과 구성된audience를 사용하여 검증됩니다.
권장사항:
- 엄격한 재생 공격 방지: 모든 요청에 포함된
webhook-timestamp헤더를 확인하여 5분보다 오래된 페이로드는 거부해야 합니다. - 비동기식 처리: 유효한 서명이 감지되면 즉시 2xx OK로 응답하고, 내부적으로 파싱 작업을 대기열에 추가하여 리스너의 대기 시간을 줄여야 합니다.
- 중복 삭제 처리 (Deduplication): 표준 웹훅은 "최소 한 번(at least once)" 전송을 보장하므로, 일관된
webhook-id헤더를 사용하여 중복 요청을 처리해야 합니다.