현재 선택한 정보처리 과정

정보처리기사 필기 이론 학습

이론 목록으로 돌아가기

분산 데이터베이스의 분할·복제·투명성

분산 데이터베이스는 논리적으로 관련된 데이터를 여러 사이트에 두고 통합 관리한다. 수평 분할은 행을, 수직 분할은 열을 나누며 할당과 복제는 위치와 사본 수를 정하는 별도 결정이다. 완전성·재구성 가능성·분리성과 각 투명성의 의미를 구분한다. 데이터베이스 이중화는 장애 시 서비스 연속성을 위한 구성이며 백업을 대신하지 않는다.

예상 읽기 12

분산 데이터베이스의 핵심 구조

분산 데이터베이스(Distributed Database)는 논리적으로 서로 관련된 데이터가 네트워크로 연결된 둘 이상의 사이트 또는 노드에 물리적으로 저장된 데이터베이스다. 분산 데이터베이스 관리 시스템(DDBMS)은 전역 스키마, 분산 질의, 동시성·복구, 분할과 복제 정보를 관리하여 사용자가 가능한 한 하나의 데이터베이스처럼 접근하도록 한다.

여러 컴퓨터를 사용한다는 사실만으로 분산 데이터베이스가 되는 것은 아니다.

구분데이터 배치핵심 특징
중앙 집중 데이터베이스데이터가 주로 한 데이터베이스에 있음여러 클라이언트가 접속해도 데이터 자체가 한곳이면 중앙 집중 구조일 수 있음
분산 처리계산이나 프로그램 작업을 여러 컴퓨터가 나눔데이터베이스가 반드시 여러 사이트에 분산될 필요는 없음
분산 데이터베이스논리적으로 연관된 데이터가 여러 사이트에 배치됨DDBMS가 전역 관점의 조회·갱신·무결성을 조정함
복제 데이터베이스같은 데이터나 조각의 사본을 둘 이상의 사이트에 유지함분산 구조에 사용할 수 있지만 분산 데이터베이스와 같은 뜻은 아님

사이트가 반드시 멀리 떨어진 국가에 있어야 하는 것은 아니다. 같은 데이터센터의 여러 서버, 서로 다른 가용 영역, 여러 지역의 데이터베이스도 논리적 통합과 분산 관리가 이루어지면 분산 데이터베이스 구조가 될 수 있다.

분산 환경의 DBMS가 모두 같은 제품과 데이터 모델을 사용하면 동종 분산 데이터베이스, 서로 다른 DBMS·자료형·질의 언어를 함께 다루면 이종 분산 데이터베이스라고 한다. 이종 환경에서는 자료형 변환, 문자 집합, NULL 처리, 트랜잭션 기능과 SQL 방언 차이까지 조정해야 하므로 통합이 더 어렵다.

분할·할당·복제는 서로 다른 결정이다

분산 데이터베이스 설계는 보통 다음 세 질문을 구분해서 다룬다.

  1. 분할(Fragmentation): 전역 릴레이션을 어떤 논리적 조각으로 나눌 것인가?
  2. 할당(Allocation): 각 조각을 어느 사이트에 배치할 것인가?
  3. 복제(Replication): 각 조각의 사본을 몇 곳에 유지할 것인가?
CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
전역 릴레이션과 전역 스키마
            │
            │ 분할
            ▼
     F1       F2       F3
      │        │        │
      └────────┴────────┘
            │ 할당
            ▼
      사이트 A · 사이트 B · 사이트 C
            │
            │ 필요하면 일부 또는 전부 복제
            ▼
      같은 조각의 추가 사본 유지

분할은 논리적인 나눔, 할당은 물리적 위치 선택, 복제는 사본 수와 갱신 방식 선택이다. “서울 주문 조각을 서울 사이트에 둔다”는 분할과 할당을 함께 말한 것이며, “서울 주문 조각을 부산에도 사본으로 둔다”는 복제가 추가된 것이다.

