블로그

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 제공개인 프로젝트 및 토이 프로젝트에서 사용 중문서 및 예제 지속 보완 중GitHubhttps://github.com/KrongDev/routemateREADME에 개념 설명, 설정 방법이 정리되어 있습니다.마무리이 라이브러리는“정답 솔루션”을 만들고 싶어서 시작한 게 아니라,실무에서 반복되던 불편을 조금이라도 줄이기 위해 만들었습니다.혹시 비슷한 문제를 겪고 계셨다면가볍게 한 번 살펴봐 주셔도 좋겠습니다.피드백, 이슈, PR 모두 환영합니다.읽어주셔서 감사합니다.

opensorucejavarouterspring

채널톡 아이콘