에러 핸들링 보충 Retry strategy (재시도 전략) retry retry는 Erorr 발생시에 reactive stream 을 다시 subscribe 한다. 때문에, retry 시에 별도 설정이 없다하면 무한정으로 subscribe 하게 되므로 stream 에 무리가 간다. 때문에 아래와 같이 시도 제한을 위한 method 를 이용 한다. retry when retry 시에 특정 조건 RetrySpec 을 주어서 retry 를 진행한다. Retry.fixedDelay Duration.ofMillis 뒤에 새로운 subscibe 를 진행 한다. Retry.backoff 에러 발생시 Duration.ofMillis 만큼 dalay 시킨디 다시 reative Stream 을 다시 subscribe 한..
1. Non-Blocking WebFlux 데이터 손실 이슈 2. 샘플코드 import java.util.concurrent.CompletableFuture; import reactor.core.publisher.Mono; public class JustTest { public static void main(String[] args) { //1번내용 ---------------- String text = "abcd"; Mono mono = Mono.just(text); mono.subscribe( str->{ //변수 text를 살펴보고, 그에대한 콜백행위는 아래의 출력 System.out.println(str); }); //2번내용 ---------------- Mono function = Mono.c..
이번 들에서는 기존에 WebFlux 와 MVC 패턴을 이용한 NonBlocking, Blocking 테스트를 진행 하며 성능을 측정해 보도록 하겠습니다. 1. 테스트 tool 로는 K6 사용 공식홈페이지 : https://k6.io/ * k6 결과 값 vus — 활성 가상 사용자 수 vus_max — 테스트에 할당 된 최대 가상 사용자 iterations— default함수가 호출 된 총 횟수 iteration_duration— default함수 를 실행하는 데 걸린 총 시간 dropped_iterations— iterations시작할 수없는 수 data_received — 수신 된 데이터의 양 data_sent — 전송 된 데이터 양 checks — 성공적인 검사 비율 http_reqs — k6에 의해..
오늘은 SpringWeb Flux 도입을 하기 위한 기초 단계로 Webclient 에 샘플 프로젝트를 통해서 알아 보도록 하겠다. Spring WebFlux 샘플코드 1. 샘플 프로젝트 다운로드 mac 에서 샘플 프로젝트 다운로드 curl https://start.spring.io/starter.tgz \ -d bootVersion=2.4.4 \ -d dependencies=webflux \ -d baseDir=spring-webflux-tutorial \ -d artifactId=webflux \ -d packageName=com.devkuma.webflux \ -d applicationName=HelloWebFluxApplication \ -d type=gradle-project | tar -xzvf..
스프링웹플럭스? 스프링웹플럭스란 Project Reactor의 웹의 스트리밍 처리를 한다. SpringBoot2(Spring5) 부터 사용가능 하며 Reactive Stack, Servlet Stack 둘중 하나를 선택해서 사용해야 한다. Spring MVC vs WebFlux MVC 에서 WebFlux 로 전환하고자 하면 다음을 고려해 보자 1. 이미 잘 동작하고 있는 MVC 프로젝트는 무리 해서 바꿀 필요는 없다. 작성, 소스이해, 디버깅이 비동기 방식보다 이해하기 쉽고, 관련 library 도 많다. 2. 하지만, 논블록킹 웹 스택을 알아보고 있다면, Spring WebFlux 다른 웹스택을 실행환경을 제공하면서도, 다양한 서버, 리액티브 라이브러리를 제공한다. 3. Java8, kotlin 로 개..
스프링웹플럭스란? 웹플럭스를 이해하기 위해서는 아래 용어를 이해 해야 한다. Reactive Streams non-blocking, back pressure 을 이용하여 비동기 서비스를 할때 기본이 되는 스펙이라고 함. Spring5 Webflux 는 Core ProjectReator 에서는 Reactive Streams 를 따르고 있음 비동기의 경계를 명확하게 하여 스트림 데이터의 교환을 효율적으로 하는 것이 목표이다. 아래의 Stream 을 지향한다. 잠재적으로 무한한 숫자의 데이터처리 순서대로처리 컴포넌트간 데이터를 비동기 적으로 전달 backpressure 을 이용한 데이터 흐름 제어 관련 API 는 아래와 같다. Publisher Subscriber Subscription Processor Pu..
1. 단일 책임의 원칙 생성자의 인자가 많을 경우 코드량도 많아지고, 의존관계도 많아져 단일 책임의 원칙에 위배된다. 그래서 Constructor Injection을 사용함으로써 의존관계, 복잡성을 쉽게 알수 있어 리팩토링의 단초를 제공하게 된다. 2. 테스트 용이성 DI 컨테이너에서 관리되는 클래스는 특정 DI 컨테이너에 의존하지 않고 POJO여야 한다. DI 컨테이너를 사용하지 않고도 인스턴스화 할 수 있고, 단위 테스트도 가능하며, 다른 DI 프레임 워크로 전환할 수도 있게 된다. 3. Immutability Constructor Injection에서는 필드는 final로 선언할 수 있다. 불변 객체가 가능한데 비해 Field Injection은 final는 선언할 수 없기 때문에 객체가 변경 가능..
vert.x 란? - node.js와 비슷한 비동기 소켓 서버 프레임 웍이다.- single thread- 모든 연결된 소켓 connection에 대해서 event loop 작동- Apache Netty, HazelCast 기반- Verticle 이라는 프로그램 단위를 가짐- 하나의 jvm 에 Vert.x 인스턴스 생성이 가능 (멀티코어에서 jvm을 여러개 생성하여 jvm 당 하나씩 Vet.x 인스턴스 생성 가능) apache(tomcat)과 차이점- tomcat은 thread pool 방식으로 50~500 여개의 connection 을 관리 한다. node.js 와 차이점- 언어 지원 차이 (java, javaScript, Python, Groovy, Scala)- instance 간 데이터 교환 가능..
- Total
- Today
- Yesterday
- TDD
- fastapi
- 켄트 백
- 퀜트백
- mongodb
- 분산처리
- AWS
- 테스트주도개발
- data crawling
- 웹개발
- Python #FastAPI
- 테스트 주도 개발
- SpringBoot
- 테스트
- GateWayApi
- data mining
- EC2
- kafka
- MSA
- 웹서비스
- MQ
- nodejs
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |