Spring MVC에서 클라이언트 요청은 Tomcat Connector를 통해 들어오고, 실제 Controller, Service, Repository 흐름은 보통 Tomcat Worker Thread에서 실행됩니다. http-nio-8080-exec-* 그렇다면 애플리케이션 코드 안에서 CompletableFuture나 parallelStream 같은 비동기/병렬 처리를 사용하면 요청 스레드는 어떻게 될까요? 비동기 작업을 사용하면 요청 스레드와 작업 스레드가 분리되기 때문에, 요청 스레드가 바로 자유로워질 것처럼 보일 수 있습니다.
하지만 실제로는 그렇지 않을 수 있습니다. 핵심은 다음입니다.
비동기 작업을 시작하는 것과 요청 스레드가 반환되는 것은 다른 문제입니다. 요청 스레드가 비동기 작업의 결과를 기다리는 순간, 그 요청 스레드는 여전히 점유됩니다. 1.
비동기와 병렬은 같은 개념일까? 먼저 비동기와 병렬을 구분할 필요가 있습니다.
두 개념은 자주 함께 등장하지만 같은 의미...