dev_dbdb1114

SpringWebFlux DB Connect feat.R2DBC 본문

카테고리 없음

SpringWebFlux DB Connect feat.R2DBC

dbdb1114 2023. 9. 2. 16:30

개요

지난 작성글에서 SpringWebFlux에 대해 공부했다. Spring WebFlux는 기본적은 ReactivePrograming 원칙을 따른다. ReactivePrograming 방식은 non-blocking방식, 비동기 방식으로 요청을 처리하는 방식이며 이러한 이유로 DB도 비동기처리를 지원해야한다고 간단하게 설명했었다. 이번 글은 DB가 Reactive 방식이어야 하는 이유와 그 DB의 비동기처리를 위해 필요한 라이브러리인 R2DBC를 알아보고자 한다.

https://dev-dbdb1114.tistory.com/76

 

SpringWebFlux

개요 기존의 스프링의 경우 ( SpringFramework, Spring Web MVC ) 등등은 ServletAPI와 ServleContainer를 사용할 목적으로 만들어졌지만, Spring Web Flux는 reactive-stack web framework로 Spring5.0부터 지원되기 시작했다. Rea

dev-dbdb1114.tistory.com

SpringWebFlux와 no reactive database를 함께 사용하면 안되는 이유

SpringWebFlux는 스레드 하나로 여러 요청을 할당받아 이벤트드리븐 방식으로 요청을 처리한다.( 비동기 ) 요청이 동시다발적으로 처리되는데, 이런 비동기 요청을 처리하는 DB가 만약 비동기적이지 않다면 우리는 WebFlux를 쓰는 이유가 없어진다. 그럼에도 불구하고 MySQL같은 DB와 WebFlux를 함께 쓴다면 어떨까?

MySql은 요청을 받으면 I/O블로킹 작업을 실시하며, 기본적으로 순차적인 요청처리를 지원한다. WebFlux로 작성된 API를 사용한다는 가정하에 이벤트 드리븐 방식으로 여러 요청을 처리하여 DB에도 순차적인 요청이 아니라 여러 요청을 보내는데 결국 DB에 가서는 순차적인 처리를 기다려야되는 것이다. 즉 어떠한 설정이나 ReactiveDataBase를 사용하지 않으면 앞선 API에서 빠른 처리를 하여 DB를 요청해도, DB에서는 순서를 기다려줘야하기 때문에 굳이 WebFlux를 쓸 이유가 사라진다. 그래서 Spring에는 R2DBC가 있다.

R2DBC

R2DBC는 이런 비동기 처리를 지원하지 않는 DB가 비동기처리를 지원할 수 있게끔 만들어주는 드라이버 라이브러리 이다. 부차적으로 설명하자면, 해당 라이브러리를 이용하여 쿼리까지 작성하여 사용할 수 있으며 따로 ORM 기술 ( MyBatis, JPA ) 을 사용하지 않는다. 이 ORM 라이브러리이들은 JDBC에 맞게 설계된 ORM 라이브러리이고, R2DBC에서는 지원이 안되는건 아니지만 권장되지 않는다.

그리고 R2DBC를 아직 사용해보지 않아서 정확히 모르겠지만, 자료수집을 하다가 느낀점은 R2DBC에 ORM 기술 어댑터가 나오기를 기다리는 사람들이 왕왕 있는걸 봐서는 아무래도 R2DBC로 쿼리를 작성하는데 조금은 불편한점이 있는건 아닌가 싶다.

 

그 외의 DB를 사용할 경우 

만약에 애초에 ReactiveDataBase를 사용하는 경우에는 해당 데이터베이스에 맞는 Reactive 드라이버나 Reactive 드라이버나 R2DBC 구현체를 데이터베이스에 연결하여 사용한다. 

 

마무리 

이번엔 SpringWebFlux의 DB연결에 대해 개념적인 내용을 다뤄봤습니다. 나중에 직접 구현하게 된다면, 예제를 더하여 수정 포스팅 해보겠습니다. -2023/09/02-

Comments