일정 크기 이상의 서비스를 운영하는 회사에서는 대부분 데이터베이스 부하 분산을 위해 Replication을 적용하여 master-slave 형태로 reader-writer 인스턴스를 를 분리해 놓습니다.
Primary cluster : 데이터베이스 클러스터에서 주(primary) 역할을 담당하는 노드를 말합니다. 주 역할을 담당하는 노드는 데이터베이스에 대한 쓰기 작업을 처리하고, 복제(replication)를 통해 다른 노드에 데이터를 전파합니다.
Writer instance : 데이터베이스 시스템에서 쓰기 작업을 처리하는 인스턴스를 말합니다. 쓰기 작업은 데이터베이스에 데이터를 추가, 수정 또는 삭제하는 작업을 말합니다. 일반적으로 쓰기 작업은 주로 프라이머리(primary) 노드에서 처리됩니다.
Reader instance : 데이터베이스 시스템에서 읽기 작업을 처리하는 인스턴스를 말합니다. 읽기 작업은 데이터베이스에서 데이터를 조회하는 작업을 말합니다.
그래서 만약에 CUD 작업이 들어왔을 때의 순서는 다음과 같습니다.
1. CUD 작업이 들어옴
2. CUD 작업이 writer DB에 적용됨
3. writer DB에서 프라이머리(primary) DB에 복제됨
4. 프라이머리 DB에서 Reader DB로 복제됨
Spring 기준에서 서비스들은 대부분 기본적으로 Transactional 어노테이션의 readOnly 값으로 reader-writer 인스턴스를 결정하게 세팅합니다.
@Transactional(readOnly=false) 또는 그냥 @Transactional
fun insertMember(memberId: Long, memberName: String, memberNumber: String)
// writer 인스턴스에 입력...
}
@Transactional(readOnly=true)
fun getMember(id: Long){
// reader 인스턴스에서 조회...
}
위와 같이 readOnly 값을 주어 CUD는 writer DB에서, R은 reader DB에서 작업이 이루어지도록 하여 부하를 분산시킵니다.
출처
https://velog.io/@jaehyunup/12312324
'DB' 카테고리의 다른 글
[DB] ORM, 장단점, 종류 질문, 답변 (0) | 2023.05.10 |
---|---|
[DB] 트랜잭션, Lock, ACID, 격리 수준 질문, 답변 (0) | 2023.05.10 |
[DB] JOIN, 종류, ON, HAVING, 쿼리수행순서 질문, 답변 (0) | 2023.05.10 |
[DB] 키, 인덱스 질문, 답변 (0) | 2023.05.10 |
[DB] 특징, DDL, DML, DCL, RDBMS, NoSQL 질문, 답변 (0) | 2023.05.10 |
댓글