본문 바로가기

728x90

SpringWebflux

(6)
[SpringWebflux] reactor operator - 4 Backpressure 관련 연산자 delaySequence / limitRate sample delaySequence 주어진 duration 만큼 지연시킵니다. limitRate() backpressure에 request를 조절하는 기능입니다. limitRate()에서 적힌 수 많은 request를 강제합니다. 즉 request를 2번만 요청할 수 있습니다. TestCode public class Operator4 { // limit public Flux fluxDelayAndLimit(){ return Flux.range(1,10) .delaySequence(Duration.ofSeconds(1)) .log() .limitRate(2); } } class Operator4Test { private O..
[SpringWebflux] Reactor operator - 3 집계 연산자 count distinct reduce groupby count count: 송출되는 요소를 합쳐서 단일 값으로 전달하는게 count 입니다. 그림과 같이 4개의 요소가 전달되었을때 요소의 총 갯수인 4를 리턴합니다. TestCode public class Operator3 { // count public Mono fluxCount(){ return Flux.range(1, 10).count().log(); } } class Operator3Test { private Operator3 operator3 = new Operator3(); @Test void fluxCount() { StepVerifier.create(operator3.fluxCount()) .expectNext(10L) .ve..
[Spring Webflux] CPU bound vs I/O Bound CPU란? CPU란 Computing Process Unit의 약자입니다. 기계어 명령어들을 기반으로 계산을 수행하는 중앙 처리 장치 입니다. 사실 컴퓨터에서 사용되는 대부분의 동작들은 CPU를 사용하게 되는데 CPU Bound 작업이란 단순히 CPU를 사용하는 것이 아닌 CPU를 중점적으로 다루는 작업들을 말합니다. 예를들어 암호화, 압축과 같은 수학적인 알고리즘 계산, 다수의 데이터를 집계하는 작업 등이 있습니다. 주로 CPU 계산 능력에 따라 성능이 좌우되는 그러한 작업들을 말합니다. CPU Bound 위 그림은 Hardware, Kernel, Application을 계층화, 추상화하여 나타낸 그림입니다. Application 레이어에서는 App #1은 실행된 프로세스이고 물리적인 하나의 CPU코어..
[SpringWebflux] Spring Webflux 소개 Spring Webflux에서 Spring은 우리가 잘 알고 있는 Spring framework를 말합니다. Webflux는 Reactive Stream API를 사용하여 non-blocking과 asynchronous를 지원하는 비동기 spring web framework입니다. Reactive Stream API, non-block, asynchronous 는 springwebflux의 주요 키워드라 말할 수 있습니다. 이러한 주요 기술들이 대량의 웹 트래픽, 특히 I/O가 많은 웹 서비스 로직에서 기존 서블릿 기반 MVC 대비 효율적이고 높은 성능을 보여줍니다. 예를들어 마이크로 서비스에서 다양한 동시 요청을 수행해야하는 게이트웨이 서버나, 실시간 데이터 스트림을 위한 웹소켓, 대량의 데이터를 처리..
[Spring Webflux] 스프링 웹플럭스(MVC와 비교, 내부 동작 원리, Netty) Spring WebFlux 탄생 배경 Spring MVC 서블릿 기반의 Blocking I/O 방식 요청당 하나의 스레드를 사용, 스레드의 작업이 끝날 때 까지 스레드가 차단됨 Spring MVC의 한계 대용량 요청 트래픽을 Spring MVC 방식이 처리하기엔 한계가 있었다. 트래픽이 많아지면 많아질수록 스레드도 많이 사용되는데, 스레드풀에 스레드 200개가 default로 존재하고, 만약 만명이 동시 접근한다면...? 스레드 스위칭비용도 그만큼 많이 발생한다. Spring WebFlux를 이용한 극복 대용량 트래픽을 감당하기 위해선, 비동기/논블로킹 방식의 I/O를 사용해야 했으며 이 방식이 적용되어, 대용량도 안정적으로 처리할 수 있는 Spring WebFlux가 생겨놨다. ** 예시를 통해 MVC..
[Netty] @Sharable 어노테이션과 ChannelHandler 인스턴스 관리 Netty를 사용하면서 클라이언트로부터 들어오는 데이터를 처리하는 ChannelHandler의 역할과 관리 방법은 매우 중요합니다. 특히, @Sharable 어노테이션의 사용과 각 클라이언트 연결에 대한 ChannelHandler 인스턴스 생성 방식은 데이터 무결성 및 애플리케이션의 성능에 큰 영향을 미칩니다. 'ChannelHandler'와 '@Sharable'의 이해 ChannelHandler는 Netty에서 네트워크 이벤트를 처리하는 주요 구성 요소입니다. 클라이언트의 연결, 데이터 수신 등 이벤트가 발생할때마다 Netty는 해당 ChannelHandler를 통해 이를 처리합니다. @Sharable 어노테이션은 하나의 ChannelHandler 인스턴스가 여러 ChannelPipeline 에서 안전..

728x90