테이블 파티션·샤딩과의 경계

  • 한 DBMS 안에서 큰 테이블을 범위·목록·해시 파티션으로 나누는 것은 물리 파티션 설계다.
  • 여러 독립 데이터베이스나 서버에 행 집합을 나누는 샤딩(Sharding)은 분산 수평 분할의 대표 구현 방식이다.
  • 모든 샤딩 시스템이 분할 위치와 분산 질의를 완전히 숨기는 것은 아니다. 애플리케이션이 샤드 키와 대상 서버를 직접 선택하면 투명성이 낮다.

따라서 문제에서 파티션이라는 단어가 나오면 한 DBMS 내부의 테이블 파티션, 여러 노드로 나눈 데이터 조각, 통신이 끊긴 네트워크 분할 중 어느 문맥인지 먼저 확인해야 한다.

수평 분할: 행을 나눈다

수평 분할은 같은 열 구조를 유지하고 조건에 따라 행을 나누는 것이다. 고객 테이블을 서울·부산·기타 지역 고객으로 나누는 것이 예다. 조각들은 합집합으로 원본을 재구성한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
CUSTOMER = CUSTOMER_SEOUL ∪ CUSTOMER_BUSAN ∪ CUSTOMER_OTHER

SQL에서는 조각이 겹치지 않음을 확인한 뒤 UNION ALL로 합칠 수 있다. NULL을 허용하는 지역 열에서 NOT IN ('SEOUL','BUSAN')만 쓰면 NULL 행이 빠지므로 기타 조각에 IS NULL 조건도 고려한다.

범위를 금액 <= 100000금액 >= 100000으로 나누면 경계 100000이 중복된다. < 100000>= 100000처럼 경계를 맞춰야 한다.

자신의 속성으로 나누는 기본 수평 분할과 부모의 분할을 따라 자식 행을 나누는 유도 수평 분할을 구분한다. 지역별 고객에 속한 주문을 같은 지역에 두는 것이 유도 수평 분할의 예다.

수직 분할: 열을 나눈다

수직 분할(Vertical Fragmentation)은 릴레이션의 속성, 즉 열을 여러 조각으로 나누는 방식이다. 원본 행을 다시 결합할 수 있도록 각 조각에 기본키나 후보키와 같은 공통 식별자를 포함한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
EMPLOYEE(employee_id, name, department_id, salary, phone)

업무용 열과 민감 열을 나누면 다음과 같다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
EMPLOYEE_CORE(employee_id, name, department_id)
EMPLOYEE_PRIVATE(employee_id, salary, phone)

원본은 공통 식별자 employee_id로 조인하여 복원한다.

SQL코드 영역 안에서 좌우로 이동할 수 있습니다.
SELECT c.employee_id,
       c.name,
       c.department_id,
       p.salary,
       p.phone
FROM employee_core AS c
JOIN employee_private AS p
  ON p.employee_id = c.employee_id;

수직 분할에서 식별자를 반복하는 것은 잘못된 중복이 아니라 재구성을 위한 연결 정보다. 식별자가 빠지거나 유일하지 않으면 어떤 열 조각이 같은 원본 행에 속하는지 안정적으로 판단할 수 없고, 조인 과정에서 행이 누락되거나 허위 조합이 생길 수 있다.

일반적으로 수직 조각 사이에서는 공통 식별자를 제외한 비키 속성을 겹치지 않게 설계한다. 같은 비키 열을 여러 조각에 반복하면 그 부분은 분할뿐 아니라 복제 성격도 가지며 갱신 동기화가 필요하다.

혼합 분할과 분할 방식 비교

혼합 분할(Hybrid or Mixed Fragmentation)은 수평 분할 후 수직 분할을 하거나, 수직 분할 후 수평 분할을 하는 방식이다. 예를 들어 주문을 지역별 행 조각으로 나눈 뒤 각 지역 조각에서 자주 조회하는 열과 상세 열을 다시 나눌 수 있다.

