오늘은 End-Point별 Transaction처리 및 batch를 관리하는 방법에 대해 글을 작성할 것이다.
JPA Master/Slave

Master/Slave 단위로 설정을 한 다음에
JPA Master/Slave - Repository

레포지터리 단에서 master 인지 slave 인지 엔티티로 지정해주면 된다.
JPA Master/Slave - AOP(읽기/쓰기 분리)
- Aspect-Oriented Programming, 관점 지향 프로그래밍
- 코드에서 공통적으로 반복되는 부분(로깅, 트랜잭션 등)을
비즈니스 로직에서 분리하여 모듈화하는 기법

하나의 엔티티에서 이런식으로 기능 분리

하지만 승격이 발생한다면…?
- Master/Slave 설정을 IP로 하고 있었다면…?
- IP가 바뀌게 되면서 쓰기 작업이 모두 실패할 수 있음
- IP가 아닌 DNS를 사용하여 지정이 필요함
- 승격이 발생하면 자동으로 DNS:IP를 변경해주는 작업이 필요함
- 최근 DB Client들은 주기적으로 DNS를 확인하여 cache된 IP를 바라보는 문제는 없음
- 하지만 DNS 업데이트 주기나 캐싱 설정에 따라서 즉시 반영이 안될 경우엔 장애 발생!
Application에서 할 일
End-Point 관리
- 트랜잭션 처리는 Master만 바라본다
- CTAS(CREATE TABLE AS) CTE(Common Table Expressions) INSERT INTO 와 같은 쓰기 작업이 필요한 경우엔 어쩔 수 없이 Master에서 처리가 필요
- 일반적인 서비스 워크로드는 LB 통해서 처리
- 부하가 큰 통계처리나 모니터링(B/O)는 특정 노드에서만 접근
