SSA/Back

[SSA] 서버 FCM 기능 구현

하가네 2025. 5. 4. 19:52

간단하게 알림 서비스 기능에 대해서 정리해 봤습니다.

이것보다 더 자세한 내용은 각각을 찾아 보도록 하겠습니다.

기술 설명 장점 단점 사용 사례
폴링 (Polling) 클라이언트가 일정 주기로 서버에 데이터 요청 구현이 간단 네트워크 트래픽 증가, 실시간성 떨어짐 간단한 상태 체크
롱 폴링 (Long Polling) 요청이 도착할 때까지 서버가 응답을 대기 실시간성 향상 연결이 많아지면 서버 부하 증가 Slack의 알림, 일부 AJAX 채팅
SSE (Server-Sent Events) 서버가 클라이언트로 지속적인 단방향 메시지 전송 브라우저 지원, 단방향 푸시에 적합 양방향 통신 불가, 브라우저 한정 실시간 알림
WebSocket 서버-클라이언트 간 양방향 통신 실시간성, 양방향 모두 지원 복잡한 인프라 구성 필요 채팅, 게임, 협업 앱
FCM (Firebase Cloud Messaging) Google의 푸시 알림 서비스 (모바일/웹) 모바일 친화적, 백그라운드 푸시 지원 Firebase 종속, Android/iOS 외 사용 어려움 푸시 알림, 모바일 메시징 앱

 

 

SSA는 앱 사용을 우선적으로 가정하였기 때문에 FCM을 먼저 구현하고자 결정했습니다.

FCM에 대해 자세히 알아 보자면,

FCM 이란 ?

Firebase Cloud Messaging의 약자로 Android, iOS 및 웹 애플리케이션의 메시지 및 알림을 위한 크로스 플랫폼 클라우드 솔루션

 

FCM 작동 원리

  • 서비스 서버가 Firebase 서버에 키 획득을 위한 요청을 보냄
  • Firebase 서버에서 키를 만들어 클라이언트에 전달
  • 클라이언트에 전달된 키를 서버에 전송
  • 서비스 서버는 전달받은 키를 DB에 저장하여 타겟 모바일의 identification으로 사용

서버에서 데이터를 스마트폰에 전달하는 절차

  • 서버에서 타겟 클라이언트에 데이터를 전달하기 위해 DB에서 키를 획득
  • DB의 키와 전송하고자 하는 데이터를 HTTP 통신으로 Firebase 서버에 전달
  • Firebase 서버에서는 전달받은 키 값을 식별해 어떤 클라이언트인지를 식별
  • 식별된 클라이언트에 데이터 전달

 

FCM 의 장점

  • FCM은 교차 플랫폼 메시지 솔루션이기 때문에 플랫폼에 종속되지 않고 Push 메시지를 전송할 수 있다.
  • FCM에서 제공하는 여러 기능들도 함께 사용 가능하다.
  • 기능 구축 시간과 비용이 줄어든다.
  • 중간 클라우드 메시징 서버 덕에, 사용자는 낮은 배터리와 네트워크의 사용만으로도 메세지를 송수신 처리를 할 수 있다.

 

FCM 의 단점

  • SSE에 비해서 별도의 설정이 추가로 필요하다.
  • real-time 서비스이긴 하지만 장치 연결 상태, 메시지의 크기와 포맷, 네트워크 상태 등 전송 시간 지연 요소들이 존재한다.
  • SSE의 실시간성에 비해서 느린 편이기 때문에 연성 실시간(soft real-time) 시스템에 적합하다.

 

정리하자면, Firebase 기반의 모바일 친화적인 알림 기술입니다.

 

 

현재는 수강 신청 기능과 신청 알림 기능이 모놀리틱 구조에서 구현되어 있습니다.

이 경우 발생할 수 있는 문제점은 다음과 같습니다.

구분 설명
결합도 증가 신청 기능과 알림 기능이 강하게 결합되어 기능 변경 시 영향 범위가 넓어짐
확장성 부족 알림 트래픽이 증가할수록 전체 서버의 리소스가 소모되어 신청 기능도 영향 받음
장애 전파 위험 알림 서비스가 실패하거나 장애가 발생하면 수강신청 처리도 함께 실패함
테스트 복잡성 두 기능이 강하게 연결되어 있어 단위 테스트 및 통합 테스트가 어려워짐
배포 리스크 알림 기능 수정 시 신청 기능도 함께 배포되어야 하는 상황 발생 가능
비동기 이벤트 처리 어려움 실시간 알림을 위해 이벤트 기반 구조로 확장하기 어려움

위와 같은 문제로

다음과 같이 서버를 분리하고자 합니다.

  • 수강 신청 서버
  • 신청 알림 서버

 

서버를 분리하면 얻을 수 있는 장점과 단점 해소는 다음과 같습니다.

  • 서비스 간 결합도가 낮아지고 각각이 가지는 독립성이 증가하여 응집도가 높아질 수 있습니다.
  • 각 기능의 수정이 다른 기능에 미치는 영향을 줄일 수 있습니다.
  • 장애가 발생해도 다른 기능에까지 그 영향이 미치지 않도록 격리할 수 있습니다.
  • 하나의 서버에 가해지는 트래픽이 분산되어 연산량을 줄일 수 있습니다.

당연히 이에 따른 단점도 존재합니다만, 학습용 목적으로 분리해 보겠습니다.

단점은 다음과 같습니다.

  • 서버를 여러 개로 구현하게 되어 복잡한 인프라 구성이 필요할 수 있습니다.
  • 내부 서버가 아니라 외부 서버 간 통신으로 인해 성능이 줄어들 수 있습니다.

 

 

 

 

추가 학습 후 작성 예정 ...