분할 방식나누는 기준조각의 공통점대표 재구성대표 목적
수평 분할행 조건열 구조가 같음합집합지역·고객·기간별 접근 지역성
수직 분할열 집합공통 식별자 포함식별자 조인자주 쓰는 열만 읽기, 민감 열 분리
유도 수평 분할관련 부모 조각과의 연결연관 행을 같은 기준으로 나눔부모·자식 조각의 대응 관계원격 조인 감소
혼합 분할행과 열을 순차 적용단계별 규칙에 따라 다름합집합과 조인의 조합복합 업무 부하 최적화

조각을 지나치게 잘게 나누면 한 지역 질의는 빨라질 수 있어도 전역 질의, 무결성 검사, 메타데이터 관리, 재분배와 복구가 복잡해진다. 분할의 정도는 가장 빈번하고 중요한 업무가 어느 데이터 묶음을 함께 읽고 쓰는지를 기준으로 결정한다.

좌우로 이동해 그림을 확인하세요.그림 크게 보기
수평·수직 분할의 재구성
수평·수직 분할의 재구성

수평·수직 분할의 재구성

(1,서울,가)·(2,부산,나)·(3,서울,다)를 지역별 행으로 수평 분할하면 합집합으로 복원한다. (id,region)과 (id,name)으로 수직 분할하면 양쪽에 유지한 id로 조인해 복원한다. 완전성·재구성 가능성·분리성을 확인하며 키 반복은 복제를 위한 것이 아니다.

올바른 분할의 세 조건

분할 전후의 의미가 달라지지 않으려면 다음 조건을 확인한다.

조건의미위반 예
완전성(Completeness)원본의 모든 필요한 데이터 항목이 하나 이상의 조각에 포함됨지역 NULL 행이 어느 수평 조각에도 들어가지 않음
재구성 가능성(Reconstruction)정해진 연산으로 원본을 손실·추가 없이 정확히 복원할 수 있음수직 조각에서 식별자를 빼서 원래 행을 연결할 수 없음
분리성(Disjointness)의도적으로 중복하지 않는 데이터 항목은 한 조각에만 존재함경계값 100000이 두 수평 조각에 동시에 포함됨

수평 분할이 서로 겹치지 않는다면 다음을 만족한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
R = R1 ∪ R2 ∪ ... ∪ Rn
Ri ∩ Rj = ∅  (i ≠ j)

수직 분할은 공통 키 K를 이용하여 다음처럼 복원할 수 있어야 한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
R = R1 ⋈K R2 ⋈K ... ⋈K Rn

분리성에는 예외 문맥이 있다.

  • 수직 분할의 공통 키는 조각마다 반복되어야 한다.
  • 가용성을 위해 같은 조각을 여러 사이트에 두는 복제는 의도적인 중복이다.
  • 따라서 “분산 데이터베이스에서는 어떤 데이터도 두 곳에 존재하면 안 된다”는 선지는 틀리다.

완전성과 재구성 가능성은 반드시 확인해야 하지만, 분리성은 순수 분할인지 의도적인 복제를 포함하는지를 함께 보고 판단한다.

할당과 복제

할당은 조각을 저장할 사이트를 정하는 것이고 복제는 같은 데이터의 사본을 여러 곳에 두는 것이다. 서울 고객 데이터는 서울에 주로 두고 공통 상품 코드는 여러 사이트에 복제할 수 있다.

방식배치주요 절충
비복제조각마다 한 사이트저장·갱신은 단순하지만 그 사이트 장애에 취약
완전 복제전체 데이터를 모든 대상 사이트지역 읽기와 가용성에 유리하지만 갱신 비용 큼
부분 복제필요한 조각만 일부 사이트에 추가읽기 이득과 갱신 비용을 절충

동기 복제는 필요한 사본의 확인을 기다린 뒤 완료하므로 지연 비용이 생길 수 있다. 비동기 복제는 원본이 먼저 완료되므로 사본에서 잠시 오래된 값이 보이거나 장애 때 최근 변경이 손실될 수 있다. 정확한 확인 단계는 제품마다 다르다.

읽기 부하를 나눌 수 있어도 쓰기는 사본 간 일관성을 유지해야 한다. 복제 사본에 잘못된 삭제도 전파될 수 있으므로 복제는 과거 상태를 보존하는 백업의 대체물이 아니다.

데이터베이스 이중화

