Skip to content

Conversation

@Kim-TaeUk
Copy link
Member

@Kim-TaeUk Kim-TaeUk commented Jan 19, 2025

Related Issue

Key Changes

  • 유저 활동 관련 푸시 알림 구현입니다. 아래 4가지 상황입니다. 공지에 대한 알림은 이번 스프린트에 포함되지 않더라구요..!
    • 좋아요 알림
    • 댓글 알림(내가 쓴 글/내가 댓글 단 글)
    • 지금 뜨는 수다글
  • 클라이언트에서 발급한 FCM token 서버 사이드에서 저장하는 API
    • /users/fcm-token에서 저장합니다
    • ref2를 확인해보면 redis를 통해 TTL을 적용하는게 좋아 보입니다! 일단은 RDB에 저장하도록 했습니다. (null check도 추가해야 할 듯 합니다..ㅜ)
    • TTL 이외에도 권장 관리 사항 만족하도록 하는 로직들 추가해서 추가 PR 올리겠습니다.
  • FirebaseMessaging을 bean으로 주입시켜서 서버 <-> FCM 간에 통신합니다.
    • specific device에 대한 push는 sendPushMessage로, multiple device에 대한 push는 sendMulticastMessage로 처리합니다.(specific과 multiple에 device에 대한 설명은 공식문서인 ref1에서 확인할 수 있습니다.)
      • 추후 공지의 경우 topic을 통해 처리하려고 합니다.(topic에 대한 설명도 공식 문서인 ref1에서 확인할 수 있습니다.)
  • FCMService에서 push 관련 로직을 처리합니다. 이후 push가 발생하는 service layer에서 bean으로 주입받아 사용합니다. (CommentService, FeedService, PopularFeedService에서 주입받아 사용합니다.)
  • 기획에서 정해진 UX 라이팅이 있는데, 이를 따로 enum에서 관리하면 좋을 것 같아서 추후 리팩터링 사항으로 남겨두겠습니다.

To Reviewers

  • 덩어리가 꽤나 크네요.. 리뷰 감사합니다.
  • ref1ref2는 지금이 아니더라고 꼭 읽어보시길 추천하며, 플로우와 정해져있는 포맷을 이해하신다면 PR도 무리없이 파악될 것이라 생각합니다!

References

- Firebase 서비스 계정 key-file 기반 GoogleCredentials(인증 객체) 생성
- GoogleCredentials(인증 객체) 설정을 통한 Firebase 인증 정보 구성
- GoogleCredentials(인증 객체) 설정을 통한 Firebase 인증 정보 구성
- Spring Bean으로 등록하여 FirebaseMessaging을 의존성 주입할 수 있도록 함
- 서버에서 FCM message를 전송할 수 있는 기반 로직 구현
- 하드 코딩된 ClassPathResource를 주입하여 대체
- Firebase 설정 경로를 yml에서 관리
- platform-specific한 Message 부분 정의
- platform-specific한 Message 부분 정의
- 푸시 알림 발생시키는 액션과 한 트랜잭션에 묶여야 하기 때문에 Async보다는 send로 동기 처리
- FirebaseMessagingException를 try-catch로 잡아서 log 남김
- 예외 처리 범위 명확화
- 가독성 개선
- try-catch로 getInputStream()에서 발생할 수 있는 IOException 잡고, 로깅 및 IllegalStateException throw
- android 프로퍼티 제거
- notification 프로퍼티 제거
- apns 프로퍼티 수정
- data 프로퍼티 추가
Copy link
Member

@ChaeAg ChaeAg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

궁금한 점 코멘트 남겨요 ~!
푸시 알림 구현 정말 수고 많으셨습니다!! 🙏🙏

Copy link
Member

@ChaeAg ChaeAg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

본문에서 말씀하셨듯 유저 fcmToken의 null 체크를 해주어야 하지 않을까요..?
null일 경우 클라이언트 측에서 fcmToken을 재발급을 하는 식으로요!

Copy link
Member

@rinarina0429 rinarina0429 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정말 새롭네요,,, 공부하고 적용까지 고생 많으셨습니다!! 레퍼런스 잘 받아가 공부할게요오

@Kim-TaeUk
Copy link
Member Author

본문에서 말씀하셨듯 유저 fcmToken의 null 체크를 해주어야 하지 않을까요..? null일 경우 클라이언트 측에서 fcmToken을 재발급을 하는 식으로요!

요고 일단 클라랑 지금까지 된 기능 확인해보고 다음 PR에서 추가할게요!

@Kim-TaeUk Kim-TaeUk merged commit e2638d2 into dev Jan 20, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 앱 내 푸시알림 구현

4 participants