[Spring] Master/Slave 읽기 분리는 왜 LazyProxy 위에서 동작해야 할까?
·
카테고리 없음
개요@Transactional(readOnly = true)를 붙이면 조회는 Slave로, 쓰기는 Master로 나가도록 DataSource를 라우팅하는 패턴은 널리 쓰입니다. 그런데 이 라우팅을 AbstractRoutingDataSource 만으로 구현하면 읽기 트랜잭션이 항상 Master로 가버리는 현상을 만나게 됩니다. 원인은 Spring 트랜잭션 매니저가 "커넥션을 빌리는 시점"과 "readOnly 플래그를 세팅하는 시점"의 순서에 있고, 이를 교정하는 장치가LazyConnectionDataSourceProxy입니다. Spring Framework + HikariCP + MyBatis 조합을 기준으로 설명하겠습니다.2. 배경 — Master/Slave 읽기 분리란쓰기 부하와 읽기 부하를 분리하기 ..