Spring WebFlux의 주요 특징 중 하나는 Non-Blocking 프로세스를 지원한다는 점입니다.
Non-Blocking 프로세스는 웹 애플리케이션에서 요청을 처리할 때 I/O 작업이나 긴 지연 시간 작업이 발생할 때도 대기하지 않고 다른 작업을 계속 수행할 수 있는 방식을 나타냅니다.
이것은 높은 확장성과 효율성을 제공하며, 다수의 동시 요청을 처리할 수 있는 웹 애플리케이션을 만드는 데 유용합니다.
Non-Blocking 프로세스를 이해하기 위해 다음 개념을 고려해 보겠습니다.
Non-Blocking 프로세스에서는 I/O 작업을 비동기적으로 수행합니다. 이것은 입출력 작업이 완료될 때까지 대기하지 않고 다른 작업을 수행할 수 있음을 의미합니다. 따라서 웹 애플리케이션은 다수의 동시 요청을 처리하거나 다른 작업을 수행하는 동안 I/O 작업을 백그라운드에서 처리할 수 있습니다.
Non-Blocking 프로세스에서는 주로 이벤트 루프를 사용하여 작업을 스케줄링하고 관리합니다. 이벤트 루프는 여러 작업을 비동기적으로 처리하며, I/O 작업이 완료되면 해당 작업을 처리하는 콜백 함수를 호출합니다.
Non-Blocking 코드에서 콜백 함수는 비동기 작업이 완료되었을 때 호출되는 함수입니다. 이 콜백 함수를 사용하여 작업이 완료될 때 어떤 동작을 수행할지 정의할 수 있습니다.
Spring WebFlux는 Reactive Streams API를 기반으로 동작합니다. Reactive Streams는 비동기 데이터 스트림 처리를 위한 표준 인터페이스를 제공하며, 데이터의 흐름을 제어하고 변환할 수 있도록 도와줍니다.
Mono와 Flux는 Reactive Streams의 Publisher 인터페이스를 구현한 것으로, 비동기 작업의 결과나 데이터 스트림을 표현합니다. Non-Blocking 코드에서는 이러한 데이터 타입을 사용하여 비동기 작업을 처리합니다.
예를 들어, Spring WebFlux에서 HTTP 요청을 처리할 때 Non-Blocking 프로세스를 활용하여 다음과 같은 작업을 수행할 수 있습니다.
요청을 받으면 요청을 Non-Blocking 방식으로 처리하고 동시에 다른 요청을 받을 수 있습니다.
I/O 작업(예: 데이터베이스 쿼리, 외부 서비스 호출)을 비동기적으로 시작하고 결과가 준비되면 콜백 함수를 사용하여 응답을 생성합니다.
이벤트 루프를 통해 요청에 대한 응답을 전달하고, 다른 작업을 계속 처리합니다.
이렇게 Non-Blocking 프로세스를 활용하면 애플리케이션의 성능과 확장성을 향상시킬 수 있으며, 동시 요청에 대한 빠른 응답을 제공할 수 있습니다.