일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- kotlin spring
- MySQL
- Kubernetes
- CKA
- mysql 튜닝
- kotlin coroutine
- Linux
- 오블완
- CKA 기출문제
- kotlin
- 정보처리기사 실기 기출문제
- aws
- 기록으로 실력을 쌓자
- AI
- 티스토리챌린지
- AWS EKS
- kotlin querydsl
- 정보처리기사실기 기출문제
- IntelliJ
- 공부
- Pinpoint
- CloudWatch
- Elasticsearch
- PETERICA
- Spring
- Java
- minikube
- 코틀린 코루틴의 정석
- APM
- 정보처리기사 실기
- Today
- Total
피터의 개발이야기
Spring Data JPA와 ProxySQL의 읽기/쓰기 분리 방법 비교 본문
ㅁ 들어가며
ㅇ 지난 글, 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 방식은 애플리케이션에 더 밀접하게 통합되어 세밀한 제어가 가능하다는 장점이 있다.
ㅁ 함께 보면 좋은 사이트
ㅇ Spring Data JPA - Write, Read Only 분리 적용하기 - 1. 설정 및 원리
ㄴ 수신 포트, 정규식,정규식과 다이제스트를 사용한 읽기/쓰기 분할설정 방법 설명
'Database' 카테고리의 다른 글
ProxySQL이란 (0) | 2024.10.09 |
---|---|
[Database] 정규화(Normalizatio)란? (0) | 2024.02.24 |
[DBeaver] 필수 단축키 (0) | 2024.02.08 |
[DB] SQL 연습을 위한 실습 사이트 (1) | 2023.07.29 |
[QUERYDSL] 수십억건에서 QUERYDSL 사용하기, 이동욱님 영상을 보고서... (0) | 2023.07.02 |