상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - switchMap을 사용한 서버 사이드 이벤트 처리 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap 연산자를 사용하여 서버 사이드 이벤트(Server-Sent Events, SSE)를 처리하는 방법에 대해 단계별로 자세히 설명해드리겠습니다. RxJS의 switchMap은 내부 Observable을 생성하거나 변경할 때 이전 Observable을 구독 해지하고 새로운 Observable로 전환하는 데 유용합니다. SSE 스트림 처리를 할 때, 특정 이벤트나 조건에 따라 SSE 연결을 재설정하거나 새로운 요청을 보낼 때 매우 효과적입니다. --- 기본 개념 서버 사이드 이벤트는 서버가 클라이언트로 지속적으로 이벤트 데이터를 푸시하는 방식입니다. 보통 EventSource API를 사용하거나, RxJS에서는 `fromEvent` 같은 함수와 함께 Observable로 감싸서 처리합니다. RxJS의 switchMap을 활용하면 다음과 같은 장점이 있습니다: - 새로운 내부 Observable로 전환 시 기존 SSE 스트림 구독을 자동으로 해지해줌. - 여러 번 SSE 연결을 변경하거나 재구축하는 작업을 간단하게 관리함. - 이벤트 소스 변경 등 동적인 상황에 유연하게 대응 가능. --- switchMap을 활용한 SSE 처리 단계 1. 이벤트 소스 생성 먼저 서버 사이드 이벤트를 받아 처리하기 위한 EventSource를 생성합니다. EventSource는 브라우저에서 SSE를 위한 표준 API입니다. 2. RxJS Observable로 감싸기 EventSource에 `fromEvent`를 사용해 특정 이벤트(예: 'message')를 Observable로 만듭니다. 3. switchMap 적용 대상 Observable 보통 사용자의 입력, 선택, 또는 다른 이벤트(예: 버튼 클릭, 파라미터 변경 등)를 Observable로 만들어 SSE 스트림에 대한 재설정을 <a href='https://sangseek.com/sangseeks/트리거/ko'>트리거</a>합니다. 4. switchMap 안에서 EventSource Observable 반환 switchMap 안에서 EventSource와 fromEvent를 이용해 SSE 스트림 Observable을 반환합니다. switchMap이 자동으로 이전 SSE Observable을 해지하고 새로운 SSE 구독을 생성합니다. 5. 구독과 이벤트 처리 최종 스트림에 구독하여 서버가 보낸 데이터를 받아 처리합니다. --- 예시 코드 설명 ```typescript import { fromEvent, of } from 'rxjs'; import { switchMap, map, catchError } from 'rxjs/operators'; function createSSEObservable(url: string) { return new Observable<string>(subscriber => { const es = new EventSource(url); es.onmessage = event => { subscriber.next(event.data); }; es.onerror = err => { subscriber.error(err); es.close(); }; return () => { es.close(); }; }); } // 예를 들어 유저가 선택한 ID에 따라 SSE를 연결한다고 가정 const userSelection$ = ...; // 사용자의 선택(예: 버튼 클릭이나 입력값) Observable const sseStream$ = userSelection$.pipe( switchMap(selectedId => { const url = `https://api.example.com/sse/${selectedId}`; return createSSEObservable(url).pipe( catchError(err => { console.error('SSE connection error:', err); // 연결 실패 시 빈 Observable 반환하거나 재시도 로직 넣을 수도 있음 return of(`Error: ${err}`); }), ); }), ); sseStream$.subscribe(data => { console.log('Server-sent event data:', data); }); ``` --- 주요 포인트 - `switchMap`은 `userSelection$`에서 새 이벤트가 발생할 때마다 기존 SSE 연동을 종료하고, 새로운 SSE Observable로 전환함. 이렇게 하면 불필요한 SSE 중복 연결이 방지됨. - `createSSEObservable` 함수는 EventSource 객체를 Observable로 감싸 SSE의 메시지를 스트림으로 노출함. - 에러가 발생하면 `catchError`로 적절히 처리하고 필요에 따라 사용자에게 알림, 재시도 등을 구현 가능. - 구독자는 SSE에서 오는 메시지를 실시간으로 받아 처리함. --- 정리 - 서버 사이드 이벤트는 `EventSource` API를 사용해 스트림을 생성. - RxJS의 `switchMap`으로 키 입력, 설정 변경 등 이벤트에 따른 SSE 스트림 전환을 관리. - 이전 SSE 스트림을 자동으로 해제해 효율적인 리소스 관리. - 에러 처리 및 재연결 로직을 추가해 안정적인 SSE 처리 환경 구성 가능. 이처럼 RxJS의 switchMap은 서버 사이드 이벤트를 동적으로 제어하고 안전하게 연결 상태를 관리하는 데 매우 유용합니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기