일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 핀포인트
- 월급루팡 일지
- 플루터
- Loki 로그
- 애자일 싫타
- UnsupportedOperationException
- Ingress Controller Fake
- fake jwt
- 논블록킹 성능
- formik
- 티스토리챌린지
- jsonMarshaller
- pinpoint 2.5.3
- 노드간 통신
- intellij
- Armeria
- OIDC
- reids
- RedirectService
- jar 배포
- 7879
- save/update
- nGinder
- LPOS
- 개발 어렵당.ㅠ
- hbase 저장공간 설정
- pinpoint
- 오블완
- R2DBC Paging
- ㅉ때
- Today
- Total
대머리개발자
flatMap vs Map...(3) 논블록킹 vs 블록킹 본문
몇번을 같은 주제로 끄적끄적 했던 녀석들이다.
동일한 주제로..3번째다.
늘 곱씹자!!
flatMap vs map
지나가는 스트림, 즉 흘러가고 있는 데이터의 물결에서 어떤 가공을 하려면 ? 1년동안 주구장창 쓰고 있는데도..아.. 잘 모르고 쓰고 있구나 싶어서 다시 한번 이해도를 높이기 위한 고민을 시작
hcnmy.tistory.com
[리액티브] map vs flatMap 와우..진짜.
map 구독이 안 되고Flux.just("SMS", "EMAIL").map(it -> userRoleRepository.save(UserRole.builder().userUid(userUid).type("MARKETING") .roleName(it).build())).subscribeOn(Schedulers.boundedElastic()).subscribe(); flatMap은 구독이 된다.Flux.just
hcnmy.tistory.com
결론!
flatMap과 Map은
일반객체로 처리할때는 동일하다!!!!!!
비동기 작업을 할 때는 반드시 flatMap으로 처리해야 한다.
그럼에도 쉽게 와 닿지 않는닷. ㅋㅋ
1번(flatMap)은 쌉커밋이 되지만 2번(map)은 커밋이 안 된다.
1.. flatMap
fun addPointBenefit(formId: Long, userId: String){
..
.filter{ it.pointBenefit > 0 }
.flatMap {
ServiceUtils.getProductService().save( .... )
}.subscribe()
..
}
2.. map
fun addPointBenefit(formId: Long, userId: String){
..
.filter{ it.pointBenefit > 0 }
.map {
ServiceUtils.getProductService().save( .... )
}.subscribe()
..
}
두 번째 차이가... 논블록킹 처리닷.!!
// 각각 3초 걸리기 때문에 9초
Flux.just("1", "2", "3")
.map(it ->
// 3초 수행
)
).subscribe();
// 난블록킹이기 때문에 3초
Flux.just("1", "2", "3")
.flatMap(it ->
// 3초 수행
)
).subscribe();
응용할 수 있는 부분을 보자
게시글 20개를 가져와.. 특정 비니지스 로직에서 처리한다고 했을 때
기존에는 for문을 돌려서 처리했겠쥬.
근데 그것을 flatMap으로 병렬 처리 한다는 거다.
그래서 두번째 인자로 병렬 처리할 개수도 지정할 수 있다.
// 난블록킹이기 때문에 3초
Flux.just("1", "2", "3")
.flatMap(it ->
// 3초 수행
, 3) // 병렬 처리 개수
).subscribe();
리액티브 스타일로 하면 쉽게 병렬 처리가 가능하다.
프론트에서 비동기로 여러개의 EndPoint를 호출 하는거나
하나의 Endpoint에서 논블로킹 처리해서 응답을 주나 동일하겠다. (병렬처리해서)
지금 이말을 이해 했으면 어느정도 동기/비동기 ... 블록킹/논블록킹...개념을 이해 한다고 본다.
내 똥머리에서는 동일한 개념인데 시점의 차이라고 본다.
- 갑의 입장에서 요청 (클라이언트 SIDE)
두 개의 API(EndPoint)를 동시(병렬)에 요청을 쏜다. (비동기) - 막무가내 갑
하나씩...하나씩... 쏜다.. (동기) - 친절한 갑
- 을의 입장에서 처리(서버SIDE)
동시(병렬)로 처리한다. (논 블록킹) - 팀내 에이스
step by step으로 차례차례 처리한다.(블록킹) - 답답이!!
개념이 밥먹여 주지 않는다.. 대에에충 하자.
'개발이야기 > 개념' 카테고리의 다른 글
아르메리아 프레임워크 최신화 UP (0) | 2025.03.27 |
---|---|
grpc tls 설정. (0) | 2025.03.25 |
앱 푸시 - FCM - 조금 고도화 (0) | 2025.02.27 |
1년이 더해지는 날짜 Formatter 이슈 (0) | 2025.01.03 |
앱 푸시 - FCM (0) | 2024.11.27 |