개발 공부 기록하기/02. DB & SQL

R2DBC pooling yml로 설정하기

lannstark 2023. 8. 28. 23:26

의존성

implementation("io.asyncer:r2dbc-mysql:1.0.2") // R2DBC MySQL Driver
implementation("io.r2dbc:r2dbc-h2:1.0.0.RELEASE")

 

꽤 tricky 하게 yml로 설정한 auto configuration을 이용할 수 있음.

url 부분에 "pool"이 들어가지 않는 것이 핵심!

 

r2dbc pooling 공식문서에서 얘기하는 "r2dbc:pool:mysql"을 사용하는 방법은 Configuration을 (yml을 사용하지 않고) 직접 해줄 때 사용하는 방법이다.

spring:
    r2dbc:
    url: 'r2dbc:mysql://localhost:3306/database?option1=value1'
    username: 'root'
    password: ''
    pool:
      enabled: true
      initial-size: 10
      max-acquire-time: 5s
      max-create-connection-time: 5s
      max-idle-time: 60m # max-wait-time 이랑 같이 챙겨 줘야 함.
      max-life-time: 60m
      max-size: 10

logging:
  level:
    io.r2dbc.pool: DEBUG
    reactor.pool: DEBUG
  • io.r2dbc.pool.ConenctionPoolConnectionFactory 를 구현했고 내부적으로 다른 ConnectionFactory 를 갖고 있음. 일종의 Decorator pattern
  • 그리고 내부적으로 reactor.pool.InstrumentedPool를 갖고 있는데 (구현체는 같은 패키지의 SimpleDequePool) 실제 connection 취득은 다른 factory를 / pooling은 이 InstrumentedPool을 사용하고 있다.
  • SQL show status like 'Threads_connected'; 을 통해 정상적으로 10개의 connection pooling이 되는 것을 확인할 수 있음.