
2025년 4월 13일의 고민 노션에서 옮겨오고 있습니다.
고민
비밀로그는 젊은 층을 저격한 SNS의 특성상 유행이 빠르게 일어나고 빠르게 사라질 특성을 가진 서비스
유행 탄 초반에는 순간적으로 대량의 알림이 일어날 수 있음
롤링페이퍼에 메시지가 달릴때 알림이 발생 친구가 메시지 보낼 때 친구의 친구가 메시지를 보낼 수도 있기 때문에 동시성이 보장되어야 함. 알림은 최대 30개까지 저장되며 개인이 삭제하지 않는 이상 다시 읽을 수 있어야 함.
모바일 유저는 백그라운드에서 알림을 받을 수 있어야 함.
목표:
1. 1분에 500개의 알림을 처리할 수 있는 성능
2. 동시성 보장
3. 실시간성 보장
4. 유실 방지
5. 모바일 유저만을 위한 전용 알림 기능
과정
제외 기술
폴링, 롱 폴링 : 계속 Get요청을 보내는 것이 IO자원을 갉아먹어 성능에 좋지 못할 것이라는 판단 1분의 500개라는 목표가 있기 때문에 부하를 줄 수 있는 방식은 지양
웹 소켓 : 양방향 통신 기능은 필요하지 않음, 연결 유지 비용이 SSE보다 큼
RabbitMQ : 메시지 유실 우려가 없다는 장점은 있으나, Redis를 활용할 예정이기 때문에 추가 도입의 필요성이 낮음
카프카 : 고성능이 장점이나, 현재 서비스 규모에 비해 오버엔지니어링 우려
선택 기술
실시간 통신 - SSE : 단방향 알림 구조에 적합, 웹 소켓 대비 자원 소모 적음, 실시간 푸시 가능
메시지 큐 - Redis List : 알림을 큐처럼 저장하고 일정 개수의 과거 알림 제공, Redis를 차후에 캐시 및 세션 등 다른 영역에도 사용할 가능성이 커 기술 통일 가능, Redis Stream은 용도에 비해 무겁고, Pub/Sub은 메시지 유실 우려가 있어 제외
푸시 알림 - FCM : 무료로 안드로이드, iOS 모두 지원, 안정적이고 관련 문선 및 예제 풍부, 서버에서 직접 REST API로 발송 가능하여 유연성 확보
해결
SSE, FCM, Redis List
서비스의 실시간성과 확장성, 유지 보수성을 고려하여 가볍고 효율적인 기술 조합을 구성. 서비스 초기에는 Redis 기반의 단순 큐 구조와 SSE를 활용하고, 모바일 확장성은 FCM을 통해 확보하는 방향으로 설계
'트러블슈팅과 고민' 카테고리의 다른 글
| 롤링페이퍼 유저 상호작용 부하 테스트 및 성능 개선 (0) | 2025.08.07 |
|---|---|
| 추가적인 보안 관련 고민 (2025년 4월 26일) (0) | 2025.08.07 |
| 단일책임원칙에 대한 고민 (1) | 2025.08.06 |
| DB를 거치지 않은 JWT을 통한 사용자 식별에 관해 (2025년 4월 7일) (0) | 2025.08.03 |
| 회원가입 기능 설계에 대한 고민 (2025년 3월 29일) (0) | 2025.08.03 |