상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - switchMap을 사용한 페이지네이션 구현 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap을 사용한 페이지네이션 구현은 RxJS(리액티브 프로그래밍 라이브러리)를 활용할 때 매우 유용한 패턴입니다. 특히 사용자가 페이지 번호를 변경할 때 이전에 실행된 비동기 요청을 취소하고, 최신 요청만 처리하기 위해 switchMap을 사용합니다. 아래에 switchMap을 활용한 페이지네이션 구현 방법을 단계별로 자세히 설명하겠습니다. --- 1. 기본 <a href='https://sangseek.com/sangseeks/개념 정리/ko'>개념 정리</a> - switchMap : Observable이 방출하는 값을 받아 새로운 Observable로 매핑하고, 이전에 생성된 Observable이 아직 완료되지 않았다면 취소한다. 즉, 마지막으로 들어온 값만 처리한다. - 페이지네이션에서의 역할 : 사용자가 페이지를 변경할 때 이전 페이지 데이터 요청은 취소하고, 최신 페이지 데이터 요청만 처리해서 불필요한 리소스 낭비 방지와 UI 일관성 유지를 도와준다. --- 2. 구현을 위한 주요 요소 - 페이지 번호를 방출하는 Observable 사용자가 페이지 번호를 변경할 때마다 새로운 페이지 번호를 방출하는 Subject 또는 BehaviorSubject가 필요하다. - 데이터를 가져오는 함수 실제 API 요청을 하는 함수가 필요하다. 이 함수는 페이지 번호를 인자로 받아 해당 페이지 데이터를 반환하는 Observable을 리턴해야 한다. --- 3. 코드 예시 및 동작 설명 3-1) 페이지 번호 Subject 생성 ```typescript import { BehaviorSubject } from 'rxjs'; const pageNumber$ = new BehaviorSubject<number>(1); // 초기 페이지는 1 ``` - BehaviorSubject를 사용하면 초기값(1)을 가지고 시작하며, 페이지 변경 시 next() 호출로 값을 방출한다. 3-2) 데이터 요청 함수 정의 ```typescript import { Observable, of } from 'rxjs'; import { ajax } from 'rxjs/ajax'; function fetchData(page: number): Observable<MyDataType> { return ajax.getJSON<MyDataType>(`https://api.example.com/data?page=${page}`); } ``` - 예시로 ajax.getJSON을 사용했지만, 실제로는 HttpClient 등 어떤 비동기 호출이든 Observable을 반환하면 된다. 3-3) 페이지 번호 변경 시 데이터 요청 파이프라인 구축 ```typescript import { switchMap } from 'rxjs/operators'; // 최신 페이지 번호에 따라 데이터 요청 실행 const data$ = pageNumber$.pipe( switchMap(page => fetchData(page)) ); ``` - pageNumber$가 방출하는 값마다 fetchData(page)가 호출된다. - 이전에 진행되고 있던 fetchData 호출은 switchMap에 의해 자동 취소된다. - 따라서 항상 최신 페이지에 대한 데이터만 스트림을 통해 전달된다. 3-4) 페이지 번호 변경 함수 및 구독 ```typescript // 페이지 변경 함수 function changePage(page: number) { pageNumber$.next(page); } // 데이터 구독 및 처리 data$.subscribe(data => { // 받은 데이터를 UI에 렌더링 console.log('페이지 데이터:', data); }); ``` - 사용자가 페이지 번호를 변경할 때마다 changePage를 호출한다. - data$를 구독하고, 데이터를 받으면 필요한 UI 업데이트를 수행한다. --- 4. 추가 고려사항 - 오류 처리 switchMap 내부에서 발생하는 에러를 처리해야 한다면 pipe 내에 catchError 연산자를 사용하거나 data$ 구독 시 에러 콜백을 활용할 수 있다. - 초기 로딩 표시 페이지 번호가 바뀌면 로딩 상태를 표시하고, 데이터가 도착하면 그 상태를 해제하는 로직을 추가할 수 있다. - 비동기 취소의 장점 사용자가 매우 빠르게 페이지를 이동할 경우 이전 데이터 요청이 취소되어 네트워크 낭비를 줄이고, 뒤섞인 데이터가 UI에 표시되는 문제를 방지한다. --- 정리 1. 페이지 번호를 방출하는 Subject/BehaviorSubject 생성 2. 페이지 번호에 따라 데이터를 Observable로 요청하는 함수 정의 3. 페이지 번호 스트림에 switchMap을 연결해 최신 요청만 처리하도록 함 4. 페이지 변경 시 Subject에 next 호출로 새로운 페이지 트리거 5. 결과 Observable을 구독해 UI 업데이트 이런 패턴을 사용하면 페이지네이션 구현에서 효율적인 데이터 요청과 취소 처리가 자연스럽게 이루어져 성능과 사용자 경험이 향상됩니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기