-
Notifications
You must be signed in to change notification settings - Fork 1
알림 아키텍처 정리
나경호(Na Gyeongho) edited this page May 27, 2025
·
1 revision
FCM ( Firebase - Cloud - Messaging )
[ 공식문서 LINK ]](https://firebase.google.com/docs/cloud-messaging?hl=ko)
- 앱이 FCM 서버와 통신하기 위해 사용하는 고유 식별자.
- Firebase에서 프로젝트별 디바이스를 구분하기 위한 기기별 고유 ID로 볼 수 있음.
- 디바이스마다 고유한 토큰이 발급됨.
- 앱 설치·삭제, 사용자 재인증 시 토큰이 변경(Refresh)될 수 있음.
- 서버는 이 토큰을 사용해 특정 디바이스에 푸시 메시지를 전송함.
- 토큰이 만료되거나 변경될 수 있으므로 주기적인 갱신 로직이 필요함.
- 여러 디바이스를 사용하는 유저라면 디바이스별 토큰을 각각 관리해야 함.
- user - fcmToken (oneToMany)
- **채널(Topic)**을 통해 여러 수신자 그룹에 메시지를 일괄 전송할 수 있는 구조.
- 유저가 특정 토픽을 **구독(subscribe)**하면, 해당 토픽으로 발송되는 메시지를 수신함.
- subscribe, unsubscribe 메서드를 통해 구독·구독 취소 요청을 FCM에 전송함.
- 토픽을 이용하면, 해당 토픽을 구독한 모든 유저에게 동일 메시지를 보내기 쉬움
- 이름은 알파벳·숫자로만 구성 가능(최대 256자).
- 특수 문자, 공백, 한글 등은 사용할 수 없음.
- 이미 존재하는 이름의 토픽과 중복 생성은 불가.
- 관심사 알림 - 유저 간에 명함을 공유한 후, 관심사가 비슷한 유저가 있으면 푸시 알람을 보내고, (엔텔리 배너 클릭 후) 서비스 내에서 해당 유저들을 리스트업해서 보여줍니다.
- 타유저 정보 변경 알림 - 명함을 공유한 유저의 상태(명함 정보)가 변경되면 알림을 보내줍니다.
- FCM Topic 기능 활용
예상 시나리오:
- 유저 A가 명함을 등록한다.
- 서버: 등록된 명함을 토대로 관심사를 Topic으로 구독
- 유저 A가 유저 B, C와 명함을 공유한다.
- 서버: B,C의 관심사와 비교 후 일정 시간 이후 유저 A에게 푸시 알림
- 작성중..
- 유저 푸시알림 동의 여부를 백엔드 DB 에서 정합성을 유지해야함
- FE 와 여러 케이스에서 논의 필요
- 유저 삭제, 앱 삭제, 미동의 처리 등등.. 업데이트 케이스가 정말 많음
- (이 부분에서 항상 이슈가 많았어서…)
- FE 와 여러 케이스에서 논의 필요
- 알림 관련 비용 처리 확인 필요
- 최대 몇명에게 까지 요청 한 번으로 알림을 송신할 수 있는지?
- 모두 개별적으로 처리하면 서버에 부하이슈 발생 가능
- 일반적으로 외부 API call 의 경우 서버에서 처리가 느림
- 푸시알림 발송 성공 여부 파악 필요
- 이벤트 리스너 활용하여 비동기로 구현
- 백엔드 컨벤션
- TestContainer 적용 이유
- DB Read replica 구성 (AWS RDS)
- RDS 프라이빗 설정 후 로컬 터널링
- 공통 성공/에러 응답 정의
- 테스트 환경 통합 작업
- 소셜 로그인 설계(Spring Security 없이 OAuth2.0)
- 클라우드 환경변수 관리 AWS SSM Parameter Store
- 코드단 제안 사항 (카카오톡 내용 요약)
- Spring에서 JWT 인증/인가 위치 제안(Filter와 Interceptor)
- 알림 아키텍처 정리
- 외부 API Call 및 무거운 작업 Serverless Lambda 로 분리
- Redis GEO (유저 위치 저장 및 검색)
- 푸시알림 권한 받는 시점
- TestConfig 및 (이전) Fixture 활용 방법
- 테스트 코드 개선 제안: Mock과 Fixture 패턴
- 테스트 객체 자동 생성
- 푸시알림 설계
- Fixture 및 Factory 활용 방법
- 로그 모니터링 시스템 구축
- 성능테스트 케이스