상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - switchMap과 debounceTime의 조합은 어떻게 사용하나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap과 debounceTime은 RxJS에서 자주 함께 사용되는 연산자로, 주로 입력값의 변경을 처리하면서 불필요한 중복 요청을 방지할 때 유용합니다. 특히, 사용자가 입력 필드에 타이핑할 때 즉각적으로 이벤트를 발생시키는 대신 일정 시간 동안 입력이 없으면(디바운스) 마지막 입력값에 대해 비동기 작업(예: API 요청)을 실행하도록 할 때 쓰입니다. 주요 개념 - debounceTime(ms) : 이벤트 스트림에서 마지막 이벤트가 발생한 후 지정한 시간(ms)만큼 추가 이벤트가 없으면 그 때 마지막 이벤트를 방출합니다. 즉, 빠른 연속 이벤트 중 마지막 이벤트 하나만 방출해 쓸데없는 이벤트 처리를 줄입니다. - switchMap(fn) : 최근에 들어온 값을 기준으로 다른 Observable을 생성해 구독하고, 이전 구독은 취소합니다. 따라서 중첩된 비동기 요청 중 가장 최신 요청 결과만 반영하며, 이전 요청에서 반환될 데이터는 무시합니다. 함께 사용하는 이유 사용자가 입력 필드에 글자를 빠르게 입력하는 동안, debounceTime을 통해 입력이 잠시 멈출 때까지 기다려 불필요한 중간 요청을 줄이고, switchMap으로 실제 API 호출과 같은 비동기 작업을 수행하면서 이전 요청들이 완료되지 않았더라도 취소하여 최신 입력 데이터만 처리합니다. --- 사용 예시 설명 ```typescript import { fromEvent } from 'rxjs'; import { debounceTime, switchMap, map } from 'rxjs/operators'; import { ajax } from 'rxjs/ajax'; const inputElement = document.getElementById('search'); // 1. input 이벤트를 스트림으로 가져오기 const input$ = fromEvent(inputElement, 'input').pipe( // 2. 이벤트 객체에서 실제 입력 값만 추출 map((event: InputEvent) => (event.target as HTMLInputElement).value), // 3. debounceTime을 걸어 입력이 멈춘 후 300ms 뒤에 마지막 입력값만 방출 debounceTime(300), // 4. debounce된 값을 받아 switchMap으로 API 호출 switchMap(searchTerm => { if (!searchTerm.trim()) { // 검색어가 없으면 빈 배열로 Observable 반환(빈 결과 처리 등) return of([]); } // ajax 호출로 검색어에 따른 데이터 요청 return ajax.getJSON(`https://api.example.com/search?q=${searchTerm}`); }) ); // 5. 결과 구독 및 처리 input$.subscribe(result => { console.log('검색 결과:', result); }); ``` --- 핵심 동작 순서 1. 사용자가 글자를 입력하면 input 이벤트가 발생함. 2. 입력 이벤트에서 바로 값을 방출하는 대신 debounceTime(300ms)을 거쳐 사용자가 타이핑을 멈출 때까지 기다림. 3. 시간 지난 뒤 마지막 입력값으로 switchMap이 실행되어 API 호출을 시작. 4. 만약 타이핑이 빨라 다시 입력되어 debounceTime이 다시 대기하면 아직 진행 중인 switchMap 내부의 이전 API 호출은 무시(또는 취소)되고 새로운 요청만 진행됨. 5. 최신 검색어에 대한 결과만 구독자에게 전달되어 불필요한 중복 요청 및 UI 응답 지연 방지. --- 주의사항 - debounceTime 활용 시 적절한 시간 설정 : 사용성(빠른 반응)과 API 호출 방지 사이에서 적절한 값을 찾아야 함. - switchMap 내부에서 반환하는 Observable은 반드시 취소 가능해야 함 : ajax 호출은 자동으로 취소되므로 적합. 직접 프로미스 등을 쓰면 취소 구현이 안될 수 있음. - 빈 입력값 처리도 switchMap 안에서 고려하는 것이 좋음. --- 요약 - debounceTime은 이벤트 스트림에서 중복 이벤트를 줄여준다. - switchMap은 내부 비동기 Observable을 새 값으로 교체하고 이전 결과 무시한다. - 둘을 조합하면 사용자의 빠른 입력 이벤트를 효과적으로 처리하며 최신 결과만 반영하는 안정적인 비동기 로직을 만들 수 있다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기