프로젝트를 진행하면서, 거래완료
와 정산완료
시, 푸시 알림을 구현해야했다. 푸시 알림을 어떻게 구현하면 좋을지 구글링해보다가, Real Time System에 대한 기초적인 공부와, 대표적인 기술인 FCM과 SSE에 대해 공부해보자. 🌱
Real Time System
“결과의 유효성이 얼마큼의 시간동안 유효한가” ⇒ deadline
- 시간의 정밀성을 요구
- Hard Real-Time System
- deadline 이전에 반드시 결과값을 돌려줘야하는 시스템
- deadline 이후에 결과값이 전달시, 유효하지 않는 결과값
ex) 공장
- Soft Real-Time System
- deadline이 지나더라도 결과값의 유효성이 떨어지긴 하나, 무효 x
- 시간의 경과에 따라 유효성이 줄어들고
- 특정 임계점을 지나게 되면 완전히 무효
ex) VOD service
⏰ 알림 기능
FCM
- Firebase Cloud Messaging
- 안정적으로 클라이언트 인스턴스에게 전송할 수 있는 교차 플랫폼 메시징 솔루션


동작과정
💡
FCM 작동 간략 설명
Server
↔ FCM
↔ Client
- 클라이언트가 FCM 서버에서 유저별로 고유하게 발급되는 FCM 토큰을 발급받음
- 서버는 클라이언트로부터 해당 토큰을 전달받고 저장
- 특정 상황에 메시지에 토큰을 담아서 FCM 서버에 전송시, FCM이 해당 토큰의 유저에게 메시지를 전송
클라이언트가 fcm 서버에 등록되는 단계
Client
→FCM
: FCM서버에서 유저별로 고유하게 발급되는 FCM 토큰 요청
FCM
→Client
: 요청한 토큰(키) 전달
Client
→Server
: FCM 토큰 전달
Server
: FCM 토큰 DB에 저장
서버가 web에 데이터를 전달하는 과정
- DB에서 특정 클라이언트의 토큰 추출
Server
→FCM
: 특정 토큰, 데이터를 HTTP를 이용하여 FCM에 전달
FCM
→Client
: 전달받은 토큰을 식별해서, 클라이언트에게 데이터 전달
장점
- “교차 플랫폼 메시징 서비스” 이므로, 메시징을 클라이언트 플랫폼(Web, IOS, Android) 환경 별로 개발할 필요 x
└ 즉, 플랫폼 종속 없이 메시지 전송 구현 가능 ⇒ 복잡성 🔻
- 기존 애플리케이션 서버 자체에 메시징 기능을 추가하는 것이 아니므로, 클라이언트가 애플리케이션 서버에 계속 접속해야하지 않아도 된다.
Server
↔Client
: 네트워크 효율 🔻 & 디바이스 전략 사용 🔺
Server
↔FCM
↔Client
: Client는 FCM 서버에만 상주하면 되므로, 위의 단점 보완 가능
단점
- SSE와 달리, 별도의 여러 설정 필요
- SSE보다 느리기에 Soft Real-Time System 에 적합
- FCM 서버에 의존하므로, FCM 서버 상태에 따라 지연 가능
🔗 참고 url
SSE
- Server Send Events
- Web Socket과 같이, Server와 Client간 데이터 송수신 기술
Short Polling
SSE
- 서버와 한 번 연결을 맺고 나면, 일정 시간동안 서버에서 변경이 발생할 때마다 데이터를 전송받는 방법

동작과정
Client
→Server
: SSE 연결 요청
Server
: 클라이언트와 매핑되는 SSE 통신 객체 만들기
Server
→Client
: 서버 데이터 변경시, 해당 SSE 객체를 통해 데이터 전달
장점
- HTTP를 제외한 다른 프로토콜을 사용하지 않아 가볍다
- 서버에서 클라이언트로의 단방향 통신만 가능하므로, 클라이언트의 상호작용 없이 서버로부터 데이터가 전달되어야하는 상황에 적합
단점
- payload의 크기가 제한적이여서 많은 데이터를 담을 수 없다.
- 실시간 통신 기술의 단점
- 클라이언트와 서버간에 지속적인 연결이 유지되어야한다. ⇒ 동시에 많은 사용자를 처리하려면 ? 서버 리소스가 많이 필요
- 지속적인 연결은 공격자에게 추가적인 공격 벡터를 제공할 수 있으므로, 보안을 철저히 고려해야함
- 모든 웹 브라우저가 실시간 통신 기술을 동일하게 지원하지 않음
🔗 참고 URL
🔗 참고 url
https://developer-jp.tistory.com/87
https://gilssang97.tistory.com/69
https://tecoble.techcourse.co.kr/post/2022-10-11-server-sent-events/
Uploaded by N2T