Skip to content

chimaek/burn-guard

Repository files navigation

BurnGuard

개발자 번아웃, 코드가 먼저 알려준다.

Git 커밋 패턴, PR 사이클, 코드 리뷰 응답 속도를 분석해서 팀원의 번아웃 신호를 2주 전에 팀 리더에게 알려줍니다.

Self-hosted — 코드와 커밋 데이터가 외부로 나가지 않습니다. 경량 — 4코어, 8GB RAM이면 충분합니다. 선택적 알림 — Slack, Discord 등 사용하는 협업 도구로 알림을 받으세요.


이런 상황, 겪어보셨나요?

월요일 아침, 팀원 A의 PR이 3일째 방치되어 있다.
지난주부터 커밋이 절반으로 줄었다.
새벽 2시에 올라온 커밋이 이번 주만 4개.

"요즘 좀 힘든가?" 라고 물어보고 싶지만,
감이 아닌 데이터로 확인할 수 있다면?

BurnGuard는 이 5가지 신호를 자동으로 추적합니다.

신호 측정 방식 위험 기준
심야 커밋 비율 22:00~06:00 커밋 > 15%
PR 방치율 72시간 이상 미리뷰 PR > 20%
코드 리뷰 응답 지연 평균 리뷰 응답 시간 > 24시간
커밋 수 급감 전주 대비 감소율 > -30%
주말/휴일 작업 토·일 작업 비율 > 10%

종합 점수: 0.0 ~ 1.0 → LOW / MEDIUM / HIGH / CRITICAL

HIGH 이상이면 팀 리더에게 즉시 알림이 갑니다.


3분 만에 시작하기

1. 클론 & 설정

git clone https://github.com/YOUR_USERNAME/burnguard.git
cd burnguard
cp .env.example .env

2. .env 수정 — 딱 3줄

# .env
GITHUB_WEBHOOK_SECRET=your-webhook-secret
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T.../B.../...
# 또는 Discord를 쓴다면:
# DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...

3. 실행

docker compose up -d

4. GitHub Webhook 연결

Repository → Settings → Webhooks → Add webhook

항목
Payload URL http://your-server:8080/api/v1/webhooks/github
Content type application/json
Secret .envGITHUB_WEBHOOK_SECRET
Events Push, Pull request, Pull request review

5. 팀 만들고 레포 등록

curl -X POST localhost:8082/api/v1/teams \
  -H "Content-Type: application/json" \
  -d '{"name":"my-team","repos":["your-org/your-repo"]}'

6. 확인

curl http://localhost:8080/actuator/health    # 서비스 상태
curl http://localhost:8082/api/v1/teams/1/dashboard  # 팀 대시보드

이제 팀원이 커밋할 때마다 BurnGuard가 분석하고, 위험 신호가 감지되면 설정한 채널(Slack/Discord)로 알림이 갑니다.


어떻게 동작하나요?

GitHub Webhook (push, PR, review)
        │
        ▼
┌──────────────────┐     Redis Pub/Sub     ┌──────────────────┐
│ webhook-receiver │ ───────────────────▶  │    analyzer      │
│ (HMAC 검증)      │                       │ (번아웃 지표 계산)│
└──────────────────┘                       └────────┬─────────┘
                                                    │
                                    ┌───────────────┼───────────────┐
                                    ▼               ▼               ▼
                              ┌──────────┐   ┌──────────┐   ┌───────────┐
                              │PostgreSQL│   │  REST API │   │ Slack     │
                              │ (저장)   │   │ (대시보드)│   │ Discord   │
                              └──────────┘   └──────────┘   └───────────┘

3개의 마이크로서비스가 각자 역할을 수행합니다:

서비스 역할 포트
webhook-receiver GitHub Webhook 수신, HMAC 검증, 이벤트 발행 8080
analyzer 번아웃 지표 계산, DB 저장, 알림 발송 8081
api-server 대시보드 REST API, 점수 이력 조회 8082

알림 채널

BurnGuard는 여러 알림 채널을 동시에 지원합니다. .env에 URL을 넣으면 활성화, 비우면 비활성화. 그게 전부입니다.

채널 환경변수 상태
Slack SLACK_WEBHOOK_URL 지원
Discord DISCORD_WEBHOOK_URL 지원
Microsoft Teams TEAMS_WEBHOOK_URL 예정 (v1.4.0)

Slack과 Discord를 동시에 설정하면 두 곳 모두에 알림이 갑니다.


시스템 요구사항

환경 CPU RAM 비고
최소 4코어 8GB Intel N100 등 저전력 미니PC에서 검증 완료
권장 4코어+ 16GB+ 대규모 팀, 모니터링 강화 시

최소 스펙(8GB) 기준 메모리 배분

구성 요소 기본 할당
webhook-receiver (JVM -Xmx256m) ~400MB
analyzer (JVM -Xmx512m) ~700MB
api-server (JVM -Xmx256m) ~400MB
Redis ~512MB
PostgreSQL ~1.5GB
Prometheus ~512MB
Grafana ~256MB
여유 ~3.7GB

서버 RAM에 여유가 있으면 JVM -Xmx, PostgreSQL shared_buffers 등을 자유롭게 올릴 수 있습니다.


기술 스택

카테고리 기술 비고
언어 Java 25 LTS Virtual Threads, Scoped Values, Generational ZGC
프레임워크 Spring Boot 4.x Spring Framework 7.x
메시지 Redis Pub/Sub Kafka 미사용 (최소 스펙에서 메모리 2.5GB 절약)
DB PostgreSQL 16 이벤트/분석 결과 저장
알림 Slack, Discord 인터페이스 기반 확장 가능
모니터링 Prometheus + Grafana 선택 사항
CI/CD GitHub Actions + ArgoCD 오픈소스 전체 공개
테스트 JUnit 5, Mockito, TestContainers TDD

API

# 팀 관리
POST /api/v1/teams                          # 팀 생성 + 레포 등록
GET  /api/v1/teams                          # 팀 목록
POST /api/v1/teams/{teamId}/repos           # 레포 추가

# 대시보드 — 3가지 뷰
GET /api/v1/dashboard                       # 전체 현황
GET /api/v1/teams/{teamId}/dashboard        # 팀별 현황
GET /api/v1/repos/{owner}/{repo}/dashboard  # 레포별 현황

# 개발자 상세
GET /api/v1/developers/{login}/scores?days=14

# 헬스체크
GET /actuator/health

사용 흐름 예시:

# 1. 팀 만들기
curl -X POST localhost:8082/api/v1/teams \
  -H "Content-Type: application/json" \
  -d '{"name":"backend-team","description":"백엔드 팀","repos":["org/api-server","org/auth-service"]}'

# 2. 팀 대시보드 확인
curl localhost:8082/api/v1/teams/1/dashboard

# 3. 특정 레포만 확인
curl localhost:8082/api/v1/repos/org/api-server/dashboard

문서

문서 설명
ARCHITECTURE.md MSA 구조, Redis Pub/Sub, Java 25 적용
ALGORITHM.md 번아웃 감지 알고리즘 상세
DEVELOPMENT.md 로컬 환경, 스프린트 계획, TDD
API.md REST API 명세
DEPLOYMENT.md k3s 배포, CI/CD
TROUBLESHOOTING.md 트러블슈팅 기록
DESKTOP_APP.md 데스크톱 GUI 앱 설계 (Tauri)
roadmap.md 버전별 로드맵

라이선스

MIT License — Self-hosted 오픈소스

About

Git commit pattern analysis-based developer burnout early warning system — Self-hosted, lightweight, open-source

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors