Spring WebFlux 기본 개념Spring WebFlux는 Spring 5에서 도입된 리액티브 웹 프레임워크로, 비동기 논블로킹 방식으로 HTTP 요청과 응답을 처리합니다. 이는 높은 동시성 처리를 지원하며, 특히 리액티브 스트림 기반의 데이터 흐름을 다루기에 적합합니다. WebFlux는 Reactor를 기반으로 하여 Mono와 Flux를 사용해 비동기적으로 스트림을 처리합니다.1. Spring MVC와 WebFlux의 차이점Spring MVC: 전통적인 동기, 블로킹 방식으로 각 요청은 별도의 스레드에서 처리됩니다. 요청이 많아지면 스레드 수가 증가하고, 자원 낭비가 발생할 수 있습니다.Spring WebFlux: 비동기, 논블로킹 방식으로 요청을 처리합니다. 이벤트 루프와 리액티브 스트림을 활용..
map과 flatMap의 차이점mapmap은 기존 데이터를 다른 형태로 동기적으로 변환합니다. 단순히 값을 변환하거나 가공할 때 사용됩니다.반환되는 타입은 Mono나 Flux가 아닌 일반 객체여야 합니다.flatMapflatMap은 기존 데이터를 다른 형태로 변환하면서, 변환 결과가 Mono 또는 Flux 같은 비동기 타입일 때 사용합니다.주로 비동기 연산이 필요할 때 사용되며, Mono>와 같은 중첩된 비동기 타입이 아닌 Mono로 결과를 평평하게 "펼쳐"줍니다.예제 1: map을 사용한 동기적 변환import reactor.core.publisher.Monofun main() { val userMono = Mono.just("john.doe@example.com") .map { em..
리액티브 프로그래밍 (Reactive Programming)개요리액티브 프로그래밍은 데이터 스트림과 변화의 전파에 중점을 둔 프로그래밍 패러다임입니다. 데이터 처리를 위한 파이프라인을 구축하고, 이를 통해 지속적으로 들어오는 데이터를 자동으로 처리하는 방식을 채택합니다.기존 프로그래밍과의 비교명령형 프로그래밍순차적인 프로세스 실행현재 시점의 상태 처리데이터 변경 시 수동 업데이트 필요"요리 레시피"와 유사한 접근 방식// 명령형 프로그래밍 예시let price = 100;let quantity = 5;let total = price * quantity;console.log(total); // 500price = 200; // 가격이 변경됨// total은 자동으로 업데이트되지 않음 - 여전히 500// ..
Node.js와 Kotlin 코루틴의 비동기 처리 방식과 차이점Node.js의 async/await와 Kotlin의 코루틴(coroutine)은 모두 비동기 처리를 위해 사용되지만, 각기 다른 방식과 철학을 가지고 있습니다. 주요 차이점은 다음과 같습니다:1. 실행 환경Node.js (async/await): Node.js는 싱글 스레드 기반의 이벤트 루프를 사용하여 비동기 처리를 수행합니다. 비동기 작업은 이벤트 루프에 의해 처리되며, 이를 통해 여러 작업을 병렬적으로 수행하는 것처럼 보이게 합니다.Kotlin (coroutine): Kotlin은 멀티스레드 환경에서 코루틴을 사용하여 비동기 처리를 수행합니다. 코루틴은 경량 스레드로, 스레드 풀을 사용해 멀티스레드 환경에서 효율적인 비동기 처리를 지원..
1. 동기식 vs 비동기식동기식 프로그래밍에서는 하나의 작업이 완료될 때까지 CPU는 그 작업을 기다려야 합니다. 예를 들어, 네트워크 요청을 보내고 응답을 기다릴 때, 해당 스레드는 다른 일을 할 수 없고, I/O 작업이 끝날 때까지 대기해야 합니다. 이때 스레드가 차단(blocked)되어 있으므로, 운영체제는 다른 스레드로 컨텍스트 스위칭을 하여 CPU 자원을 할당하려고 합니다.비동기식 프로그래밍에서는 작업이 끝날 때까지 스레드가 대기할 필요 없이, 작업이 완료되면 이를 처리할 콜백 함수나 프라미스(약속)로 이어집니다. 즉, 스레드가 차단되지 않으며 다른 작업을 계속 처리할 수 있습니다. 이 방식은 I/O 작업이 끝날 때까지 CPU가 대기하지 않고, 효율적으로 다른 작업을 처리할 수 있게 해줍니다.2..
4. 컨텍스트 스위칭(Context Switching)컨텍스트 스위칭은 컴퓨터 시스템에서 CPU가 하나의 작업(프로세스 또는 스레드)을 중지하고, 다른 작업을 수행하기 위해 작업의 상태(Context)를 저장하고 복원하는 과정을 말합니다. 이 과정은 멀티태스킹 환경에서 필수적입니다. 왜냐하면 CPU는 한 번에 하나의 작업만 처리할 수 있기 때문에, 여러 작업(프로세스 또는 스레드)을 빠르게 전환하면서 마치 동시에 처리하는 것처럼 보이게 해야 하기 때문입니다.4.1 컨텍스트(Context)란?컨텍스트는 CPU가 현재 처리하고 있는 작업의 상태 정보를 의미합니다. 구체적으로는 다음과 같은 정보를 포함합니다:프로그램 카운터(Program Counter): 현재 실행 중인 명령어의 주소.레지스터(Register..