글을 불러오는 중…
글을 불러오는 중…
웹훅(Webhook) 이해와 구현 예제 🚀 이 글에서는 웹훅(Webhook)의 개념과 동작 원리, 그리고 REST API와의 차이점을 알아보고 Python을 이용한 웹훅 구현 예제를 소개합니다. 목차 1. 웹훅(Webhook) 개념 2. 웹훅 동작 원리 3. Python 코드 예제 3…
이 글에서는 **웹훅(Webhook)**의 개념과 동작 원리, 그리고 REST API와의 차이점을 알아보고 Python을 이용한 웹훅 구현 예제를 소개합니다.
웹훅은 특정 이벤트가 발생했을 때 미리 등록된 URL로 자동으로 데이터를 전송하는 이벤트 기반 통신 방식입니다. 즉, 어떤 일이 생기면 자동으로 알림을 보내주는 기능이라고 할 수 있습니다. 🔔
주요 특징:
이벤트 기반: 이벤트가 발생하면 자동으로 호출
자동화: 별도의 클라이언트 요청 없이 서버 간 데이터 전달
효율적: 이벤트 발생 시에만 통신하여 리소스 절약
웹훅이 동작하는 기본 과정은 다음과 같습니다:
이벤트 발생: 예를 들어, GitHub에 새로운 커밋이 발생합니다. 📦
웹훅 트리거: 해당 이벤트가 발생하면 미리 설정된 URL로 HTTP POST 요청을 전송합니다.
데이터 전송: POST 요청에는 이벤트와 관련된 데이터(예: 커밋 정보)가 JSON 형식으로 담겨 있습니다.
서버 처리: 웹훅 수신 서버는 전달받은 데이터를 처리하고, 필요한 작업(예: CI/CD 빌드, 알림 전송)을 수행합니다.
응답 반환:
요청을 처리한 후, 서버는 클라이언트에 응답(예: 200 OK)을 반환합니다.
다음은 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)
실행 방법:
pip install flask
python webhook_server.py
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()
실행 방법:
pip install requests
python simulate_new_commit_event.py
이 코드를 실행하면, new_commit 이벤트가 발생했다고 가정하고 웹훅 서버에 이벤트 정보를 전송하게 됩니다.
두 방식 모두 HTTP를 사용하지만, 누가 요청을 보내는지와 요청 타이밍에서 차이가 있습니다.
클라이언트 주도: 사용자가 직접 요청을 보내어 데이터를 조회하거나 조작합니다. 예: 웹 브라우저에서 GET, POST, PUT, DELETE 요청
동기적 요청: 클라이언트는 요청 후 응답을 기다립니다. 🖱️
서버 주도 (이벤트 기반): 특정 이벤트 발생 시, 미리 등록된 URL로 서버가 자동으로 요청을 보냅니다. 예: GitHub에서 커밋 발생 시 CI/CD 서버에 알림 전송
비동기적 자동 호출: 별도의 클라이언트 요청 없이 이벤트에 따라 자동으로 작동합니다. 🔔
요약:
REST API: 클라이언트가 필요할 때 요청
웹훅: 서버가 이벤트 발생 시 자동으로 요청
이 글이 웹훅의 개념과 구현 방법을 이해하는 데 도움이 되었기를 바랍니다. Happy Coding! 😄