웹훅이란?

심재철
3 min readAug 13, 2020

위 사진은 웹훅을 정말 잘 설명해주고 있다.

Polling이란 우리의 앱에서 엔드포인트에 이벤트가 발생했는지 주기적으로 요청을 보내는 방식이라 비효율적이지만,

webhook은 엔드포인트에서 발생한 이벤트가 우리의 앱에 수신되는 형태이다. 우리의 앱은 그 이벤트에 대한 처리를 한 다음에 다시 엔드포인트에 응답을 내어주면 된다.

webhook

어떤 두 시스템이 있다고 해보자. 한 시스템에서 발생하는 이벤트가 다른 시스템에 전달되어 처리되어야 한다고 할 때 웹훅을 사용하게 된다.

예를들어, ATM기에서 현금을 2만원을 뽑았을때 SMS를 관리하는 시스템과 고객의 계좌를 관리하는 시스템 2개가 서로 긴밀하게 연결되어야 한다. 이때 웹훅을 사용한다. 고객 계좌 관리 시스템에서 현금이 인출되었다는 이벤트가 발생하여(웹훅 엔드포인트) SMS 시스템에서 그 이벤트를 수신하여 고객에게 ‘현금 2만원이 출금되었습니다’ 라는 문자를 쏴줄 수 있다.

웹훅은 한마디로 이벤트에 대한 이벤트 핸들러다.

이 이벤트 핸들러안에서 다른 시스템으로 어떤 이벤트가 발생했는지에 대한 정보를 JSON으로 POST 요청을 보내는것이다.

webhook endpoint

웹훅이 이벤트 핸들러라면 웹훅 엔드포인트는 그 발생한 이벤트가 어디로 전달되어야 하는가에 대한것이다. 한마디로 이벤트의 목적지라고 보면 된다.

슬랙 api에는 incoming webhooks이라는게 있다.

외부 시스템에서 슬랙으로 post message를 쏴주기 위한 간단한 방법이라고 한다. 즉, 외부 시스템에서 어떤 이벤트가 발생하여 웹훅이 실행되면 그 웹훅 내부에서 슬랙의 웹훅 엔드포인트로 post 요청을 쏘라는 말이다. 그러면 슬랙 채널에 특정 메세지를 입력할 수 있다.

하지만 그렇게 하기 위해서는 bot user가 필요하기 때문에 만약에 앱에 bot user가 없으면 우리가 새로 하나 추가해주겠다는 말을 하고 있다.

slack의 서로 다른 workspace에 앱이 설치 될때마다 webhook url이 새로 할당된다고 한다. 어찌보면 당연하다. workspace는 각기 다른 사람에 의해 생성됬으니까 말이다.

curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/.../.../...대략 이런 형태로 슬랙 webhook endpoint에 POST요청을 보내면 해당 워크스페이스의 채널에 Hello, World!가 찍힌다.

--

--