subscribeSeats(eventId: number): Observable<any> {
return interval(SEATS_UPDATE_INTERVAL).pipe(
switchMap(async () => {
const seatsData = await this.getSeats(eventId);
return {
data: { seaStatus: seatsData },
};
}),
);
}
좌석 현황 업데이트, 대기 큐 현황 업데이트에 SSE를 단순 적용한 게 위와 같은 그림이었다.
이 형태는 클라이언트가 몇 개 안될 때에는 큰 문제가 없다.
다만 다음과 같은 경우엔 문제가 생긴다.
위와 같이 좌석 현황을 구독하는 클라이언트가 여러 개일 때를 보자.
클라이언트의 수만큼 Observable 객체가 생성되어야 하며, 이들은 각각 하나의 Interval로 등록되어, 각각이 Redis에게 데이터 요청을 보낸다.
클라이언트마다 특화된 데이터가 필요한 거라면 모를까, 모두 같은 데이터가 요구되는 상황에 이런 형태는 오버헤드가 너무 크다.