상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
흰우유와 함께 먹으면 좋은 음식은?
흰우유의 냉동 보관 방법은?
고도비만 예방을 위한 10가지 운동 추천
고도비만과 수면의 관계, 5가지 흥미로운 사실
고도비만 예방을 위한 5가지 필수 정보
AI의 협상 기술은 어떤 방식으로 작동하는가?
생수1리터에 포함된 미네랄 성분은 무엇인가요?
위내시경의 장점과 단점은 무엇인가요?
위내시경 후 회복 기간 동안의 활동 제약은?
창업대출을 통해 현금 흐름 관리 방법은?
복부CT: 현대 의학이 제공하는 6가지 혜택
"다이어트약: 4주 동안의 비밀 공개!"
Previous
Next
수정하기 - switchMap을 사용하여 뉴스 피드를 업데이트하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap을 사용하여 뉴스 피드를 업데이트하는 방법에 대해 자세히 설명드리겠습니다. --- 1. 문제 상황과 switchMap의 필요성 뉴스 피드를 업데이트할 때, 보통 사용자가 분류(카테고리)나 검색어를 변경할 때마다 새로운 API 요청을 보내 최신 뉴스를 받아옵니다. 하지만 사용자가 빠르게 여러 요청을 보내는 경우(예: 카테고리 버튼을 연이어 누르는 경우), 이전 요청들의 응답이 나중에 도착하면서 화면이 이전 요청 데이터로 덮어쓰여 잘못된 뉴스가 보여질 수 있습니다. 이 문제를 해결하기 위해 Reactive 프로그래밍 라이브러리(RxJS)에서 제공하는 `switchMap` 연산자를 사용합니다. --- 2. switchMap의 역할 - `switchMap`은 내부 옵저버블(예: 네트워크 요청)을 구독할 때 이전에 구독되었던 내부 옵저버블을 취소(구독 해지)합니다. - 따라서 앞선 비동기 요청이 완료되지 않았더라도, 새로운 요청이 시작되면 이전 요청 결과는 무시되고 오직 최신 요청 결과만 처리됩니다. - 이는 API 요청이 응답 순서와 상관없이 최신 요청의 응답만 화면에 반영하도록 보장합니다. --- 3. 뉴스 피드 업데이트 예시 시나리오 - 사용자가 뉴스 카테고리(예: 정치, 경제, 스포츠)를 선택할 때마다 이벤트가 발생합니다. - 각 이벤트는 해당 카테고리의 뉴스 콘텐츠를 서버에서 받아오는 API 호출로 연결됩니다. - API 호출 결과로 받은 뉴스를 화면에 렌더링합니다. --- 4. switchMap 사용 방법 1. 이벤트 스트림 생성 - 예를 들어, 카테고리 선택 이벤트를 RxJS의 Observable로 만듭니다. - 이 Observable은 사용자가 카테고리를 변경할 때마다 새로운 값(선택된 카테고리)을 방출합니다. 2. switchMap 적용 - 이 카테고리 스트림에 `switchMap`을 적용해 API 요청 Observable로 매핑합니다. - 즉, `switchMap(category => api.fetchNews(category))` 형태로 사용합니다. 3. 결과 처리 및 렌더링 - `switchMap`을 통해 API 결과가 한 스트림으로 합쳐지므로 구독(subscribe)하여 결과를 받고 화면을 업데이트합니다. --- 5. 상세 코드 예시 (TypeScript + RxJS) ```typescript import { fromEvent } from 'rxjs'; import { switchMap, debounceTime, map } from 'rxjs/operators'; // 예시: 카테고리 버튼 클릭 이벤트 Observable 생성 (DOM 요소 가정) const categoryButtons = document.querySelectorAll('.category-button'); const categoryClicks$ = fromEvent(categoryButtons, 'click').pipe( map(event => (event.target as HTMLElement).dataset.category), debounceTime(300), // 빠른 클릭 방지용 딜레이 적용(선택사항) ); // API 호출 함수 (카테고리명으로 뉴스 요청) function fetchNews(category: string) { // fetch 또는 axios 등으로 HTTP 요청을 반환하는 Observable로 구현 return from(fetch(`/api/news?category=${category}`).then(res => res.json())); } // 카테고리 선택 시마다 API 요청을 switchMap으로 연결 const newsFeed$ = categoryClicks$.pipe( switchMap(category => fetchNews(category)) ); // 구독하여 UI 업데이트 newsFeed$.subscribe(newsData => { // 뉴스 데이터를 받아 화면에 렌더링하는 함수 호출 renderNewsFeed(newsData); }); ``` --- 6. 요약 - 사용자의 이벤트 시퀀스를 옵저버블로 만들고, - `switchMap`으로 각 이벤트에 대해 API 호출 옵저버블을 연결, - 이전 API 호출이 끝나지 않았으면 취소하고 최신 호출로 대체, - 최신 뉴스 데이터만 구독하고 이를 UI에 반영. 이로 인해 빠르게 변경되는 사용자의 입력에도 불필요한 API 응답 처리가 줄고, 항상 최신 데이터로 뉴스 피드가 정확하게 업데이트됩니다. --- 필요하면 검색어 입력 자동완성, 페이지네이션 등에도 같은 방식을 적용하여 효율적이고 깔끔한 데이터 관리가 가능합니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기