Webhook이란?

하나의 앱/웹이 다른 어플리케이션으로 앱관련 이벤트 정보를 실시간으로 제공하기 위한 방법이라고 할 수 있다. Web Callback 또는 HTTP PUSH API로도 불린다.

 

※ 실시간이란?

- 해당 앱에서 특정 이벤트가 일어나는 즉시, 미리 지정해놓은 URL을 통해 다른 어플리케이션으로 이벤트 관련 정보를 보낸다는 의미이다.

Webhook의 정의

"A webhook in web development is a method of augmenting or altering the behavior of a web page or web application with custom callbacks." (Wikepedia)

 

원론적으로, Webhook이란 웹페이지 또는 웹앱에서 발생하는 특정 행동(이벤트)들을 커스텀 Callback으로 변환해주는 방법이다. Callback과 관련된 개념은 아래의 글에서 확인 가능하다.

 

2020/07/22 - [분류 전체보기] - 콜백[Callback] 함수란?

 

 

전형적인 API와 차별점

 일반 API 요청으로 특정 앱의 데이터 및 이벤트의 실시간 상태를 알기 위해서는 짧은 주기로 반복해서 조회 API 요청을 보내 Data의 변경이나, 이벤트 발생 여부를 알아야 한다.

 그러나, 우리가 필요한 데이터를 가지고 있는 앱이 Webhook 서비스를 제공할 경우, Webhook 설정에 우리 서비스의 요청 Url을 등록해 놓은 뒤에, Webhook 서비스로부터 특정이벤트 관련 정보(알림)를 받기까지 기다리고 있으면 된다. 그래서 Reverse API라고 불리기도 한다. 

 

Webhook 서비스를 사용하기 위해서는...

결국, Webhook 서비스를 우리 앱에서 사용하기 위해서는, 우리는 Webhook 서비스가 제공하는 정보에 맞게, Webhook 서비스가 Post 요청을 보낼 API 요청 URL을 생성하고, 해당 요청을 처리할 수 있도록 API를 설계하고, 서비스 해야한다.

그리고 해당 요청 URL은 공공 웹 또는 우리가 Data를 얻고자하는 앱이 접근할 수 있도록 설정해두어야 한다.

그리고, Webhook 서비스가 JSON 형식으로 데이터를 보내는지, XML, FORM 형식으로 보내는지를 파악하고, API 설계시 해당 포멧에 맞게 처리해야 한다.

 

Webhook 서비스 등록 후, Debugging 하기

Webhook에서 이벤트별로 보내오는 Data 형식도 파악하고, 해당 Data를 처리할 수 있는 API를 설계하고, 요청 URL도 생성하였다. 그리고, Webhook 서비스에 우리 API 요청 URL을 등록했다면, 어떻게 테스트를 할까?

당연하지만, 해당 앱에서 특정 상황(이벤트)를 고의로 발생시키고, 우리 서비스에서 어떻게 요청을 받는지 확인하는 것이다. 위의 방법이 번거롭기 때문에, Webhook을 테스트해볼 여러가지 서비스들이 존재한다.

 

Tip. Webhook을 테스트해볼 수 있는 서비스들

RequestBin, PostMan, Ngrok, Runscope

 

Webhook Provider와 Consumer

Webhook Provider는 Webhook Service를 제공하는 앱/웹을 의미한다.

Webhook Consumer는 Webhook Service로부터 데이터를 제공받는 앱/웹을 의미한다.

 

Webhook의 보안

누군가 우리 서비스의 요청 URL을 알고, 악의적인 데이터를 담아서 전송한다면, 어떻게 될까?

이것을 방지하려면 어떻게 해야할까?

- 가장 쉬운 방법은 TLS 연결(Https 통신)을 강제하는 방법이 있다. 

- 두번째로는, URL에 Auth 토큰을 추가로 붙여서 보내는 방식이 있다. 기타 방식도 있지만, 이하 생략.

 

Tip. HTTP와 HTTPS

- HTTP 통신은 전달하는 Data의 Text를 그대로 알 수 있다고 한다면, HTTPS 통신은 통신 내용이 암호화 된다는 차이점이 있다.

- HTTPS의 동작 방식은 아래와 같다.

- 개인 클라이언트가 서버로 Data를 전달할 경우, 클라이언트는 공개키를 얻어 데이터를 암호한 후에 전송한다. 클라이언트에서 받은 Data는 서버가 클라이언트의 개인키를 이용해 암호화하고, 저장한다.

- 반대로, 서버가 개인 클라이언트에게 Data(개인 클라이언트와 관련되어 있을 가능성이 큼)를 전달할 경우, 개인키로 암호한 정보를 전송한다.

 

Webhook 구현시, 주의사항

만약 우리 서비스가 에러로 인해 중단되었을 경우, Webhook으로부터 오는 데이터는 영원히 유실될 수 있다.

더불어, 일시적으로 우리 서비스가 Webhook으로부터 오는 요청에 대하여 처리했으나, response를 제대로 보내지 못했을 경우, webhook 서비스가 response를 확인하고, 동일한 data를 다시 보낼 수 있는 가능성이 있다.

 

그러므로, Webhook provider가 response에 대해 어떻게 반응할지 이해하고, 그것에 맞는 대처를 해주어야 한다.

또한 Webhook 서비스가 너무 많은 Event를 발생시킬 경우, 우리 서비스에 대한 DDOS 공격이 될 수도 있다는 점을 숙지하고 있어야 한다.

 

# 출처

- What is Webhook?[SendGrid]

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기