팀원 코드리뷰를 하다가 flatMapLatest라는 오퍼레이터를 처음 알게 돼
“이건 뭐지?” 싶어 공부하게 되었다.
공부를 하다 보니 자연스럽게 flatMapFirst도 같이 알게 되었고,
두 연산자의 동작 방식과 차이를 비교해서 정리해 보게 되었다.
🔍 개념 정리
🔹 flatMapLatest
- 가장 최근에 들어온 요청만 처리하고,
- 그 이전 요청은 무시하는 오퍼레이터
- 흔히 검색창, 실시간 입력 처리, 새로고침 등
- “최신 상태만 유지하면 되는 상황”에서 사용
input.keyword
.flatMapLatest { query in
network.search(query)
}
🔸 flatMapFirst
- 첫 번째 요청만 처리하고,
- 그 작업이 끝날 때까지 다른 요청은 무시
- 버튼 연타 방지, 실수로 여러 번 눌러도 한 번만 처리되면 되는 경우
input.submitTap
.flatMapFirst {
api.submitForm()
}
⚔️ 차이점 비교

- 데이터는 바뀌지 않으며, 한 번만 불러오면 충분한 경우
→ flatMapFirst가 더 명확하고 안전한 선택일 수 있다. - 반면, 재시도나 새로고침을 허용하고 싶다면
→ flatMapLatest가 더 유연하게 대응 가능하다.
🧠 배운 점
- 둘 다 중복 요청 방지라는 공통점을 가지고 있지만,
어떤 요청을 “중요하게 여길지”에 따라 선택이 완전히 달라진다. - flatMapFirst는 처리 중이면 무조건 무시,
flatMapLatest는 항상 최신 요청만 처리하려는 특성을 가진다. - 버튼처럼 정적 데이터에 대한 명확한 단발 요청에는 flatMapFirst
- 검색창처럼 요청이 자주 바뀌고 최신만 중요하면 flatMapLatest
💬 마무리
이번 고민을 통해 단순히 “요청 하나 보내는 오퍼레이터”가 아니라,
“비동기 흐름에서 어떤 요청이 중요하고 어떤 걸 버릴지”를
구체적으로 의식하면서 연산자를 선택해야 한다는 걸 배웠다.