CS 정리

R2DBC란? WebFlux 활용

문쿼리 2025. 7. 1. 20:36

관계형 데이터베이스(PostgreSQL, MySQL ...)를 비동기 / 논블로킹 방식으로 사용하는 기술로 매우 심플함

기존 Spring은 JPA + JDBC 조합의 블로킹이어서 WebFlux에 활용하기에 부적합

 

JPA vs R2DBC

항목 JPA (JDBC) R2DBC
처리 방식 동기, 블로킹 비동기, 논블로킹
스레드 낭비 O X
WebFlux와 궁합 ❌ 나쁨 ✅ 좋음
Lazy 로딩, 더티체킹 있음 없음
SQL 제어 추상화 직접 작성
퍼포먼스 제어 제한적 내가 직접 가능

 

JPA와 다른 점 (R2DBC 특징)

  • 영속성 컨텍스트 없음 → 더티체킹, 자동 저장 X
  • Lazy 로딩 없음 → JOIN 직접 써야 함
  • 연관관계 자동 매핑 없음 → 객체 관계 대신 SQL 중심
  • SQL 직접 작성해야 함 → 유연하지만, 코드도 많아짐
String sql = """
    SELECT u.id, u.name, o.id AS order_id
    FROM users u
    JOIN orders o ON o.user_id = u.id
    WHERE u.status = $1
""";

databaseClient.sql(sql)
        .bind("$1", "ACTIVE")
        .map(row -> new UserOrderDto(...))
        .all();

 

요약

R2DBC는 WebFlux와 궁합이 좋은 비동기 DB 접근 기술
자동화보다는 SQL 직접 컨트롤하는 개발자에게 잘 맞는 도구
복잡한 비즈니스 쿼리도 문제없이 다룰 수 있음