상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
눈물흘림증이 있는 경우 직장에서의 대처 방법은 무엇인가요?
노예해방 기념일에 대한 교육 자료는 어디에서 찾을 수 있나요?
10대들이 좋아하는 영화의 촬영 장소는 어디인가요?
10대들이 좋아하는 영화의 개인적 영향은 무엇인가요?
20대의 사랑을 다룬 현대 영화는?
40대가 감명 깊게 본 영화는?
40대가 공감할 수 있는 영화의 캐릭터는?
SerDes의 클럭 복구(clock recovery)란 무엇인가요?
SerDes의 전송 방식에서의 데이터 전송의 신뢰성을 높이는 방법은 무엇인가요?
SerDes의 전송 방식에서의 데이터 전송의 환경적 영향은 무엇인가요?
RTK의 응용 분야는 어떤 것이 있나요?
삼항 연산자를 사용하여 사용자 인증 상태를 관리하는 방법은 무엇인가요?
Previous
Next
수정하기 - switchMap을 사용한 API 에러 핸들링 예시는 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap을 사용한 API 에러 핸들링 예시에 대해서 자세히 설명드리겠습니다. RxJS에서 `switchMap` 연산자는 내부 Observable이 바뀔 때 이전 Observable을 취소하고 최신 Observable만 구독하는 기능을 합니다. 이를 통해 API 호출 같은 비동기 작업을 할 때 “이전 요청은 무시하고 최신 요청 결과만 반영”하는 로직을 쉽게 구현할 수 있습니다. 하지만 API 요청 중 에러가 발생할 수 있기 때문에 에러를 적절하게 핸들링하는 것이 중요합니다. `switchMap` 안에서 API 호출 Observable에 대해 `catchError`를 사용해서 에러를 잡는 식으로 구현합니다. 아래는 `switchMap`을 사용한 API 호출과 그 안에서의 에러 핸들링 예시입니다. 가독성을 높이고 경향적인 코드를 주석과 함께 설명하겠습니다. --- 예시 시나리오: 사용자가 입력한 검색어가 변경될 때마다 API를 호출하여 검색 결과를 가져오는데, API 요청 중 에러가 발생하면 사용자에게 에러 메시지를 보여주고 빈 결과를 반환한다. ```typescript import { of, Subject } from 'rxjs'; import { switchMap, debounceTime, distinctUntilChanged, catchError } from 'rxjs/operators'; // 가상의 API 함수: 입력 문자열을 받아서 Observable로 결과 반환 function searchApi(query: string) { return new Observable(observer => { // 실제로는 HttpClient.get() 같은 API 호출이 들어감 // 여기서는 예시를 위해 1초 후 결과를 반환하거나 에러도 반환하도록 함 setTimeout(() => { if (query === 'error') { observer.error(new Error('API 요청 실패!')); } else { observer.next(['result1', 'result2', 'result3'].map(r => `${r} for ${query}`)); observer.complete(); } }, 1000); }); } // 사용자 검색어 입력감지용 Subject const searchInput$ = new Subject<string>(); // 검색어가 변경되면 API 호출하고 에러 처리까지 하는 스트림 const results$ = searchInput$.pipe( debounceTime(300), // 사용자가 멈출 때까지 300ms 대기 distinctUntilChanged(), // 같은 값은 무시 switchMap(query => searchApi(query).pipe( catchError(err => { // 에러를 잡아서 빈 배열을 반환하거나, 별도의 에러 처리 로직 포함 가능 console.error('API 에러 발생:', err.message); // 사용자에게 보여줄 수 있도록 에러 UI 트리거도 가능 return of([]); // 빈 결과로 복구 }) ) ) ); // 구독해서 결과를 처리 (예: UI에 출력) results$.subscribe(results => { console.log('검색 결과:', results); }); // 테스트로 검색어 입력 시뮬레이션 searchInput$.next('apple'); // 정상 결과 setTimeout(() => searchInput$.next('error'), 2000); // 에러 발생 setTimeout(() => searchInput$.next('banana'), 4000); // 다시 정상 결과 ``` --- 중요 포인트 1. API 호출은 `switchMap` 내에서 실행한다: `switchMap`이 새로운 입력이 들어올 때마다 이전 API 호출 Observable을 취소하고 신규 호출을 실행하게 함. 2. 에러는 `switchMap` 내의 API Observable에 대해 `catchError`로 처리한다: 에러가 발생해도 전체 스트림이 종료되지 않고, 에러를 적절히 잡아서 대체 Observable(빈 배열 반환 등)을 반환한다. 3. 에러 처리 방법: - `console.error`같이 로그를 남기거나 - 사용자에게 보여줄 별도의 에러 상태를 외부로 노출한 후 UI에서 처리할 수도 있음 - `of([])`처럼 빈결과, 기본값 Observable을 반환해 스트림이 끊기지 않도록 함 4. 기본 RxJS 연산자와 적절한 조합: - `debounceTime`으로 빠른 연속 입력 억제 - `distinctUntilChanged`로 중복 검색어 무시 5. 사용 사례: 검색, 필터링, 자동완성 API 호출 등 요청이 연속해서 이뤄지고 중간 이전 요청을 무시해야 하는 상황에 적합 --- 이와 같은 방식으로 `switchMap`과 `catchError`를 조합하면 API 호출 중 발생할 수 있는 에러를 효과적으로 처리하면서도 사용자 경험을 저해하지 않는 안정적인 비동기 흐름을 만들 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기