학습/WebFlux

필터형 Operator - API

looco 2024. 12. 3. 13:11

🌟 Reactor Practice: Filtering Operators 🌟

🎯 Table of Contents

연산자 설명
🎯 Filter 동기적으로 조건에 맞는 데이터를 필터링하는 연산자
🚀 FilterWhen 비동기적으로 조건을 평가하여 필터링하는 연산자
🍏 Next 스트림의 첫 번째 데이터를 가져오는 연산자
⏭️ Skip 처음 몇 개의 데이터를 건너뛰는 연산자
🎯 Take 처음 몇 개의 데이터만 선택하는 연산자
⏳ TakeLast 마지막 몇 개의 데이터만 선택하는 연산자
🕒 TakeWhile 조건이 참인 동안 데이터를 선택하는 연산자

Filter: 필터링의 기본 🎯

✨ 주요 특징

  • 동기적으로 조건을 평가하여 데이터를 필터링
  • Predicate를 사용하여 조건 정의
  • 스트림의 각 요소에 대해 조건을 검사

💡 사용 사례

  • 짝수/홀수 필터링
  • 특정 조건을 만족하는 객체만 선택
  • 유효한 데이터만 추출

📝 예시 상황

  • 양수만 필터링
  • 특정 가격 이상의 상품만 선택
  • 활성 사용자만 필터링

예제 소스

Filter01


FilterWhen: 비동기 필터링의 파워 🚀

✨ 주요 특징

  • 비동기적으로 조건을 평가
  • Mono을 반환하는 조건 사용
  • 외부 서비스 호출이나 DB 조회와 함께 사용 가능

💡 사용 사례

  • 데이터베이스 조회 결과에 따른 필터링
  • 외부 API 응답에 기반한 필터링
  • 비동기 유효성 검사

📝 예시 상황

  • 사용자 권한 확인 후 필터링
  • 실시간 재고 확인 후 상품 필터링
  • 외부 서비스의 응답에 따른 데이터 필터링

예제 소스

FilterWhen


Next: 첫 번째가 중요해 🍏

✨ 주요 특징

  • Flux에서 첫 번째 요소만 선택
  • Mono로 결과 반환
  • 빈 스트림의 경우 빈 Mono 반환

💡 사용 사례

  • 첫 번째 매칭 항목만 필요한 경우
  • 샘플 데이터 추출
  • 스트림의 시작 요소 확인

📝 예시 상황

  • 첫 번째 로그 엔트리 확인
  • 가장 최근 알림 조회
  • 첫 번째 매칭 사용자 찾기

예제 소스

Next


Take: 원하는 만큼만 깔끔하게 🎯

✨ 주요 특징

  • 지정된 수만큼의 요소만 선택
  • 시간 기반 제한 가능
  • 백프레셔 지원

💡 사용 사례

  • 페이지네이션
  • 데이터 샘플링
  • 스트림 제한

📝 예시 상황

  • 상위 N개 결과 조회
  • 처음 5초 동안의 이벤트만 처리
  • 최근 10개의 로그 항목 조회

예제 소스

Take


TakeLast: 마지막이 결정적이야 ⏳

✨ 주요 특징

  • 마지막 N개의 요소만 선택
  • 전체 스트림이 완료될 때까지 대기
  • 메모리에 선택할 요소 수만큼 버퍼링

💡 사용 사례

  • 최근 항목 조회
  • 마지막 N개의 로그 확인
  • 최신 업데이트 확인

📝 예시 상황

  • 마지막 3개의 거래 내역 조회
  • 최근 5개의 시스템 알림 표시
  • 최신 댓글 목록 표시

예제 소스

TakeLast


TakeWhile: 조건부 수집의 예술 🕒

✨ 주요 특징

  • 조건이 참인 동안만 요소를 선택
  • 조건이 거짓이 되면 즉시 완료
  • 순차적 평가

💡 사용 사례

  • 임계값까지의 데이터 수집
  • 특정 조건을 만족하는 연속된 데이터 처리
  • 스트림 조기 종료

📝 예시 상황

  • 오류가 발생하기 전까지의 데이터 수집
  • 특정 값 이하의 연속된 측정값 처리
  • 유효한 세션 동안의 이벤트 처리

예제 소스

TakeWhile


💫 마무리

각 필터링 연산자는 특정 사용 사례에 최적화되어 있습니다. 상황에 따라 적절한 연산자를 선택하여 사용하면 효율적인 데이터 처리가 가능합니다.

💡 Pro Tips:

  • 비동기 처리가 필요한 경우 filterWhen 사용
  • 단순한 조건 필터링에는 filter 사용
  • 제한된 데이터만 필요한 경우 take 계열 연산자 사용

🔗 GitHub Repository



자세한 학습 자료는 아래 GitHub 저장소를 참조하세요:
https://github.com/ses9892/learn_recator_programing/tree/main