Skip to content

[#9] feat: 4xx/5xx 에러 Discord 알림 구현 - #12

Merged
Bumnote merged 2 commits into
devfrom
feat/discord-alert
Jun 28, 2026
Merged

Bumnote merged 2 commits into
devfrom
feat/discord-alert

Conversation

@Bumnote

@Bumnote Bumnote commented Jun 27, 2026

Copy link
Copy Markdown
Member

📄 작업 내용

  • 운영 중 발생하는 4xx/5xx 에러 응답을 Discord 채널로 알리는 모니터링/경고 기능 구현
  • common/discord 알림 인프라 추가 (기존 EmailSender 프로필 패턴과 일관)
    • DiscordSender 인터페이스 + 프로필별 구현: LogDiscordSender(local/test), WebhookDiscordSender(dev/prod)
    • WebhookDiscordSenderHttpClient.sendAsync로 비동기 전송 — 요청 스레드 비차단, 직렬화/네트워크 실패·비-2xx 응답(429 등)은 로깅만(실패 안전)
    • DiscordAlertNotifieralert.enabled/alert.min-status로 발송을 게이트하고 메시지 포맷 (5xx는 스택트레이스 첨부)
  • GlobalExceptionHandler의 모든 에러 핸들러에서 notifyError(...) 호출 → 4xx/5xx 응답 시 알림 트리거 (응답 상태/바디 불변, 알림 실패가 응답에 영향 없음)
  • application.ymldiscord.* 설정 추가 (webhook-url은 환경변수 주입, alert.enabled 기본 false, alert.min-status 기본 400)
  • 배치·모니터링 등 다른 알림 유형은 DiscordSender 재사용으로 확장 가능. 현재는 요구대로 4xx/5xx 에러 알림만 연결

✅ PR 유형

  • Feature
  • Bug Fix
  • Refactor
  • Test
  • Chore
  • Docs

🧪 테스트 내용

  • 로컬 테스트 완료 (단위 6 + 통합 2, 전부 통과)
  • API 테스트 완료 (잘못된 본문 → 400 + 알림, 중복 이메일 → 409 + 알림)
  • UI 테스트 완료

단위: enabled/disabled, 임계값 경계(min-status), 5xx 스택트레이스 첨부·4xx 미첨부, sender 예외 시 실패 안전
회귀: MemberApiTest/AuthApiTest 통과 (컨텍스트 정상 로딩, test 프로필은 기본 미발송)

🙋🏻 참고 사항

  • 배포 시: DISCORD_WEBHOOK_URL(secret) 주입 + DISCORD_ALERT_ENABLED=true 필요. 코드/설정에 실제 URL 하드코딩 없음.
  • 운영 노이즈 주의: 기본 min-status: 400이라 모든 검증 실패/404도 알림됩니다(요구사항대로). 노이즈를 줄이려면 운영에서 discord.alert.min-status: 500 권장.
  • spring-cloud-openfeign 의존성 없이 구현, REST 엔드포인트 없음(알림은 내부 트리거).

🔗 관련 이슈

resolved: #9

Bumnote and others added 2 commits June 27, 2026 21:59
- 테스트 실행 시 루트에 생성되는 spy.log가 실수로 커밋되지 않도록 무시 목록에 추가

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
운영 중 발생하는 에러 응답을 Discord 채널로 알려 모니터링/경고를 돕는다.
현재는 4xx/5xx 에러 알림만 연결하며, 배치·모니터링 등은 DiscordSender를 재사용해 확장한다.

- common/discord에 알림 인프라 추가
  - DiscordSender 인터페이스 + 프로필별 구현(로컬/테스트 LogDiscordSender, 운영/개발 WebhookDiscordSender)
  - WebhookDiscordSender는 java.net.http.HttpClient.sendAsync로 비동기 전송해 요청 스레드를 막지 않고,
    직렬화/네트워크 실패와 비-2xx 응답(429 등)을 로깅만 하고 삼킴(실패 안전)
  - DiscordAlertNotifier가 enabled/min-status로 발송을 게이트하고 메시지를 포맷(5xx는 스택트레이스 첨부)
- GlobalExceptionHandler의 모든 에러 핸들러에서 notifyError를 호출해 4xx/5xx 응답 시 알림 트리거
  (알림 실패는 응답에 영향 없음, 응답 상태/바디 불변)
- application.yml에 discord 설정 추가(webhook-url은 환경변수로 주입, alert.enabled 기본 false, min-status 기본 400)
- 기존 EmailSender 패턴(인터페이스 + @Profile 분리)과 일관

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Test Results

25 tests  +8   25 ✅ +8   11s ⏱️ +2s
 6 suites +2    0 💤 ±0 
 6 files   +2    0 ❌ ±0 

Results for commit 608313e. ± Comparison against base commit 694ff35.

@Bumnote Bumnote self-assigned this Jun 28, 2026
@Bumnote
Bumnote requested a review from pug9483 June 28, 2026 05:38
@Bumnote Bumnote added feature 새로운 기능 추가 test 테스트 추가 및 테스트 코드 개선 labels Jun 28, 2026
@Bumnote
Bumnote merged commit 8ed23ec into dev Jun 28, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature 새로운 기능 추가 test 테스트 추가 및 테스트 코드 개선

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] API 구현

1 participant