Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 테스트 코드
- Exception
- AOP
- hashcode
- equals
- 생성자 주입
- SQL
- java
- jpa
- 조합
- static
- DI
- 필드 주입
- MSA
- redis
- stream
- jwt
- KEVISS
- DDL
- cache
- StringBuilder
- 열 속성
- 재정의
- Test
- Spring
- docker
- select_type
- 인덱스
- lambda
- VUE
Archives
- Today
- Total
백엔드 개발자 블로그
SSE 이벤트 푸쉬로 불필요한 Polling 제거하기 본문
SSE 알람 서비스를 구현한 경험을 했지만, 현업에서는 어떻게 사용하고 있는지 궁금하여
토스ㅣSLASH 24 - SSE 이벤트 푸쉬로 불필요한 Polling 제거하기를 리뷰한 글입니다.
https://www.youtube.com/watch?v=ovGgdPPUZ2I
WebSocket vs SSE

사용 사례
WebSocket
- 송/수신량 데이터량이 많을 때 사용
- 시세 위주 사용
SSE
- 불필요한 pollilng 제거할때 사용
- 개인화된 데이터를 이용한 이벤트 푸쉬할 때 사용

Client Side Message 전략
1. broadcasting
한번에 여러곳에 이벤트 푸쉬

구현 방법
webflux로 구현
- 브로드캐스팅 채널 만듦
- 채널 부팅 되자마자 메세지 프로커로부터 수신
- 수신 받는 메세지를 SSE 메세지로 컨버팅
- 브로드 캐스팅 채널에 connect한 client에게 메세지 전달


2. unicasting
개인화된 데이터를 이용한 이벤트 푸쉬

구현 방법
- 개인 채널 만듦
- 개인 데이터 수신
- SSE 메세지로 변환
- 개인 채널에 연결된 클라이언트에게 메세지 전달

개인용 data stream 만드는 방법
1. flux stream 만들기

2. 본인메세지 필터링하는 리스너 발급

3. 메세지 수신하겠다고 메세지 브로커에게 요청

4. Client와 SSE 연결이 끊어지면 메세지 브로커에 구독 취소 요청

실제 사용 사례
1. 보유자산 polling 제거
1. 보유 종목 조회 (3초마다 polling이 이뤄짐)

2. 주문 api

3. 재조회 event
재조회 이벤트가 발생한 경우에만 조회 db 변경

그렇다고 3초 주기 polling을 없앨 수 없으므로 SSE server
이거 둬서 30% 정도 개선됨

2. 안드로이드 푸쉬알람 대체
접속된 사용자는 SSE, 접속 안된 사용자는 FCM
사용자 상태는 redis pub/sub에 저장하여 session으로 사용

Message broker 선택 전략
- kafka : 접속, 비접속 필터링이 어려워서 패스
- redis pub/sub : 접속, 비접속 필터링이 가능해서 선택
- nats : broker로 활용, pub/sub기반, cluster 기능으로 부하분산 가능, redis에 비해 5배 좋음(30k)
정리
1. polling 대체제 : SSE
2. message broker 선택 전략 : nats
3. SSE connection이 정상 close 됬는지 모니터링 도구 : heart beat
'테크 블로그 리뷰' 카테고리의 다른 글
| MSA와 MySQL로 여는 평생 무료 환전 시대 (3) | 2025.08.07 |
|---|---|
| 대규모 트랜잭션 배민 주문시스템 (1) | 2025.08.04 |
| 마이데이터 (0) | 2025.07.03 |
| 보상 트랜잭션으로 분산 환경에서도 안전하게 환전하기 (1) | 2025.07.03 |
| 인덱스와 스캔 튜닝 (0) | 2024.12.11 |
