woowacourse / tecoble-comments

0 stars 0 forks source link

post/2021-10-20-synchronous-asynchronous/ #60

Open utterances-bot opened 2 years ago

utterances-bot commented 2 years ago

동기와 비동기 with webClient

‘여기서 만나’ 프로젝트를 진행하면서 초반에는 RestTemplate을 통하여 외부 API와 데이터를 주고받았다. 이후 WebClient가 비동기 방식으로 쓰여 더 좋다고 하여 WebClient로 변경했다. 그리고 이전 글에서 RestTemplate…

https://tecoble.techcourse.co.kr/post/2021-10-20-synchronous-asynchronous/?utterances=c16e72b582c58a90f1324049xMMU4rNmawPl0w80Qwr%2BZTYpOiLJPoYiMK5gMlniA28mdoTGjd%2F3KJeACs9qoVl3eMaNSaFN5vsTbz2LCNiFUURyJR9IvFEqJtnLISEvCiX%2BtzfriqUmVo5Mg%2FA%3D

AerinJeong commented 2 years ago

안녕하세요, 질문이 있습니다. 위 코드에서 보면 nearbystations를 return 하는데요. 그럼 nearbystations 를 가져다 쓰는 입장에서, nearbyststions 값이 채워졌는지는 어떻게 확인할 수 있죠? 결국 nearbystations 가 채워질때까지 wait 하고 있나요?

Hae-Riri commented 2 years ago

저도 윗분 댓글과 동일한 질문을 하고 싶네요.

hiphopddori commented 2 years ago

저동 윗분과 동일합니다 결국 wait 을 하게되면 서비스 입장에서는 어디선가는 wait을 함으로서 블락이 되는거라 동일한 결과일듯 한데욤

kindtiger95 commented 1 year ago

1년이나 지난 댓글이지만 보고서 저도 궁금증이 생기네요. 제가 이해하기론 Mono 또는 Flux로 감싸서 return을 해줘야 다른 곳에서 해당 스트림 결과에 스트림을 또 연결하는 것으로 이해하고 있는데요. 그렇게 리턴을 받아서 flatMap을 하던, doOnNext로 다음 스트림을 연결시켜야 자연스러운 비동기처리가 되는 것으로 이해하고 사용 중 입니다. 역시 Webflux 세계는 어렵네요, 정확하게 아시는 분이 있다면 답변 부탁드리겠습니다.

px201226 commented 9 months ago

저렇게 해서 해결되었다는 포스팅 내용만 봤을땐 webClient 사용한 큰 이유는 없고, 서블릿 기반 처리와 마찬가지로 RestTemplate + @Async 사용한 거랑 같아보이네요.

비동기에서 nearbyststions 을 저런식으로 코딩하면 일관되지 않은 상태(채워져있을 수도, 비어있을수도)를 반환하기 때문에 저런식으로 하면 안될 것 같아요. 필요하다면 Future로 감싸는게 좋을 것 같습니다.