EveryUniv/next-student-council-backend

[With-Dankook] 채팅 알림 기능 구현

Opened this issue · 0 comments

현재 채팅방은 Kafka를 이용해 데이터를 확인하고 있으며 채팅 메시지에 대한 정보는 AWS 의 DynamoDB를 사용하여 저장중이다.

<알림 기능>
현재 채팅방에서는 사용자가 채팅을 쳤을 경우, 채팅의 알림이 오지 않아서 새로운 채팅이 왔는지 안왔는지 알 수가 없다.
이를 해결하기 위해서 채팅 알림 기능을 추가하려고 한다.

사용자들이 같은 채팅방에 있고 그 채팅방의 구독 엔드포인트에 새로운 채팅이 올 경우, 채팅방 안에 자신을 제외한 나머지 사용자들에게 푸시 알림을 보내야한다.

이를 구현하기 위해서는 기술 스택 2가지를 고려해보려고 한다.

<첫 번째는 Firebase 의 "FCM" 기술이다.>

FCM은 Firebase Cloud Messagin의 약자로, 웹 IOS 안드로이드 등등 많은 곳에서 사용할 수 있는 크로스 플랫폼 기술이다.
다만, 푸시 알림을 하기 위해서는 FCM 토큰이라는 값이 필수적으로 필요하며 이는 사용자가 사용하는 기기마다 존재하는 고유 값이다.
사용자가 앱에서 로그인을 하면 FCM 토큰을 발급받고 redis에 userId를 key로, token 값을 value로 저장하여 사용할 수 있으며, FCM을 이용하면 토큰으로 단일 / 다중 전송 및 Topic을 이용한 전송도 가능하다.
다만, Firebase의 storage가 일정부분 넘어가면 이용금액이 추가되며, 테스트를 하기 위해 모바일 환경을 구성해야 한다는 단점이 존재한다.

<두 번째는 AWS 의 "SNS" 와 "FCM"을 같이 쓰는 방법이다.>

AWS에서 제공하는 SNS는 일반 메시지 뿐만 아니라 모바일 푸시 알림, 이메일 인증 전송 등 많은 방면으로 사용될 수 있는 기술 스택이다. SNS는 일단 pub, sub 구조로 되어 있으며 topic을 통한 알림 전송이 가능하고 이 외에도 무료로 사용할 수 있는 횟수도 많을 뿐더러, 더 다양한 기술로 발전시킬 수 있는 scale-up 부분에서도 괜찮은 것 같다.
향후 lambda 또는 SQS를 추가적으로 사용하여 데이터를 조금 더 안전하게 전달하는 기능을 추가하는 것이 장점인 것 같다.

두 가지 모두 구현과 테스트를 진행한 뒤, 더 나은 방법으로 선택하겠다.