웹훅(Webhook) 이해와 구현 예제 🚀

엔케이·2025년 2월 11일
0
post-thumbnail

웹훅(Webhook) 이해와 구현 예제 🚀

이 글에서는 웹훅(Webhook)의 개념과 동작 원리, 그리고 REST API와의 차이점을 알아보고 Python을 이용한 웹훅 구현 예제를 소개합니다.


목차

  1. 웹훅(Webhook) 개념
  2. 웹훅 동작 원리
  3. Python 코드 예제
  4. REST API와 웹훅의 차이점
  5. 참고 자료

1. 웹훅(Webhook) 개념

웹훅은 특정 이벤트가 발생했을 때 미리 등록된 URL로 자동으로 데이터를 전송하는 이벤트 기반 통신 방식입니다.
즉, 어떤 일이 생기면 자동으로 알림을 보내주는 기능이라고 할 수 있습니다. 🔔

주요 특징:

  • 이벤트 기반: 이벤트가 발생하면 자동으로 호출
  • 자동화: 별도의 클라이언트 요청 없이 서버 간 데이터 전달
  • 효율적: 이벤트 발생 시에만 통신하여 리소스 절약

2. 웹훅 동작 원리

웹훅이 동작하는 기본 과정은 다음과 같습니다:

  1. 이벤트 발생:
    예를 들어, GitHub에 새로운 커밋이 발생합니다. 📦

  2. 웹훅 트리거:
    해당 이벤트가 발생하면 미리 설정된 URL로 HTTP POST 요청을 전송합니다.

  3. 데이터 전송:
    POST 요청에는 이벤트와 관련된 데이터(예: 커밋 정보)가 JSON 형식으로 담겨 있습니다.

  4. 서버 처리:
    웹훅 수신 서버는 전달받은 데이터를 처리하고, 필요한 작업(예: CI/CD 빌드, 알림 전송)을 수행합니다.

  5. 응답 반환:
    요청을 처리한 후, 서버는 클라이언트에 응답(예: 200 OK)을 반환합니다.


3. Python 코드 예제

3.1 웹훅 수신자: Flask 서버

다음은 Flask를 사용하여 웹훅을 수신하는 서버 코드입니다.
/webhook 엔드포인트에서 POST 요청을 받아 데이터를 처리합니다.

# webhook_server.py
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    data = request.get_json()
    print("Webhook 수신 데이터:", data)
    # 여기서 추가 작업(예: 빌드, 테스트, 알림 전송 등)을 수행할 수 있습니다.
    return jsonify({'status': 'success'}), 200

if __name__ == '__main__':
    app.run(port=5000, debug=True)

실행 방법:

  1. Flask 설치:
    pip install flask
  2. 파일을 저장하고 실행:
    python webhook_server.py

3.2 웹훅 발신자 및 new_commit 이벤트 시뮬레이션

아래 코드는 new_commit 이벤트가 발생했을 때, 웹훅 서버로 POST 요청을 보내는 예제입니다.

# simulate_new_commit_event.py
import requests

def simulate_new_commit_event():
    webhook_url = 'http://localhost:5000/webhook'
    payload = {
        "event": "new_commit",
        "repository": "example-repo",
        "commit_id": "123abc456",
        "author": "dev_user",
        "message": "Fixed a bug in the authentication module."
    }
    response = requests.post(webhook_url, json=payload)
    print("응답 상태:", response.status_code)
    print("응답 내용:", response.json())

if __name__ == "__main__":
    simulate_new_commit_event()

실행 방법:

  1. Requests 라이브러리 설치:
    pip install requests
  2. 파일을 저장하고 실행:
    python simulate_new_commit_event.py

이 코드를 실행하면, new_commit 이벤트가 발생했다고 가정하고 웹훅 서버에 이벤트 정보를 전송하게 됩니다.


4. REST API와 웹훅의 차이점

두 방식 모두 HTTP를 사용하지만, 누가 요청을 보내는지요청 타이밍에서 차이가 있습니다.

REST API

  • 클라이언트 주도:
    사용자가 직접 요청을 보내어 데이터를 조회하거나 조작합니다.
    예: 웹 브라우저에서 GET, POST, PUT, DELETE 요청
  • 동기적 요청:
    클라이언트는 요청 후 응답을 기다립니다. 🖱️

웹훅(Webhook)

  • 서버 주도 (이벤트 기반):
    특정 이벤트 발생 시, 미리 등록된 URL로 서버가 자동으로 요청을 보냅니다.
    예: GitHub에서 커밋 발생 시 CI/CD 서버에 알림 전송
  • 비동기적 자동 호출:
    별도의 클라이언트 요청 없이 이벤트에 따라 자동으로 작동합니다. 🔔

요약:

  • REST API: 클라이언트가 필요할 때 요청
  • 웹훅: 서버가 이벤트 발생 시 자동으로 요청

5. 참고 자료


이 글이 웹훅의 개념과 구현 방법을 이해하는 데 도움이 되었기를 바랍니다. Happy Coding! 😄

profile
FE 개발자

0개의 댓글