이중화는 장애가 발생해도 서비스를 계속하거나 빠르게 재개하기 위해 대체 가능한 데이터베이스 자원을 구성하는 것이다. 데이터 사본을 유지하는 복제와 결합할 수 있지만, 단순히 파일을 두 번 복사하는 것만으로 서비스 전환까지 완성되지는 않는다.

구성역할확인할 점
Active–Standby주 시스템이 처리하고 대기 시스템이 장애 시 역할을 인계대기 데이터의 최신성·전환 가능성
Active–Active둘 이상의 시스템이 정상 시 업무를 분담동시 갱신·충돌·부하 조정

장애 후 대체 시스템으로 넘기는 것을 장애 조치(failover)라고 한다. 원래 시스템으로 돌아오는 복귀는 데이터 상태와 운영 조건을 확인한 뒤 수행한다. 이중화가 모든 장애와 데이터 손실을 없애는 것은 아니며, 두 시스템이 같은 장치·전원·오류에 함께 영향을 받는지도 검토한다.

투명성: 분산 세부사항을 숨기는 정도

분산 투명성(Distribution Transparency)은 데이터가 여러 사이트에 나뉘거나 복제되어 있다는 세부사항을 사용자와 응용 프로그램이 얼마나 의식하지 않아도 되는지를 나타낸다. 투명성이 높을수록 응용 프로그램은 단순해지지만, 조각 탐색·사본 선택·분산 커밋과 복구의 복잡성은 DDBMS 내부로 이동한다.

투명성숨기는 내용사용자가 기대하는 모습
위치 투명성(Location Transparency)데이터가 어느 사이트에 있는지객체가 이동해도 같은 논리 이름과 질의로 접근
분할·단편화 투명성(Fragmentation Transparency)릴레이션이 어떤 행·열 조각으로 나뉘었는지전역 테이블을 질의하면 시스템이 필요한 합집합·조인을 수행
복제·중복 투명성(Replication Transparency)사본의 수와 위치, 읽을 사본과 갱신 전파 방식하나의 논리 데이터만 있는 것처럼 읽고 씀
명명 투명성(Naming Transparency)위치 정보가 포함된 물리 이름위치가 달라도 일관된 전역 이름 사용
트랜잭션·거래 투명성(Transaction Transparency)한 트랜잭션이 여러 사이트에 걸친다는 사실정의된 보장에 따라 전체가 함께 커밋되거나 롤백
병행 투명성(Concurrency Transparency)여러 사이트·사용자의 동시 실행 조정동시 실행 중에도 정해진 격리·일관성 규칙 유지
장애 투명성(Failure Transparency)일부 노드·통신의 실패 탐지와 복구 과정가능한 범위에서 일관성을 훼손하지 않고 재시도·복구·장애 조치

교재마다 투명성의 분류와 묶는 방식은 다를 수 있다. 어떤 자료는 위치와 명명을 네트워크 투명성에 포함하고, 어떤 자료는 분할·위치·복제를 분산 투명성의 핵심 유형으로 제시한다. 개수만 암기하기보다 선지가 무엇을 숨기는지를 읽는다.

장애 투명성은 장애가 절대 발생하지 않는다는 뜻이 아니다. 사용자가 복잡한 복구 과정을 직접 다루지 않아도 되도록 한다는 목표다.

투명성과 전송 비용·분산 확정

투명성이 있어도 실제 지연과 장애가 사라지는 것은 아니다. 동종 환경은 같은 계열 DBMS를, 이종 환경은 서로 다른 DBMS·자료형·문법 등을 조정한다.

원격 사이트에서 행 필터와 필요한 열을 먼저 선택하면 전송량을 줄일 수 있다. 500행 × 행당 20바이트는 순수 데이터 10000바이트다. 오버헤드·압축을 제외한 양이며 지연 시간이 아니다.

2단계 커밋은 준비 응답을 모아 전체 커밋 또는 중단을 결정한다. 참여자가 준비 불가라면 일부만 커밋하여 성공으로 처리하지 않는다. 락 획득·해제를 정하는 2단계 로킹과 구분한다.