5%의 복잡도로 80%의 성능을 제공하는 DB Router routemate 소개드립니다.
안녕하세요.
최근 개인적으로 사용하기 위해 만들었다가 오픈소스로 공개한 DB Router 라이브러리 routemate를 소개드립니다.
왜 만들었나
실무에서 다음과 같은 상황을 자주 겪었습니다.
Read/Write DB 분리가 필요하지만
ShardingSphere, Vitess 같은 솔루션은 도입 비용이 너무 큼
단순한 R/W 분기만 필요한데 설정과 학습 비용이 과도함
트랜잭션, AOP, ThreadLocal, DataSource 라우팅을 매번 직접 구현
결국 매 프로젝트마다
“비슷한 코드를 또 만들고, 또 검증하고, 또 사고를 치는” 상황이 반복됐습니다.
그래서 목표를 이렇게 잡았습니다.
복잡한 기능은 과감히 버리고
실무에서 가장 많이 쓰는 80%만 아주 단순하게 제공하자
Routemate는 무엇인가
Routemate는 Spring 기반 환경에서 사용할 수 있는
경량 Read/Write DB Router 라이브러리입니다.
Read / Write DataSource 자동 분기
Spring Transaction 연동
AOP 기반으로 투명하게 동작
최소한의 설정
Starter 형태로 바로 사용 가능
Sharding, 분산 트랜잭션, 멀티 키 라우팅은 지원하지 않습니다.
의도적으로 지원하지 않습니다.
설계 방향
1. 설정은 최대한 줄인다
application.yml 몇 줄로 끝
복잡한 rule DSL 없음
DataSource 개수만 알면 바로 사용 가능
2. Spring이 이미 제공하는 걸 최대한 활용한다
@Transactional(readOnly = true)기반 라우팅ThreadLocal 최소 사용
Spring AOP 라이프사이클에 자연스럽게 녹임
3. “왜 이렇게 동작하는지” 바로 이해 가능해야 한다
코드 양이 적음
내부 로직이 단순함
디버깅 시 추적이 쉬움
언제 쓰면 좋은가
단일 Master + 다수 Replica 구조
Read 부하가 높은 서비스
Sharding까지는 필요 없는 서비스
언제 쓰면 안 되는가
복잡한 샤딩 전략이 필요한 경우
멀티 테넌트 기반 라우팅
DB 레벨의 강력한 일관성 제어가 필요한 경우
이 경우에는 기존 대형 솔루션이 더 적합합니다.
현재 상태
Maven Central 배포 완료
Spring Boot Starter 제공
개인 프로젝트 및 토이 프로젝트에서 사용 중
문서 및 예제 지속 보완 중
GitHub
https://github.com/KrongDev/routemate
README에 개념 설명, 설정 방법이 정리되어 있습니다.
마무리
이 라이브러리는
“정답 솔루션”을 만들고 싶어서 시작한 게 아니라,
실무에서 반복되던 불편을 조금이라도 줄이기 위해 만들었습니다.
혹시 비슷한 문제를 겪고 계셨다면
가볍게 한 번 살펴봐 주셔도 좋겠습니다.
피드백, 이슈, PR 모두 환영합니다.
읽어주셔서 감사합니다.
댓글을 작성해보세요.