대머리개발자

flatMap vs Map...(3) 논블록킹 vs 블록킹 본문

개발이야기/개념

flatMap vs Map...(3) 논블록킹 vs 블록킹

대머리개발자 2025. 3. 14. 00:16
728x90

몇번을 같은 주제로 끄적끄적 했던 녀석들이다.

동일한 주제로..3번째다.

늘 곱씹자!!

 

https://hcnmy.tistory.com/226

 

flatMap vs map

지나가는 스트림, 즉 흘러가고 있는 데이터의 물결에서 어떤 가공을 하려면 ? 1년동안 주구장창 쓰고 있는데도..아.. 잘 모르고 쓰고 있구나 싶어서 다시 한번 이해도를 높이기 위한 고민을 시작

hcnmy.tistory.com

 

https://hcnmy.tistory.com/204

 

[리액티브] 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으로 차례차례 처리한다.(블록킹)  - 답답이!! 

 

 

 

개념이 밥먹여 주지 않는다.. 대에에충 하자.

728x90

'개발이야기 > 개념' 카테고리의 다른 글

아르메리아 프레임워크 최신화 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