-
Notifications
You must be signed in to change notification settings - Fork 2
Closed
Description
배경
현재 스케줄러 작업(문제 추천, 이메일 발송)의 성공/실패 여부나 주요 비즈니스 이벤트(회원가입)를 확인하려면 로그를 직접 확인해야 한다.
Discord Webhook을 통해 실시간 알림을 받으면 운영 가시성이 크게 향상된다.
알림 대상
| 채널 | 이벤트 |
|---|---|
#scheduler |
문제 추천 생성 완료/실패, 이메일 발송 완료/실패 |
#events |
회원가입 |
#errors |
외부 API 실패 (solved.ac 등), 예상치 못한 서버 에러 |
채널별 메시지 내용
#scheduler — 문제 추천
성공:
| 필드 | 예시 |
|---|---|
| 제목 | 문제 추천 완료 |
| 대상 팀 수 | 3개 |
| 총 추천 문제 수 | 15개 |
| 소요 시간 | 2.3s |
| 타임스탬프 | 2026-02-17 06:00:00 |
실패:
| 필드 | 예시 |
|---|---|
| 제목 | 문제 추천 실패 |
| 실패 팀 | TeamA |
| 에러 메시지 | DB connection timeout |
| 성공/실패 | 2팀 성공 / 1팀 실패 |
| 타임스탬프 | 2026-02-17 06:00:00 |
#scheduler — 이메일 발송
성공:
| 필드 | 예시 |
|---|---|
| 제목 | 이메일 발송 완료 |
| 발송 건수 | 12건 |
| 소요 시간 | 5.1s |
| 타임스탬프 | 2026-02-17 09:00:00 |
실패:
| 필드 | 예시 |
|---|---|
| 제목 | 이메일 발송 실패 |
| 실패 건수 | 3건 |
| 에러 메시지 | SES rate limit exceeded |
| 성공/실패 | 9건 성공 / 3건 실패 |
| 타임스탬프 | 2026-02-17 09:00:00 |
#events — 회원가입
| 필드 | 예시 |
|---|---|
| 제목 | 새 회원 가입 |
| 닉네임 | ryu |
| BOJ 핸들 | ryu123 |
| 타임스탬프 | 2026-02-17 14:30:00 |
#errors — 에러
| 필드 | 예시 |
|---|---|
| 제목 | 외부 API 실패 |
| 예외 클래스 | SolvedAcApiException |
| 메시지 | 429 Too Many Requests |
| 요청 URL | /api/v3/user/show |
| 요청 메서드 | GET |
| 타임스탬프 | 2026-02-17 12:00:00 |
구현 방향
방식
- Discord Webhook (단방향 HTTP POST)
- 채널별 Webhook URL 분리
설정
discord:
webhooks:
scheduler-url: ${DISCORD_WEBHOOK_SCHEDULER_URL}
events-url: ${DISCORD_WEBHOOK_EVENTS_URL}
errors-url: ${DISCORD_WEBHOOK_ERRORS_URL}환경 분리
prod프로필에서만 활성화- 로컬/테스트 환경에서는 로그만 출력
호출 방식
- 현재: 필요한 곳에서
DiscordWebhookSender직접 호출 - 추후: Spring Event +
@Async로 비동기 분리 (별도 이슈)
패키지 구조
infrastructure/
└── discord/
├── DiscordWebhookSender.java # Webhook HTTP 호출
└── DiscordMessage.java # 메시지 구조 (Embed)
메시지 형태
Discord Embed 사용 (색상, 제목, 필드, 타임스탬프)
범위 외
- 비동기 이벤트 처리 (별도 이슈)
- Discord Bot (불필요)
- 글로벌 500 에러 전체 알림 (특정 예외만 대상)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
Done