Webhook

이하루·2025년 2월 8일

운용되는 시스템을 유저가 사용하다가 문제가 발생하면, 개발자는 어떻게 알 수 있을까? 아무런 대책없이 그대로 운용하게 된다면 개발자는 유저의 문제 발생 문의를 보고서야 로그를 확인하고 수정을 하게 될 것이다. 이러한 상황을 방지하기 위한 방법 중 하나가 Webhook을 사용하는 것이다.

이번 글에서는 특정 이벤트가 발생했을 때, Slack, Google Chat과 같은 메시지 플랫폼에서 실시간으로 알림을 받을 수 있는 Webhook이라는 기능에 대해 알아보고 실제 구현하는 방법까지 기술하고자 한다.

❓ Webhook

웹훅은 웹 개발에서 사용자 정의 콜백을 사용하여 웹 페이지 또는 웹 애플리케이션의 동작을 강화하거나 변경하는 방법이다. - 위키피디아

Webhook은 서버간 데이터를 송수신하는 방식으로, 지속적으로 요청을 보내는 폴링(API통신) 과는 다르게 특정 이벤트가 발생할 때에 서버에 요청을 보내는 방식이다.

폴링 웹훅
방식 클라이언트가 주기적으로 서버에 요청 송신 특정 이벤트 발생시, 서버에 송신
응답 시간 요청 주기마다 지연 발생 가능성 있음 실시간 데이터 전송 가능
효율성 주기적으로 요청하기에 비효율 이벤트가 발생할 때에만 요청하기에 효율
사용 예시 하드웨어 부팅 체크 이벤트 알림

🔔 구현

특정 이벤트가 발생했을 때, Google Chat의 Webhook 방식을 통한 실시간 알림을 구현해보자.

1. Webhook URL 생성

아래 링크의 "이용 방법"을 참고하여 알림을 받고자 하는 채팅방의 Webhook을 생성한다.

Google Chat Webhook URL 생성 방법

2. 이벤트 발생 로직 구현

$webhookUrl = {생성한 Webhook URL};
$message = array("text" => {송신하고자 하는 메시지});

// cURL 초기화 및 옵션 세팅
$ch = curl_init($webhookUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

// 요청 실행
$response = curl_exec($ch);
// cURL 종료
curl_close($ch);
// 응답 로그 출력
Log::info('google chat webhook 응답 : ' . $response);

3. 테스트

이벤트가 발생할 때마다 지정한 채팅방에 아래의 알림이 송신되는 것을 확인할 수 있었다.

🌟 결론

이벤트가 발생할 때마다 송신되는 방식인 Webhook. 이번 글에서는 간단한 에러 알림 송신 로직을 작성했지만, 쉘 스크립트를 활용한 프로젝트 배포 알림 공유, 스케줄러를 활용한 정기적인 작업 메시지 송신 등 생각보다 사용할 수 있는 곳이 많다고 생각되어지기에..잘 기억해놓았다가 필요할 때 꼭꼭 사용하도록 하자!

profile
어제보다 더 나은 하루

0개의 댓글