feat: Redis 중복 발송 방지 구현 (#108) #109

Merged
seonkyu.kim merged 1 commits from feature/#108-redis-duplicate-check into develop 2026-02-10 07:09:18 +00:00
Owner

📋 작업 요약

  • StackExchange.Redis를 사용하여 푸시 메시지 중복 발송 방지 로직 구현
  • Redis SetNX(SET if Not eXists)를 활용한 중복 체크
  • Key 형식: {InstanceName}duplicate:{requestId}, TTL 24시간

Closes #108

🛠️ 작업 내용 (Changes)

  • SPMS.Application/Settings/RedisSettings.cs — Redis 설정 POCO (ConnectionString, InstanceName, DuplicateTtlHours)
  • SPMS.Application/Interfaces/IDuplicateChecker.cs — 중복 체크 인터페이스 (IsDuplicateAsync)
  • SPMS.Infrastructure/Caching/RedisConnection.cs — Redis 연결 관리 (ConnectionMultiplexer 싱글톤, SemaphoreSlim 동기화, 자동 재연결)
  • SPMS.Infrastructure/Caching/DuplicateChecker.cs — 중복 체크 구현체 (StringSetAsync + When.NotExists, Redis 장애 시 fail-open)
  • SPMS.Infrastructure/DependencyInjection.cs — Redis DI 등록 (Configure, RedisConnection, IDuplicateChecker)
  • SPMS.Infrastructure/SPMS.Infrastructure.csproj — StackExchange.Redis 2.10.14 패키지 추가
  • SPMS.API/appsettings.json — Redis 설정 섹션 추가

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

  • Redis 장애 시 fail-open 정책: 중복 체크 실패 시 메시지를 스킵하지 않고 처리 진행 (발송 누락 방지)
  • ConnectionMultiplexer는 싱글톤으로 관리되며, 연결 끊김 시 자동 재연결 시도
  • 실제 Redis 접속 정보는 secrets.json/환경변수에서 관리

체크리스트 (Self Checklist)

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

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

빌드했습니다.
    경고 0개
    오류 0개
## 📋 작업 요약 - StackExchange.Redis를 사용하여 푸시 메시지 중복 발송 방지 로직 구현 - Redis SetNX(SET if Not eXists)를 활용한 중복 체크 - Key 형식: `{InstanceName}duplicate:{requestId}`, TTL 24시간 ## 🔗 관련 이슈 (Related Issues) Closes #108 ## 🛠️ 작업 내용 (Changes) - [x] `SPMS.Application/Settings/RedisSettings.cs` — Redis 설정 POCO (ConnectionString, InstanceName, DuplicateTtlHours) - [x] `SPMS.Application/Interfaces/IDuplicateChecker.cs` — 중복 체크 인터페이스 (IsDuplicateAsync) - [x] `SPMS.Infrastructure/Caching/RedisConnection.cs` — Redis 연결 관리 (ConnectionMultiplexer 싱글톤, SemaphoreSlim 동기화, 자동 재연결) - [x] `SPMS.Infrastructure/Caching/DuplicateChecker.cs` — 중복 체크 구현체 (StringSetAsync + When.NotExists, Redis 장애 시 fail-open) - [x] `SPMS.Infrastructure/DependencyInjection.cs` — Redis DI 등록 (Configure, RedisConnection, IDuplicateChecker) - [x] `SPMS.Infrastructure/SPMS.Infrastructure.csproj` — StackExchange.Redis 2.10.14 패키지 추가 - [x] `SPMS.API/appsettings.json` — Redis 설정 섹션 추가 ## 📢 리뷰어 참고 사항 (To Reviewers) - Redis 장애 시 fail-open 정책: 중복 체크 실패 시 메시지를 스킵하지 않고 처리 진행 (발송 누락 방지) - ConnectionMultiplexer는 싱글톤으로 관리되며, 연결 끊김 시 자동 재연결 시도 - 실제 Redis 접속 정보는 secrets.json/환경변수에서 관리 ## ✅ 체크리스트 (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:05:34 +00:00
seonkyu.kim added the
Priority
High
Status
In Progress
Type
Feature
labels 2026-02-10 07:05:53 +00:00
seonkyu.kim added this to the Phase 3: 메시지 & Push Core milestone 2026-02-10 07:06:00 +00:00
seonkyu.kim self-assigned this 2026-02-10 07:08:03 +00:00
seonkyu.kim requested review from Owners 2026-02-10 07:08:12 +00:00
seonkyu.kim merged commit 81c3eee1f3 into develop 2026-02-10 07:09:18 +00:00
seonkyu.kim deleted branch feature/#108-redis-duplicate-check 2026-02-10 07:09:47 +00:00
seonkyu.kim added
Status
Done
and removed
Status
In Progress
labels 2026-02-10 07:10:19 +00:00
Sign in to join this conversation.
No description provided.