본문 바로가기
코딩 일반

웹훅(Webhook)

by 라빅군 2023. 6. 22.

폴링 VS 웹훅

 

웹훅의 개념

웹훅(Webhook)이란 한 시스템에서 다른 시스템으로 실시간 정보를 전송하는 방법이다. 웹훅을 통해 하나의 서비스가 특정 이벤트(예: 새로운 사용자 등록, 데이터베이스에 행 추가 등)가 발생했을 때 다른 서비스에 즉시 알릴 수 있다.

웹훅은 '역방향 API' 또는 'HTTP(S) 콜백'으로도 알려져 있다. 웹훅은 일반적으로 HTTP POST 요청 형태로 데이터를 보낸다. 이 요청은 일반적으로 JSON 또는 XML 형식으로 이벤트 데이터를 포함하고 있다.

웹훅을 사용하면 한 서비스가 다른 서비스의 API를 주기적으로 폴링(polling, 즉 주기적으로 데이터를 요청하는 것) 할 필요가 없어진다. 대신 웹훅은 필요한 데이터를 실시간으로 제공하여 더 효율적이고 반응성이 좋은 시스템을 만들 수 있다.

웹훅과 일반적인 API의 차이점

웹훅과 일반적인 API 호출의 가장 큰 차이점은 "누가 초기 요청을 시작하는가"에 있다.

일반적인 API 호출: 클라이언트(시스템, 서비스, 사용자 등)가 서버에 데이터를 요청하거나 서버의 데이터를 변경하도록 요청하는 방식이다. 클라이언트는 주소(URL), 메소드(GET, POST 등), 헤더, 본문 등 요청의 모든 세부 사항을 정의한다. 서버의 상태가 변경되더라도 클라이언트가 직접 API를 호출하여 그 정보를 받아와야 한다.

웹훅: 서버가 클라이언트에게 데이터를 보내는 방식이다. 웹훅은 서버에서 일어나는 이벤트(데이터베이스의 변경, 새로운 사용자 등록 등)에 기반하여 서버가 클라이언트에게 알림을 보낸다. 이렇게 되면 클라이언트가 주기적으로 서버에 데이터를 요청하지 않아도 된다. 이벤트 발생시 바로 알려주기 때문에, 서버의 상태 변경을 실시간으로 추적할 수 있다.

결과적으로, 웹훅은 서버 상태의 실시간 모니터링이 필요한 경우나, 주기적인 폴링에 의한 서버 부하를 줄이고 싶은 경우에 유용하게 사용할 수 있다.

웹훅을 이용한 데이터 전송 방법

웹훅을 처리하는 서버의 코드를 보여드릴 수 있다. 다음은 Node.js의 Express 프레임워크를 사용한 웹훅 처리 예제이다.

 

const express = require('express');
const app = express();
const bodyParser = require('body-parser');

// body-parser를 이용하여 request의 body를 json 형태로 해석하도록 설정
app.use(bodyParser.json());

app.post('/webhook', (req, res) => {
  console.log('Received data from webhook:', req.body);

  // 데이터를 정상적으로 받았음을 알리기 위해 200 OK response를 보냄
  res.sendStatus(200);

app.listen(3000, () => {
  console.log('Webhook server is listening on port 3000');
});

[참고글]
Webhooks: What are they and how are they used?

'코딩 일반' 카테고리의 다른 글

HTML 기초 - 초간단 버전  (0) 2023.06.24