프로젝트에서 사용자의 깃허브 레포지토리, PR목록을 서버로 자동 동기화 해야하는데
Webhook과 배치 중 어느 쪽이 더 적절할지 결정이 필요했음
1. Webhook / 배치 프로그램 차이점
항목 | Webhook | 배치 프로그램 |
작동 방식 | GitHub 이벤트 발생 시 즉시 알림 | 주기적으로 서버에서 GitHub API 호출 |
트리거 조건 | PR 생성, push, comment 등 | 설정된 시간마다 무조건 실행 |
실시간성 | ✅ 매우 뛰어남 | ❌ 느릴 수 있음 |
API 호출 횟수 | 필요할 때만 | 반복적으로 호출 (비효율적 가능성 있음) |
GitHub 설정 필요 | ✅ Webhook 수동 등록 | ❌ 없음 |
구현 난이도 | 서버 수신기 필요 (POST endpoint) | 비교적 간단 (스케줄러만 설정하면 됨) |
2. 실제 사용 시나리오
이 서비스는 사용자가 GitHub OAuth 로그인 후 먼저 리포지토리의 PR 목록을 동기화 시키고
이후 상태 변경(리포지토리/ PR 추가 삭제 수정)이 있을 경우 실시간으로 업데이트 되기를 원함
👉 고려한 요구사항
- PR 상태 변경은 즉시 반영되어야 함
- 사용자가 참여한 레포가 많고, PR도 자주 생성됨
- GitHub API rate limit(제한)이 존재
- 일부 레포는 Webhook 설정 권한이 없음
3. 선택 : 배치+사용자가 직접 새로 고침할 수 있도록 동기화 버튼 추가
Webhook의 단점은, 레포지토리마다 수동으로 설정해줘야 한다는 점이다.
특히 여러 사용자가 참여하는 시스템에서는 모든 레포에 직접 Webhook을 등록하는 것이 매우 번거롭고 비효율적일 수 있다.
그리고 협업자나 다른 사용자 레포지토리는 설정 권한이 없을 수도 있음
그래서 Webhook의 실시간성은 포기하고
- 배치 프로그램으로 기본적인 자동 동기화
- 사용자 수동 동기화 버튼으로 누락/딜레이 대응
전략을 사용하기로 했다
그 이유는
1. Webhook 없이도 UX 보완 가능 (WebHook 설정 번거로움 제거)
2. 사용자에게 통제권을 제공할 수 있다
4. 향후 추가 포인트
- PR 목록이 오래된 경우 "마지막 동기화: 00분 전" 표시도 UX 향상
- 만약 버튼을 여러 번 누르는 걸 막고 싶다면: 서버에서 "최근 1분 이내에 이미 동기화됨" 같은 제한 추가
- 사용자 로그인 시, 소유한 모든 레포에 Webhook 자동 등록 기능 추가
'Project' 카테고리의 다른 글
프로젝트 회고 : Juseyo - 재고 관리 플랫폼 (0) | 2025.06.05 |
---|---|
프로젝트 회고: Hakple – 학원생 커뮤니티 플랫폼 (1) | 2025.05.01 |