πŸ” λͺ©μ°¨

πŸ“ 흐름도

πŸ”Ή μ•Œλ¦Ό κΈ°λŠ₯ 전체 흐름

λ„λ©”μΈμ—μ„œ λ°œμƒν•œ 이벀트λ₯Ό μ‘°ν•©ν•˜μ—¬ μœ μ €μ—κ²Œ μ•Œλ¦Ό λ°œμ†‘

μ•Œλ¦Ό_흐름도.png


πŸ”Ή Notification 흐름

λ©”μ„Έμ§€ DB μ €μž₯ 및 μœ μ €μ—κ²Œ 전솑. μ‹€νŒ¨ μ‹œ μž¬μ‹œλ„

Notification흐름.png


πŸ—‚οΈ νŒ¨ν‚€μ§€ ꡬ쑰 및 클래슀 μ—­ν• 

notification
 β”œβ”€β”€ application
 β”‚   β”œβ”€β”€ dto
 β”‚   β”‚   β”œβ”€β”€ NotificationMessageDto.java
 β”‚   β”‚   β”œβ”€β”€ NotificationRequestDto.java
 β”‚   β”‚   └── NotificationResponseDto.java
 β”‚   β”œβ”€β”€ fcm
 β”‚   β”‚   β”œβ”€β”€ dto
 β”‚   β”‚   β”‚   β”œβ”€β”€ FcmCreateRequestDto.java
 β”‚   β”‚   β”‚   β”œβ”€β”€ FcmDeleteRequestDto.java
 β”‚   β”‚   β”‚   └── FcmMessageDto.java
 β”‚   β”‚   β”œβ”€β”€ sender
 β”‚   β”‚   β”‚   β”œβ”€β”€ AndroidFcmSender.java
 β”‚   β”‚   β”‚   β”œβ”€β”€ FcmSender.java
 β”‚   β”‚   β”‚   β”œβ”€β”€ IosFcmSender.java
 β”‚   β”‚   β”‚   └── WebFcmSender.java
 β”‚   β”‚   β”œβ”€β”€ FcmService.java
 β”‚   β”‚   └── FcmServiceImpl.java
 β”‚   β”œβ”€β”€ redis
 β”‚   β”‚   └── NotificationRedisService.java
 β”‚   β”œβ”€β”€ sse
 β”‚   β”‚   β”œβ”€β”€ dto
 β”‚   β”‚   β”‚   └── SseMessageDto.java
 β”‚   β”‚   β”œβ”€β”€ SseService.java
 β”‚   β”‚   └── SseServiceImpl.java
 β”‚   β”œβ”€β”€ NotificationHandler.java
 β”‚   β”œβ”€β”€ NotificationProvider.java
 β”‚   β”œβ”€β”€ NotificationService.java
 β”‚   └── NotificationServiceImpl.java
 β”œβ”€β”€ domain
 β”‚   β”œβ”€β”€ FcmToken.java
 β”‚   β”œβ”€β”€ FcmTokenRepository.java
 β”‚   β”œβ”€β”€ Notification.java
 β”‚   └── NotificationRepository.java
 β”œβ”€β”€ enums
 β”‚   β”œβ”€β”€ NotificationType.java
 β”‚   β”œβ”€β”€ PlatformType.java
 β”‚   β”œβ”€β”€ SendStatus.java
 β”‚   └── UuidStatus.java
 β”œβ”€β”€ event
 β”‚   └── rabbitmq
 β”‚       β”œβ”€β”€ config
 β”‚       β”‚   └── NotificationRabbitConfig.java
 β”‚       β”œβ”€β”€ consumer
 β”‚       β”‚   └── NotificationConsumer.java
 β”‚       └── producer
 β”‚           └── NotificationRetryProducer.java
 β”œβ”€β”€ infra
 β”‚   β”œβ”€β”€ fcm
 β”‚   β”‚   β”œβ”€β”€ FcmTokenJpaRepository.java
 β”‚   β”‚   └── FcmTokenRepositoryImpl.java
 β”‚   β”œβ”€β”€ redis
 β”‚   β”‚   └── NotificationRedisRepository.java
 β”‚   β”œβ”€β”€ NotificationJpaRepository.java
 β”‚   └── NotificationRepositoryImpl.java
 └── presentation
     β”œβ”€β”€ fcm
     β”‚   └── FcmController.java
     β”œβ”€β”€ sse
     β”‚   └── SseController.java
     └── NotificationController.java


πŸ”Ήapplication

μ•Œλ¦Ό λ„λ©”μΈμ˜ μ„œλΉ„μŠ€ 계측. μ•Œλ¦Ό 전달 방식을 λ‹΄λ‹Ήν•˜λŠ” μ„ΈλΆ€ λͺ¨λ“ˆλ‘œ λ‚˜λ‰¨.

클래슀 μ—­ν• 
FcmService Firebase Cloud Messaging(FCM)을 ν†΅ν•œ ν‘Έμ‹œ μ•Œλ¦Ό λ°œμ†‘ 둜직 κ΅¬ν˜„.
단말 토큰 μœ νš¨μ„± 검증, λ°œμ†‘ μ‹€νŒ¨ μ‹œ μ—λŸ¬ 처리 포함
FcmSender ν”Œλž«νΌ(Android, iOS, Web λ“±)에 따라 FCM λ©”μ‹œμ§€λ₯Ό 전솑
SseService Server-Sent Events(SSE) 기반 μ‹€μ‹œκ°„ μ•Œλ¦Ό 전솑 μ„œλΉ„μŠ€.
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 관리 및 이벀트 λ°œμ†‘ 처리
NotificationRedisService Redis 데이터 쑰회 및 μ €μž₯ κ΄€λ ¨ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
UUID 쀑볡 검사 처리
NotificationHandler MQ Consumer λ“±μ—μ„œ λ“€μ–΄μ˜¨ μ•Œλ¦Ό 이벀트λ₯Ό λ°›μ•„ λΆ„κΈ° 처리
NotificationProvider μ•Œλ¦Ό λ©”μ‹œμ§€ 뢄리/μ‘°ν•© 및 λ°œμ†‘ 채널(FCM/SSE λ“±) 선택
NotificationService μ•Œλ¦Ό λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μ§„μž…μ . λ°œμ†‘ λŒ€μƒ 쑰회, λ°œμ†‘ 채널 κ²°μ •, μ €μž₯μ†Œ 연동 처리