이 글에서는 웹훅(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를 사용하지만, 누가 요청을 보내는지와 요청 타이밍에서 차이가 있습니다.
요약:
이 글이 웹훅의 개념과 구현 방법을 이해하는 데 도움이 되었기를 바랍니다. Happy Coding! 😄