feat: ScheduleWorker 구현 (#112) #113

Merged
seonkyu.kim merged 1 commits from feature/#112-schedule-worker into develop 2026-02-10 07:27:03 +00:00
Owner

📋 작업 요약

  • RabbitMQ spms.schedule.queue에서 예약 메시지를 폴링하여, 예약 시간 도래 시 spms.push.queue로 전달하는 BackgroundService Worker 구현
  • 30초 간격 폴링, BasicGet 방식으로 schedule queue를 순회

Closes #112

🛠️ 작업 내용 (Changes)

  • SPMS.Infrastructure/Workers/ScheduleWorker.cs — ScheduleWorker BackgroundService
    • 30초 간격 Timer 기반 폴링
    • BasicGet으로 schedule queue에서 메시지 하나씩 조회
    • ScheduleMessageDto 역직렬화 → scheduled_at 파싱
    • 예약 시간 미도래 → NACK + requeue (큐에 다시 넣기)
    • 예약 시간 도래 → IPushQueueService.PublishPushMessageAsync()로 push queue에 적재 → ACK
    • ISO 8601 / DateTimeOffset 등 다양한 날짜 형식 지원
    • 연결 오류 시 5초 후 재시도
  • SPMS.Infrastructure/DependencyInjection.cs — AddHostedService() 등록

📢 리뷰어 참고 사항 (To Reviewers)

  • PushWorker와 달리 이벤트 기반이 아닌 폴링 방식 (BasicGet) — 예약 메시지의 특성상 정확한 시간 도래 체크가 필요하기 때문
  • NACK + requeue로 아직 시간이 안 된 메시지는 큐에 다시 넣음
  • IPushQueueService는 Scoped이므로 IServiceScopeFactory로 스코프 생성 후 사용
  • Webhook 발송(schedule_executed)은 Phase 3-2에서 구현 예정

체크리스트 (Self Checklist)

  • 빌드(Build)가 성공적으로 수행되었는가?
  • 모든 단위 테스트(Unit Test)를 통과하였는가?
  • 불필요한 로그나 주석을 제거하였는가?
  • 컨벤션(Clean Architecture, Naming)을 준수하였는가?
  • 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가?

📸 스크린샷 / 테스트 로그 (Screenshots/Logs)

빌드했습니다.
    경고 0개
    오류 0개
## 📋 작업 요약 - RabbitMQ `spms.schedule.queue`에서 예약 메시지를 폴링하여, 예약 시간 도래 시 `spms.push.queue`로 전달하는 BackgroundService Worker 구현 - 30초 간격 폴링, BasicGet 방식으로 schedule queue를 순회 ## 🔗 관련 이슈 (Related Issues) Closes #112 ## 🛠️ 작업 내용 (Changes) - [x] `SPMS.Infrastructure/Workers/ScheduleWorker.cs` — ScheduleWorker BackgroundService - 30초 간격 Timer 기반 폴링 - BasicGet으로 schedule queue에서 메시지 하나씩 조회 - ScheduleMessageDto 역직렬화 → scheduled_at 파싱 - 예약 시간 미도래 → NACK + requeue (큐에 다시 넣기) - 예약 시간 도래 → IPushQueueService.PublishPushMessageAsync()로 push queue에 적재 → ACK - ISO 8601 / DateTimeOffset 등 다양한 날짜 형식 지원 - 연결 오류 시 5초 후 재시도 - [x] `SPMS.Infrastructure/DependencyInjection.cs` — AddHostedService<ScheduleWorker>() 등록 ## 📢 리뷰어 참고 사항 (To Reviewers) - PushWorker와 달리 이벤트 기반이 아닌 폴링 방식 (BasicGet) — 예약 메시지의 특성상 정확한 시간 도래 체크가 필요하기 때문 - NACK + requeue로 아직 시간이 안 된 메시지는 큐에 다시 넣음 - IPushQueueService는 Scoped이므로 IServiceScopeFactory로 스코프 생성 후 사용 - Webhook 발송(schedule_executed)은 Phase 3-2에서 구현 예정 ## ✅ 체크리스트 (Self Checklist) - [x] 빌드(Build)가 성공적으로 수행되었는가? - [x] 모든 단위 테스트(Unit Test)를 통과하였는가? - [x] 불필요한 로그나 주석을 제거하였는가? - [x] 컨벤션(Clean Architecture, Naming)을 준수하였는가? - [x] 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가? ## 📸 스크린샷 / 테스트 로그 (Screenshots/Logs) ``` 빌드했습니다. 경고 0개 오류 0개 ```
seonkyu.kim added 1 commit 2026-02-10 07:25:49 +00:00
seonkyu.kim added the
Priority
High
Status
In Progress
Type
Feature
labels 2026-02-10 07:25:59 +00:00
seonkyu.kim added this to the Phase 3: 메시지 & Push Core milestone 2026-02-10 07:26:02 +00:00
seonkyu.kim self-assigned this 2026-02-10 07:26:07 +00:00
seonkyu.kim requested review from Owners 2026-02-10 07:26:19 +00:00
seonkyu.kim merged commit b5d6c70b16 into develop 2026-02-10 07:27:04 +00:00
seonkyu.kim deleted branch feature/#112-schedule-worker 2026-02-10 07:27:22 +00:00
seonkyu.kim added
Status
Done
and removed
Status
In Progress
labels 2026-02-10 07:27:53 +00:00
Sign in to join this conversation.
No description provided.