End-Point별 Transaction처리 및 batch 관리

모두·2025년 3월 22일

오늘은 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에서 할 일

  • Connection Pool 라이브러리(HikariCP) 사용한다면?

    • 연결이 실패하면 자동으로 재연결을 시도하도록 설정이 필요
  • DB의 상태를 감시하는 Listener나 Scheduler 구현이 필요

    • 구현 복잡성 증가
    • 장애 상황과 승격 상황을 판단하기 위한 로직이 필요

End-Point 관리

  • 트랜잭션 처리는 Master만 바라본다
    • CTAS(CREATE TABLE AS) CTE(Common Table Expressions) INSERT INTO 와 같은 쓰기 작업이 필요한 경우엔 어쩔 수 없이 Master에서 처리가 필요
  • 일반적인 서비스 워크로드는 LB 통해서 처리
  • 부하가 큰 통계처리나 모니터링(B/O)는 특정 노드에서만 접근

0개의 댓글