WebFlux??
리액티브 프로그래밍이라고 한다. 강사님께서 프로젝트때 직접 사용하진 않을것이라며,
이 부분은 가볍게 보라고 하셨다. 근데 왜 가볍게 봐도 어려운거야..
나중에 프로젝트끝나면 다시 공부해봐야 겠다.
리액티브 프로그래밍(Reactive Programming)이란?
리액티브 프로그래밍은 데이터 흐름과 전파에 관련된 선언적 프로그래밍 패러다임.
이는 비동기 데이터 스트림에 대한 프로그래밍이다. 여기서 데이터 스트림은 마우스 클릭이나 키보드 입력, 변수 변경 등 다양한 이벤트에 대한 일련의 요소를 포함할 수 있다.
리액티브 프로그래밍은 데이터 변화에 반응하여 연속적인 일련의 반응을 수행하는 프로그래밍 패러다임이다.
리액티브 스트림즈(Reactive Streams)란?
리액티브 스트림즈는 비동기 스트림 처리를 위한 표준.
백 프레셔(Backpressure)와 같은 기능을 포함하여 데이터를 안전하게 처리할 수 있도록 도와준다.
백 프레셔는 데이터 생산자와 소비자 사이의 속도 차이를 관리하는 메커니즘이다.
이는 생산자가 데이터를 너무 빠르게 생성하거나 소비자가 데이터를 너무 느리게 처리하는 상황을 방지한다.
리액티브 스트림즈는 이런 방식으로 데이터의 생산과 소비 사이의 밸런스를 유지하며, 시스템의 안정성을 보장한다.
명령형 프로그래밍과 선언형 프로그래밍이란?
명령형 프로그래밍: 명령형 프로그래밍은 개발자가 어떻게 동작해야 하는지를 명시하는 방식. 즉, 명령어들이 순서대로 실행되면서 상태를 변경한다. 이는 절차적 프로그래밍이라고도 하며, 대표적인 예로는 C, Java 등의 언어가 있다.
선언형 프로그래밍: 선언형 프로그래밍은 어떤 것을 수행해야 하는지를 명시하고, 어떻게 수행되어야 하는지에 대한 부분은 숨겨져 있다. 즉, 원하는 결과를 얻기 위해 필요한 상태 변화를 명시적으로 제어하는 대신, 원하는 결과를 선언적으로 표현한다. SQL과 HTML이 대표적인 선언형 언어이다.
Spring MVC 기반의 애플리케이션과 Spring Reactive 기반의 애플리케이션의 차이점
Spring MVC: Spring MVC는 동기식 방식으로 요청을 처리하는 웹 프레임워크.
클라이언트의 요청이 들어올 때마다 별도의 스레드가 생성되어 해당 요청을 처리한다.
이는 단일 요청에 대한 처리 시간이 길어지면 서버의 리소스를 많이 사용하게 될 수 있다.
Spring Reactive: 반면에 Spring Reactive는 비동기식, 논블로킹 방식으로 요청을 처리한다. 이는 스레드를 효율적으로 활용하며, 시스템 부하를 줄이는 효과가 있다. 따라서 동시에 많은 요청을 처리해야 하는 애플리케이션에서는 Spring Reactive가 더 적합할 수 있다.