관리 메뉴

피터의 개발이야기

Spring Data JPA와 ProxySQL의 읽기/쓰기 분리 방법 비교 본문

Database

Spring Data JPA와 ProxySQL의 읽기/쓰기 분리 방법 비교

기록하는 백앤드개발자 2024. 10. 9. 11:03
반응형

ㅁ 들어가며

ㅇ 지난 글, ProxySQL이란에서 ProxySQL의 쿼리 라우팅으로 읽기/쓰기 분리 방법을 알아보았다.
ㅇ 이번 글에서는 Spring Data JPA와 ProxySQL에서의 읽기/쓰기 분리 방법을 비교해보았다.

 

ㅁ Spring Data JPA의 읽기/쓰기 분리

ㅇ 다중 데이터 소스 설정

  읽기용과 쓰기용 데이터 소스를 별도로 구성한다.

  @Configuration 클래스에서 각각의 DataSource, EntityManagerFactory, TransactionManager를 설정한다.

 

ㅇ @Transactional 어노테이션 활용

  읽기 전용 메서드에 @Transactional(readOnly = true)를 적용

  쓰기 작업이 필요한 메서드에는 @Transactional만 사용

ㅇ AbstractRoutingDataSource 구현

 동적으로 데이터 소스를 전환할 수 있는 AbstractRoutingDataSource를 구현한다.

 트랜잭션의 읽기/쓰기 속성에 따라 적절한 데이터 소스를 선택한다.

ㅇ Repository 인터페이스 분리

  읽기 전용 작업을 위한 별도의 Repository 인터페이스를 만든다.

  이 인터페이스에 @ReadOnlyRepository 같은 커스텀 어노테이션을 적용하여 읽기 전용 데이터 소스를 사용하도록 한다.

 

ㅁ ProxySQL의 읽기/쓰기 분리

호스트 그룹 설정

  쓰기용(마스터) 서버와 읽기용(슬레이브) 서버를 별도의 호스트 그룹으로 구성한다.

ㅇ 쿼리 규칙 설정

  SQL 문의 패턴을 분석하여 SELECT 쿼리는 읽기 호스트 그룹으로, 그 외의 쿼리는 쓰기 호스트 그룹으로 라우팅하는 규칙을 설정한다.

ㅇ 포트 기반 분리

  서로 다른 포트를 통해 읽기/쓰기 연결을 분리할 수 있다.

ㅇ 자동 페일오버

  서버 장애 시 자동으로 다른 서버로 전환하는 기능을 제공한다.

 

ㅁ Spring Data JPA와 ProxySQL  읽기/쓰기 비교

  Spring Data JPA ProxySQL
구현 레벨 애플리케이션 레벨 데이터베이스 프록시 레벨
유연성 개발자가 더 세밀한 제어 가능 애플리케이션 코드 변경 없이 구현 가능
성능 애플리케이션 로직에 의한 오버헤드 발생 가능 네트워크 레벨에서 효율적인 라우팅 제공
관리 애플리케이션 배포 시 함께 관리 별도의 미들웨어로 독립적 관리 필요
확장성 애플리케이션 로직 변경 필요 데이터베이스 구성 변경만으로 확장 가능

 

ㅁ 마무리

  ProxySQL은 애플리케이션 변경 없이 데이터베이스 레벨에서 읽기/쓰기 분리를 구현할 수 있어 유지보수가 용이하고, 대규모 시스템에서 더 효과적일 수 있다. 반면 Spring Data JPA 방식은 애플리케이션에 더 밀접하게 통합되어 세밀한 제어가 가능하다는 장점이 있다.

 

ㅁ 함께 보면 좋은 사이트

ProxySQL이란

Spring Data JPA - Write, Read Only 분리 적용하기 - 1. 설정 및 원리

 ProxySQL - 읽기/쓰기 분할 설정 방법

 ㄴ 수신 포트, 정규식,정규식과 다이제스트를 사용한 읽기/쓰기 분할설정 방법 설명

 

 

반응형
Comments