상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
구글 클라우드의 Cloud Resource Manager는 어떤 기능을 제공하나요?
상하이의 전통적인 잔치 음식은 무엇인가요?
베이징의 음식에서 가장 많이 사용되는 채소는 무엇인가요?
타이완의 '소고기 볶음'은 어떻게 조리되나요?
타이완의 '소고기 덮밥'은 어떤 맛이 나나요?
타이완의 '닭고기 볶음밥'은 어떤 재료가 들어가나요?
서비스 계정의 키가 유출되었을 때 대처 방법은?
서비스 계정의 권한을 부여하는 방법은?
강아지 발톱을 자르는 도구의 선택 기준은 무엇인가요?
강아지 발톱을 자르는 도구를 선택할 때 고려해야 할 요소는 무엇인가요?
국회의원은 어떤 방식으로 지역 주민의 의견을 반영하나요?
전체주의 체제에서의 외부 비판은 어떻게 다루어지는가?
Previous
Next
수정하기 - switchMap을 사용하여 여러 API 호출을 동시에 관리하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap은 RxJS에서 흔히 사용하는 연산자로, 내부적으로 이전 Observable의 구독을 취소하고 새로운 Observable로 전환하는 역할을 합니다. 여러 API 호출을 동시에 관리할 때 switchMap을 활용하는 방법을 이해하려면 기본 동작과 응용 방법을 구분해서 살펴보는 것이 중요합니다. --- 1. switchMap 기본 개념 - 이전 스트림 취소 switchMap은 새로운 Observable이 발행되면 기존에 실행 중인 내부 Observable의 구독을 자동으로 취소합니다. 즉, 최신 요청만 유효하며 이전 요청은 무시하거나 중단되는 방식입니다. - 주로 입력 변화 시 API 호출에 적합 예를 들어 사용자가 검색어를 입력할 때마다 API를 호출한다면 switchMap을 사용해 이전 요청을 취소하고 최신 입력에 대한 결과만 최신 상태로 유지할 수 있습니다. --- 2. 여러 API 호출을 ’동시에’ 관리하는 문제와 switchMap switchMap은 “동시에 여러 API 호출을 모두 병렬로 보내고 결과를 함께 처리”하기 위한 연산자는 아닙니다. 오히려, 한 번의 스트림 내에서 발생하는 여러 API 호출 중 최신 호출만 살리는 데 특화되어 있습니다. 하지만 다음과 같이 실제 여러 API 호출을 효율적으로 관리하는 데 활용할 수 있습니다. --- 3. 여러 API 호출을 관리하는 대표적인 패턴 케이스 1: 순차적 API 호출 중첩 (연쇄 호출) ```typescript source$.pipe( switchMap(value1 => apiCall1(value1).pipe( switchMap(response1 => apiCall2(response1.someId)) ) ) ) ``` - 첫 번째 API 호출 결과를 바탕으로 두 번째 API 호출이 이루어지는 경우 적합. - switchMap이 중첩되어 이전 호출 취소 효과가 모두 적용됨. --- 케이스 2: 사용자의 입력에 따른 여러 API 호출 중 최신 요청만 유지 예: 검색창에 입력할 때마다 두 개 이상의 API 동일한 쿼리를 호출해야 할 경우 ```typescript input$.pipe( switchMap(query => forkJoin({ api1Result: apiCall1(query), api2Result: apiCall2(query) })) ) ``` - 입력이 바뀔 때마다 apiCall1, apiCall2가 병렬로 호출됨. - 입력이 바뀌면 이전 forkJoin의 모든 내부 호출이 취소되고 최신 호출만 살아남음. --- 케이스 3: 여러 API 호출을 병렬로 "항상 모두" 실행해야 하는 경우에는 switchMap보다는 다른 연산자 권장 - 만약 여러 API 요청을 동시에 보내고 각각의 응답을 별도로 처리하고 싶다면 forkJoin, combineLatest, zip 등이 더 적합합니다. - switchMap은 오히려 오래걸리는 이전 호출을 취소하고 최신 호출만 반영하는 데 중점. --- 4. 실제 구현 시 주의사항 - 비동기 호출 취소 가능 여부 확인 switchMap은 Observable 구독 취소 시 내부 비동기 작업을 취소하지 않을 수 있음(특히 P<a href='https://sangseek.com/sangseeks/romise/ko'>romise</a> 기반 API). AJAX 요청을 RxJS ajax 또는 HttpClient로 하면 취소 토큰을 지원해 실제 네트워크 요청 취소 가능. - 에러 처리 내부 API 호출에서 에러가 나면 전체 스트림이 종료될 수 있으므로 catchError 등을 활용해 에러를 적절히 관리해야 함. - 성능 최적화 사용자 입력이나 반복 호출이 자주 일어나는 경우 debounceTime, distinctUntilChanged 등을 함께 사용해 불필요한 호출을 줄이는 전략 필요. --- 정리 - switchMap은 여러 API 호출 중 '항상 최신 요청만 유지'할 때 유용하다. - 여러 API를 병렬로 동시에 호출해서 모두 받아야 할 경우 forkJoin과 함께 switchMap을 조합 가능하다. - 직접 병렬 호출하는 경우는 switchMap보다는 forkJoin, combineLatest 등 별도 연산자가 적합하다. - 입력변경 시 API 호출 관리에 debounceTime, distinctUntilChanged 같이 다른 연산자도 같이 사용해서 최적화를 권장한다. --- 예시 코드: 사용자 입력 따라 2개 API 호출(병렬) + 최신 요청만 유지 ```typescript input$.pipe( debounceTime(300), distinctUntilChanged(), switchMap(query => forkJoin({ users: userApi.searchUsers(query), posts: postApi.searchPosts(query) })) ).subscribe(results => { console.log('사용자 결과', results.users); console.log('게시글 결과', results.posts); }); ``` - 입력이 바뀌면 기존 요청은 취소됨(실제로 네트워크 요청 취소는 RxJS ajax 또는 HttpClient 사용 시 가능). - 두 API 호출은 병렬 실행되고 결과는 동시에 반환됨. - 항상 최신 입력에 관한 결과만 화면에 반영됨. --- 이렇게 switchMap을 기반으로 여러 API 호출을 관리하고 최신 상태를 효율적으로 유지하는 방법을 설계할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기