본문 바로가기

Reactive stack

(6)
[Reactive stack] Reactor pool로 Lettuce Connection 조절하기 프로젝트에서 pool(커넥션 풀 같은..)을 직접 구현해줘야할 일이 생겼습니다. GitHub - rooftop-MSA/Netx: Distributed transaction and Event streaming framework based on saga pattern / Supports redis-stream / Distributed transaction and Event streaming framework based on saga pattern / Supports redis-stream / Fully async - rooftop-MSA/Netx github.com 하지만, 프로젝트가 Reactor기반으로 되어 있었기 때문에.. pooling되고있는 리소스를 획득하기 위해서 스레드가 블로킹 되면 안되는 상황..
[Reactive Stack] webflux, R2DBC 환경에서 Event 사용하기 최근 webflux + R2DBC 스택으로 되어있는 프로젝트에서 스프링 Event를 사용할일이 있었습니다. MVC + JPA 환경에서는 어렵지 않게 사용하던 이벤트를 webflux + R2DBC 환경에서 사용하려고 하니까, 많은 부분이 생각대로 동작하지 않더라구요. reactor는 lazy하게(최종 호출 메소드가 나오기전까지 실행되지 않음) 실행된다는 특징 때문에, Event 호출에서 고려해야 할 부분이 좀 있었습니다. R2DBC와 Webflux에 대한 이해가 있지 않으면 실수 할 수 있는 부분이 있다고 생각이 들어서, 케이스 별로 테스트를 해봤습니다.시나리오 설명시나리오는 간단한데, PayRollbackEvent가 발행되면, 저장된 payment를 찾아서 state를 PaymentState.FAILED..
[Reactive stack] MVC에서 WebTestClient로 테스트 하기 최근 프로젝트를 webflux 환경에서 진행하면서, Restassured나 MockMVC 이외의 WebTestClient를 사용해서 테스트를 해보았습니다. 이미, WebClient를 사용하고 있어서 인지 WebTestClient가 Restassured와 MockMvc보다 직관적으로 느껴졌고 좋은 기억으로 남아있어서 다른 (MVC기반)프로젝트에서도 WebTestClient로 테스트를 해보고자 했습니다. TL;DR MVC에서 WebTestClient를 사용하는데는 성공했습니다. 하지만, WebTestClient는 Interceptor와 같은 MVC의 구성요소를 사용하기 힘듭니다. (Webflux에는 interceptor가 없어요.) 추가적으로, 자동구성이 아니라면기본적으로 등록되는 resolver (Page..
[Reactive Stack] R2DBC 연관관계 재가공하고 내용을 추가한 글 을 미디엄 에서 읽어 보실 수 있습니다. https://medium.com/@develxb/how-to-relation-entity-on-r2dbc-72e7dd4acdb2 기술 스택 r2dbc의 경우 드라이버에 따라 동작방식이 다른경우가 있습니다. 연관관계의 경우 spring 추상화 기술을 통해서 동작하기 때문에 이런 문제가 발생하지는 않을것 같지만, 같은 데이터베이스를 사용하더라도 다른 드라이버를 사용하는 경우가 있어서.. 시작전에 이 포스팅에서 사용한 기술스택과 버전을 정의하도록 하겠습니다. spring data r2dbc version: 3.1.1 JDK version: 21 Database: H2(테스트), MySQL(운영) R2DBC Driver: io.r2dbc:r..
[Reactive stack] Spring data R2DBC 커넥션 유지 방법 재 가공한 글을 medium에서도 읽을 수 있습니다. 이전 글 https://dlwnsdud205.tistory.com/359 을 읽고오시면 더 이해하기 쉽습니다. [Reactive stack] R2DBC with mysql 삽질기 최근 진행하고있는 프로젝트를 MVC에서 Web flux로 변경함에 따라 DB 통신기술또한 비동기로 변경해야 했습니다. 때문에, 더이상 Spring data jpa 를 사용할 수 없었고 Database와 비동기로 통신할 수 있는 dlwnsdud205.tistory.com webflux와 spring data r2dbc 를 사용하면서 다음과 같은 의문이 들었습니다. 스프링 문서에는 R2DBC에서도 선언적 트랜잭션을 지원한다고 나와있는데, webflux에서 이게 어떻게 가능한거지?..
[Reactive stack] R2DBC with mysql 삽질기 재 가공한 글을 medium에서도 읽을 수 있습니다. 최근 진행하고있는 프로젝트를 MVC에서 Web flux로 변경함에 따라 DB 통신기술또한 비동기로 변경해야 했습니다. 때문에, 더이상 Spring data jpa 를 사용할 수 없었고 Database와 비동기로 통신할 수 있는 기술이 무엇이 있는지 찾아보게 되었습니다. 제가 찾은 기술은 크게 2가지 였는데요, 1. Hibernate Reactive 2. R2DBC Hibernate Reactive는 기존의 ORM기능을 전부 활용할 수 있다는 장점이 있지만 다음과 같은 이유때문에 저는 R2DBC를 선택했습니다. 1. Spring에서 지원하지않음. 2. 트랜잭션 범위가 하나의 스레드로 국한되며 선언적 트랜잭션을 사용할 수 없음. 3. 기존 도메인이 굉장..