Webhook으로 Github와 Discord 연동

silberbulletsilberbullet
6 min read

현재 사이드 프로젝트에서 선택한 협업 도구는 Discord와 Github입니다. 소통 도구로 Slack을 많이 사용하지만 Slack 무료 버전은 메시지가 90일까지만 보존되는 단점이 있어 Discord 채택을 하게 됐습니다.

Github에서 발생하는 이슈 등록, PR 생성 및 기타 활동을 Discord 채널로 자동 알림을 받고자 합니다. 특히 온라인으로 진행되는 사이드 프로젝트에서는 소통과 협업의 중요성이 크며, Webhook을 활용한 Discord와 GitHub의 통합은 실시간 알림을 통해 개발자 협업의 큰 편리함을 제공합니다.

❓ Webhook 이란 뭘까요

Wikipedia는 Webhook을 다음과 같이 정의했습니다.

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

“웹페이지 또는 웹앱에서 발생하는 특정 행동들을 커스텀 Callback으로 변환해주는 방법이다.”

쉽게 풀이하면, 웹에서 발생하는 특정 행동(이벤트)을 감지하여 사용자가 원하는 작업을 자동으로 실행해주는 기술을 뜻합니다.

Webhook은 이벤트 발생 → 이벤트 정보 전송 → 원하는 작업 실행이라는 단순한 흐름으로 작동합니다. 이와 같은 동작이 가능하기 위해서는 두 개의 주요 개체가 필요합니다

: Webhook Provider와 Webhook Consumer

  • Webhook Provider는 이벤트 발생에 따른 이벤트 정보를 전송하는 앱/웹을 의미합니다.

  • Webhook Consumer는 Provider에 제공한 이벤트 정보를 받아 처리하는 앱/웹을 의미합니다.

현재 문서에서는 Github가 Webhook Provider, Discord가 Webhook Consumer로 되겠네요!

Webhook의 응용성은 정말 다양합니다. 카드 결제가 완료되면 영수증을 이메일로 발송, 블로그 게시물이 작성되면 Twitter나 Facebook에 자동으로 게시 등등이 있습니다. Webhook 덕분에 다양한 분야에서 실시간 데이터 처리와 작업 자동화를 가능하게 해주어 생산성과 효율성을 크게 높입니다.

Webhook의 간단한 소개를 끝으로 본격적인 Github와 Discord 연동 해보시죠.

🔏 GitHub와 Discord를 Webhook으로 연동하는 방법

1. Discord에서 Webhook 설정

(1) Discord에서 알림을 받을 채널로 이동 후 ⚙️(설정)을 눌러 채널 설정 페이지로 이동합니다.

(2) 채널 설정 > 연동 > 웹후크 만들기 > 새 웹후크를 클릭합니다.

( 웹훅이 존재하지 않는다면 웹후크 만들기 클릭 시, 자동으로 생성됩니다! )

(3) Webhook 이름과 아바타를 설정한 후, Webhook URL을 복사합니다.

(4) Webhook URL을 복사 한 채로, 변경사항은 저장합니다.

2. GitHub에서 Webhook 설정

(1) GitHub에서 연동하려는 Repository로 이동합니다.

(2) 해당 Repository에 Settings > "Webhooks" > "Add webhook"을 클릭합니다.

(3) Discord에서 복사한 Webhook URL을 입력합니다. 반드시 주소 끝에 꼭 /github를 넣어 주세요!

(4) Payload typeapplication/json으로 설정합니다.

(5) 하위 목록에서는 GitHub에서 어떤 이벤트를 Discord로 보낼지 선택합니다.

  • SSL vertification 은 Enable SSL verificaition으로 체크합니다. ( HTTPS 보안을 강화합니다! )

  • Which events would you like to trigger this webhook?

    • Just the push event : 리포지토리에서 코드를 푸시할 때만 Webhook이 동작합니다.

    • Send me everything : 리포지토리에서 발생하는 모든 이벤트를 Webhook으로 전송합니다.

    • Let me select individual events : 사용자가 Webhook으로 받을 이벤트를 개별적으로 선택할 수 있도록 설정합니다.

Let me select individual events 목록 보기
Branch 및 Tag 관련 Branch or tag creation: 브랜치 또는 태그 생성 시 전송
Branch or tag deletion: 브랜치 또는 태그 삭제 시 전송
Branch protection configurations: 브랜치 보호 설정 활성화/비활성화 시 전송
Branch protection rules: 브랜치 보호 규칙 생성, 삭제, 수정 시 전송
Bypass 요청 Push rulesets: 푸시 규칙 우회 요청 생성, 취소, 완료, 응답 수신, 응답 해제 시 전송
Secret scanning push protections: 비밀 스캔 보호 우회 요청 생성, 취소, 완료, 응답 수신, 응답 해제. (베타)
Check 관련 Check runs: 체크 실행 생성, 요청, 재요청, 완료 시 전송
Check suites: 체크 수트 요청, 재요청, 완료 시 전송
Code 및 Commit 관련 Code scanning alerts: 코드 스캔 경고 생성, 브랜치에서 수정, 닫힘 시 전송
Commit comments: 커밋/차이에 댓글 추가 시 전송
Collaborator 관련 Collaborator add/remove/changed: 협업자 추가, 제거, 권한 변경 시 전송
Custom Properties Custom property values: 리포지토리 사용자 정의 속성 값 변경 시 전송
Dependabot 관련 Dependabot alerts: 경고 생성, 수정, 해제, 재도입 시 전송
Deploy 관련 Deploy keys: 배포 키 생성, 삭제 시 전송
Deployment statuses: 배포 상태 업데이트(API) 시 전송
Deployments: 배포 생성, 삭제 시 전송
Discussion 및 댓글 관련 Discussions: 토론 생성, 수정, 닫힘, 답변됨, 라벨 변경 등 시 전송
Discussion comments: 토론 댓글 생성, 수정, 삭제 시 전송
Fork Forks: 리포지토리 포크 시 전송
Issue 관련 Issues: 이슈 생성, 수정, 삭제, 상태 변경 등 시 전송
Issue comments: 이슈 댓글 생성, 수정, 삭제 시 전송
Labels Labels: 라벨 생성, 수정, 삭제 시 전송
Merge 관련 Merge groups: 병합 그룹 체크 요청, 삭제 시 전송
Milestones Milestones: 마일스톤 생성, 수정, 삭제, 상태 변경 시 전송
Packages Packages: 패키지 게시, 업데이트 시 전송
Page 및 Wiki Page builds: 페이지 빌드 완료 시 전송
Wiki: Wiki 페이지 업데이트 시 전송
Pull Request 관련 Pull requests: PR 생성, 수정, 상태 변경 등 시 전송
Pull request reviews: PR 리뷰 제출, 수정, 해제 시 전송
Pull request review comments: PR 차이 댓글 생성, 수정, 삭제 시 전송
Pull request review threads: PR 리뷰 스레드 해결, 미해결 시 전송
Push Pushes: 리포지토리에 Git 푸시 발생 시 전송
Releases Releases: 릴리스 생성, 수정, 게시, 삭제 시 전송
Repository 관련 Repositories: 리포지토리 생성, 삭제, 상태 변경, 이름 변경 등 시 전송
Repository advisories: 리포지토리 권고 생성, 보고 시 전송
Repository imports: 리포지토리 가져오기 성공, 실패, 취소 시 전송
Repository rulesets: 리포지토리 규칙 생성, 수정, 삭제 시 전송
Repository vulnerability alerts: 취약성 경고 생성, 수정, 해제 시 전송
Secret Scanning Secret scanning alerts: 비밀 스캔 경고 생성, 수정, 유출 시 전송
Secret scanning scans: 비밀 스캔 완료 시 전송
Security 관련 Security and analyses: 코드 보안 기능 활성화/비활성화 시 전송
Stars Stars: 리포지토리에 스타 추가, 삭제 시 전송
Workflow 관련 Workflow jobs: 워크플로 작업 대기열 추가, 진행 중, 완료 시 전송
Workflow runs: 워크플로 실행 요청, 완료 시 전송

Nettee Backend는 이슈와 PR을 확인하기 위해 다음 목록을 선택했습니다.

  • Branch or tag creation: 브랜치 또는 태그 생성 시 전송

  • Issues: 이슈 생성, 수정, 삭제, 상태 변경 등 시 전송

  • Issue comments: 이슈 댓글 생성, 수정, 삭제 시 전송

  • Merge groups: 병합 그룹 체크 요청, 삭제 시 전송

  • Pull requests: PR 생성, 수정, 상태 변경 등 시 전송

  • Pull request reviews: PR 리뷰 제출, 수정, 해제 시 전송

  • Pull request review comments: PR 차이 댓글 생성, 수정, 삭제 시 전송

  • Pull request review threads: PR 리뷰 스레드 해결, 미해결 시 전송

(6) 선택이 완료되면 Active 상태로 체크 후 Add webhook을 클릭합니다.

  • Active 체크를 해제하신다면 Webhook 비활성화 상태로 변경 됩니다.

3. Webhook 테스트 해보기

(1) 선택하신 이벤트를 실행합니다. 추가한 Webhook은 이슈 등록 이벤트를 설정했으므로 이슈를 생성합니다.

(2) Discord에 알림이 오는지 확인합니다!

이제 해당 레포지토리에 대해 실시간으로 알림을 받고 확인할 수 있게 되었습니다.👍🏻

10
Subscribe to my newsletter

Read articles from silberbullet directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

silberbullet
silberbullet

모든 언어와 솔루션에 고정관념을 버리고 접근하는 개발자