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 직접 컨트롤하는 개발자에게 잘 맞는 도구
복잡한 비즈니스 쿼리도 문제없이 다룰 수 있음