너무 얕게 알고 있어서 질문 자체가 틀렸거나 이상할 수 있음. 지적 부탁
스프링 코드에 코루틴을 적용하는 간단한 예제를보니까
controller, service, repository 같은 데에서 함수 suspend로 선언하고 그런게 다인 것 같은데
클라이언트에서 요청을 하면 필터를 타고 디스패처서블릿을 타고 컨트롤러 도착해서 비즈니스로직 처리하고 다시 나가잖아?
근데 비즈니스 로직 이외에 요청이 들어오고 요청이 나가는 그 입출구(필터랑 디스패처 서불릿)에는 내가 아무것도 안해줬으니깐 동기적으로 실행이 되는거 아님??
그럼 스프링 부트에서 코루틴은 각 request에 대해서는 동기적으로 처리하고 그 request 내부의 비즈니스 로직만 비동기적으로 처리하는거임?
비동기 공부를 처음 해보는데.. 나는 당연히 여러 유저의 요청이 비동기적으로 처리되는 줄 알았거든.
혹은 내가 잘못 이해하고 있는 부분이 있어?
여러 요청이 비동기적으로 처리되는 거 -> 코루틴 + 컨트롤러 결합 시 suspend 는 WebFlux 의 Mono 로 , Flow 리턴시 WebFlux 의 Flux 로 자동으로 반환 (coroutine-reactor 가 이것을 수행함.) 위에건 너가 webflux 를 쓰든, mvc 를 쓰든 coroutine-reator 가 자동으로 변환해줌 그리고 코루틴도 넓게 보면 결국 워커 쓰레드 패턴을 CPS 라는 기법으로 구현한것임. 지금 질문을 봤을 때 뭘 모르는지 잘 모르는 거 같음. 코루틴 제대로 공부하고, suspend 함수가 컴파일 될 때 어떤 메커니즘으로 동작하는지 알아야하고, 추가적으로 리액터랑 스프링 WebFlux 에 대한 공부가 필요함.
참고로 코루틴 책은 코틀린 코루틴 Deep Dive 책 한 권 추천함.
https://m.yes24.com/Goods/Detail/123034354