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 모두 환영합니다.
읽어주셔서 감사합니다.

댓글을 작성해보세요.

채널톡 아이콘