RDBMS 클러스터링 및 레플리케이션
- 클러스터링: RDBMS에서 클러스터링은 데이터베이스 서버들을 서로 연결해 하나의 논리적 서버로 운영한다. 이를 통해 고가용성, 부하 분산, 장애 복구 등의 이점을 얻는다.
- 레플리케이션: 데이터의 일관성을 유지하기 위해 하나의 데이터베이스 서버(주 서버)에서 다른 서버(보조 서버)로 데이터를 복사하는 과정이다. 주 서버에서의 변경사항이 보조 서버로 동기화되어 데이터의 안정성 및 가용성이 향상된다.
NoSQL 클러스터링 및 레플리케이션
- 클러스터링: NoSQL 데이터베이스는 대규모 분산 환경에 적합하게 설계된다. 클러스터링은 여러 노드를 포함해 데이터를 분산시키며, 이를 통해 높은 확장성과 장애 내성을 제공한다.
- 레플리케이션: NoSQL에서도 레플리케이션은 중요한 역할을 한다. 데이터의 복제를 통해 노드 장애 시 데이터 손실 위험을 줄이고, 읽기 쿼리의 부하를 분산시킬 수 있다.
분산 환경에서의 트랜잭션 관리
ACID와 BASE
- RDBMS는 ACID(Atomicity, Consistency, Isolation, Durability) 원칙을 따르며, 엄격한 트랜잭션 관리를 제공한다.
- NoSQL은 BASE(Basically Available, Soft state, Eventually consistent) 모델을 따르며, 느슨한 일관성을 허용하고 확장성에 중점을 둔다.
분산 트랜잭션
- Two-Phase Commit (2PC): 분산 트랜잭션에서 일관성을 보장하기 위해 사용되는 프로토콜이다.
- SAGA 패턴: 긴 트랜잭션을 여러 작은 트랜잭션으로 나누고, 각각을 독립적으로 실행한 후 최종적으로 일관성을 보장하는 방식이다.
데이터 동기화와 일관성 유지 방법
- 동기 레플리케이션: 데이터 변경이 주 서버와 보조 서버에 동시에 적용되도록 해 높은 데이터 일관성을 보장한다.
- 비동기 레플리케이션: 데이터 변경이 주 서버에서 먼저 이루어지고, 이후 보조 서버에 적용된다. 이 방법은 성능상의 이점이 있지만, 일관성에는 약간의 지연이 발생할 수 있다.
다중 트랜잭션 상황에서의 Deadlock 해결 방법
- 타임아웃 설정: 일정 시간이 지나면 트랜잭션을 자동으로 중단시켜 데드락을 해결한다.
- 잠금 순서 지정: 모든 트랜잭션이 동일한 순서로 리소스에 접근하도록 해 데드락을 방지한다.
- 감지 및 복구: 데드락을 감지하고, 일부 트랜잭션을 롤백해 시스템을 정상 상태로 복구한다.
샤딩
- 샤딩: 데이터를 여러 데이터베이스에 분할해 저장하는 방법이다. 이를 통해 데이터베이스의 부하를 분산시키고, 확장성을 향상시킬 수 있다.
레플리케이션과 샤딩의 선택
- 레플리케이션: 데이터의 가용성과 내구성이 중요한 경우에 적합하다.
- 샤딩: 대용량의 데이터를 처리하고 확장성이 중요한 경우에 적합하다.
개발자의 입장에서 볼 때, 어떤 방식을 선택할 것인지는 데이터베이스의 목적, 데이터의 양, 트래픽 패턴, 인프라 등 여러 요소를 고려해야 한다. 예를 들어, 고가용성이 중요한 서비스에서는 레플리케이션을, 대규모 데이터를 처리해야 하는 경우에는 샤딩을 고려할 수 있다.