Spring Framework/WebFlux

R2DBC란 무엇인가?

Junuuu 2023. 12. 27. 00:01

개요

webflux를 활용하다가 r2dbc라는 개념이 등장하게 되었고 어떤 것인지 알아보고자 합니다.

 

R2DBC란 무엇인가?

R2DBC는 Reactive Relation DataBase Connectivity의 약어입니다.

Reactive Relation으로 R이 2번 등장하여 R2DBC라고 불립니다.

해석해 보면 "반응형 관계형 데이터베이스 연결" 입니다.

 

간단하게 설명하자면 non-blokcing 기반의 db connection을 위해 사용되는 API입니다.

 

Spring MVC + JDBC는 blokcing 기반이라면 WebFlux + R2DBC은 non-blocking 기반입니다. 

 

 

R2DBC의 등장 배경

reactive programming의 특징인 적은 스레드로 동시성을 처리하는 non-blokcing 애플리케이션이 등장하였습니다.

하지만 JDBC는 blokcing으로 동작하였고 결국 DB가 병목지점이 되었습니다.

결국 DB에도 non-blokcing api가 필요하게 되었고 R2DBC가 등장하게 되었습니다.

 

여러 NoSQL 데이터베이스에서는 reactive clients를 지원하지만 RDB에서 NoSQL으로 마이그레이션 하는 것은 대부분 프로젝트에서 고려하지 않습니다.

 

 

R2DBC의 한계

첫 번째로 기존의 JDBC나 JPA에서 쉽게 사용했던 여러 기능들을 제공하지 않습니다.

caching, lazy loading 등 ORM 프레임워크의 많은 기능들이 제공되지 않는데 R2DBC를 최대한 단순하고 제한적이게 만들기 위해서라고 합니다.

 

두 번째로 커뮤니티가 적습니다.

Blokcing 방식에 비해 커뮤니티도 적고 경험자가 많지 않습니다.

내가 사용하는 DB 벤더사에서 R2DBC를 지원하는지도 확인해봐야 합니다.

 

세 번째로 JDK21에서 사용가능한 Project Loom이라고 하는 개념이 도입되면 R2DBC를 사용하지 않게 될 수 있습니다.

Proejct Loom을 간단히 소개하면 코루틴과 비슷한 개념으로 Virtual Thread를 통하여 가벼운 동시성 처리를 제공합니다.

 

 

 

 

참고자료

https://r2dbc.io/

https://brunch.co.kr/@purpledev/28

https://velog.io/@effirin/R2DBC-R2DBC%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

https://godekdls.github.io/Spring%20Data%20R2DBC/whatisr2dbc/

https://docs.spring.io/spring-data/r2dbc/docs/1.2.2/reference/html/#get-started:first-steps:what

https://docs.spring.io/spring-data/relational/reference/r2dbc/getting-started.html

https://techblog.woowahan.com/10795/