266. 병행 투명성 / 장애 투명성 / 지역 사상 투명성

핵심 인사이트 (3줄 요약)

  1. 본질: 병행 투명성은 다중 사용자의 동시 접근을 자동 관리하고, 장애 투명성은 노드 장애 시에도 서비스를 계속 제공하며, 지역 사상 투명성은 이기종 시스템 간 차이를 은폐하는 투명성 규칙이다.
  2. 가치: 병행 투명성은 동시성 제어 부담을, 장애 투명성은 장애 복구 부담을, 지역 사상 투명성은 이기종 통합 부담을 사용자에게서 없애준다.
  3. 융합: 동시성 제어, 장애 복구, CAP 정리, 투명성 규칙과 밀접하게 연관된다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

병행 투명성 (Concurrency Transparency)

개념 정의

병행 투명성은 여러 사용자가 동시에 데이터에 접근하더라도 상호干扰 없이 처리되게 하는 투명성 규칙이다. 동시성 제어 메커니즘(잠금, MVCC 등)을 사용자가 인식할 필요 없이 시스템이 자동으로 처리한다.

필요성

분산 환경에서는 여러 사용자가 동시에 같은 데이터에 접근할 수 있다. 이를 관리하지 않으면 데이터 불일치, 갱신 손실 등이 발생할 수 있다. 병행 투명성이 없다면 사용자가 직접 잠금을 관리해야 하므로 부담이 증가한다.

장애 투명성 (Failure Transparency)

개념 정의

장애 투명성은 노드 장애가 발생하더라도 서비스가 계속正常运行되게 하는 투명성 규칙이다. 장애 감지, 자동 장애 복구, 데이터 복구 등의 과정이 사용자에게 보이지 않는다.

필요성

분산 환경에서는 일부 노드가故障할 수 있다. 장애 투명성이 없다면 사용자가 장애 발생을 감지하고手動으로 대응해야 하므로 서비스 가용성이 크게 저하된다.

지역 사상 투명성 (Local Mapping Transparency)

개념 정의

지역 사상 투명성은 서로 다른 스키마나 데이터 모델을 가진 지역 데이터베이스를 통합하더라도 동일한 인터페이스로 접근할 수 있게 하는 투명성 규칙이다.

필요성

이종 분산 DB 환경에서는 각 지역의 데이터베이스가 다른 스키마를 가질 수 있다. 지역 사상 투명성이 없다면 사용자가 각 데이터베이스의スキーマ 차이를 인식하고 별도로 처리해야 한다.

비유

병행 투명성은 동시에 여러 차선이 있는高速公路と같다. 여러 차선에서 차가 동시에 이동하지만、交通경찰(시스템)이 이를 자동으로 관리한다. 장애 투명성은 도로에故障차가 있어도他の차선이 우회하여 전체 소통은 계속되는 것과 같다. 지역 사상 투명성은각 나라의 교통规则が異なっても、국제 운전면허로 동일하게 운전할 수 있는 것과 같다.

📢 섹션 요약: 병행/장애/지역 사상 투명성은 각각 동시성 제어, 장애 복구, 이기종 통합의 복잡성을 사용자에게 은폐하여 편의성을 제공한다.


Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)

병행 투명성 동작

┌─────────────────────────────────────────────────────────────────────────────┐
│                    병행 투명성 동작                                          │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  [동시성 제어 없이 문제 발생]                                               │
│                                                                             │
│  시간순서:                                                                  │
│  T1: 사용자 A가 balance 읽음 → 1000                                        │
│  T2: 사용자 B가 balance 읽음 → 1000                                        │
│  T3: 사용자 A가 balance에 500 추가 → 1500 (저장)                            │
│  T4: 사용자 B가 balance에 300 추가 → 1300 (저장) ← 갱신 손실!              │
│                                                                             │
│  ※ 결과: 1000 + 500 + 300 = 1800이어야 하는데 1300                          │
│                                                                             │
│  [병행 투명성 적용 시]                                                      │
│                                                                             │
│  시간순서:                                                                  │
│  T1: 시스템이 잠금 설정 (balance)                                           │
│  T2: 사용자 A가 balance 읽음 → 1000 (잠금 보유)                             │
│  T3: 사용자 B가 balance 읽기 시도 → 대기 (잠금 대기)                        │
│  T4: 사용자 A가 balance 갱신 → 1500 (잠금 해제)                            │
│  T5: 사용자 B가 balance 읽음 → 1500 (새 잠금 획득)                          │
│  T6: 사용자 B가 balance 갱신 → 1800                                         │
│                                                                             │
│  ※ 시스템이 자동으로 동시성 제어 → 사용자는意識不要                           │
│                                                                             │
│  [MVCC를 활용한 병행 투명성]                                                │
│                                                                             │
│  • 각 트랜잭션에 Snapshot 제공                                               │
│  • 읽기는 쓰기를 бл로킹하지 않음 (Cassandra, PostgreSQL)                    │
│  • MVCC: Multi-Version Concurrency Control                                   │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

장애 투명성 동작

┌─────────────────────────────────────────────────────────────────────────────┐
│                    장애 투명성 동작                                          │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  [노드 장애 발생]                                                          │
│                                                                             │
│  클러스터 구성: Node A (Primary), Node B (Secondary), Node C (Secondary)    │
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │  정상 상태                                                         │  │
│  │  Node A ──── Primary ──── 쓰기/읽기 처리                         │  │
│  │  Node B ──── Secondary ──── 복제 대기                             │  │
│  │  Node C ──── Secondary ──── 복제 대기                             │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                              │                                              │
│                              ▼                                              │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │  Node A 장애 발생                                                   │  │
│  │  시스템이 자동으로 장애 감지 → Secondary 승격 프로세스 시작           │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                              │                                              │
│                              ▼                                              │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │  장애 복구 후 상태                                                  │  │
│  │  Node B ──── New Primary ──── 쓰기/읽기 처리                      │  │
│  │  Node C ──── Secondary ──── 복제 대기                             │  │
│  │  Node A ──── 복구 중 ──── 서비스 불가                              │  │
│  │                                                                 │  │
│  │  ※ 사용자는 장애 발생을 인식하지 못함 (투명성)                     │  │
│  │  ※ 서비스는 계속正常运行                                            │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

지역 사상 투명성 동작

┌─────────────────────────────────────────────────────────────────────────────┐
│                    지역 사상 투명성 동작                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  [이종 데이터베이스 통합]                                                  │
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │  지역 데이터베이스 A (Oracle)                                        │  │
│  │  TABLE employees (emp_id NUMBER, emp_name VARCHAR2, salary NUMBER) │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                              │                                              │
│                              ▼                                              │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │  지역 데이터베이스 B (MySQL)                                         │  │
│  │  TABLE staff (staff_id INT, name VARCHAR, wage DECIMAL)            │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                                                             │
│  [지역 사상 투명성 적용 시]                                                │
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐  │
│  │  통합 뷰 (Global Schema)                                             │  │
│  │  employees (employee_id, employee_name, compensation)                │  │
│  │                                                                 │  │
│  │  시스템이 자동으로 매핑:                                              │  │
│  │  • employees.emp_id → employees.employee_id                        │  │
│  │  • employees.emp_name → employees.employee_name                   │  │
│  │  • employees.salary → employees.compensation                      │  │
│  │                                                                 │  │
│  │  ※ 사용자는 단일 뷰에서 조회 (지역 사상 투명성)                     │  │
│  └─────────────────────────────────────────────────────────────────────┘  │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] 세 가지 투명성은 각각 다른 복잡성을 은폐한다. 병행 투명성은 동시성 제어 메커니즘을, 장애 투명성은 장애 감지 및 복구 과정을, 지역 사상 투명성은 이기종 간スキーマ 차이를 은폐한다. 이를 통해 사용자는 분산 환경의 복잡성 없이 단일 데이터베이스처럼 사용할 수 있다.

📢 섹션 요약: 병행/장애/지역 사상 투명성은 각각 동시성 제어, 장애 처리, 이기종 통합의 복잡성을 은폐하며, 분산 데이터베이스의 핵심 투명성 규칙을 구성한다.


Ⅲ. 결론

병행 투명성, 장애 투명성, 지역 사상 투명성은 분산 데이터베이스 투명성 6가지 규칙의 일부이다. 이들은 각각 동시성 제어, 장애 복구, 이기종 통합의 복잡성을 사용자에게 은폐하여 편의성을 제공한다. 시스템을 설계할 때 투명성 수준과 성능 사이의 균형을 고려해야 한다.

📢 섹션 요약: 세 가지 투명성은 각각 다른 복잡성을 은폐하며, 함께 분산 DB의 투명성 원칙을 구성한다.


핵심 인사이트 ASCII 다이어그램 (Concept Map)

┌─────────────────────────────────────────────────────────────────────────────┐
│                3 Additional Transparency Rules Concept Map                  │
│                                                                             │
│  ┌─────────────┐     ┌─────────────┐     ┌─────────────┐                  │
│  │ Concurrency│     │  Failure   │     │    Local   │                  │
│  │Transparency│     │Transparency│     │  Mapping   │                  │
│  │ (병행투명성)│     │ (장애투명성)│     │(지역사상투명)│                │
│  └──────┬──────┘     └──────┬──────┘     └──────┬──────┘                │
│         │                    │                    │                         │
│         ▼                    ▼                    ▼                         │
│  ┌───────────┐        ┌───────────┐        ┌───────────┐                 │
│  │ Locking   │        │ Auto     │        │ Schema    │                 │
│  │ MVCC     │        │ Failover │        │ Mapping   │                 │
│  │          │        │ Recovery  │        │           │                 │
│  └───────────┘        └───────────┘        └───────────┘                 │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

참고

  • 병행 투명성은 동시성 제어 메커니즘을 사용자에게 은폐한다.
  • 장애 투명성은 장애 감지 및 복구 과정을 사용자에게 은폐한다.
  • 지역 사상 투명성은 이기종 DB 간의 스키마 차이를 은폐한다.
  • 세 가지 투명성은 각각 다른 복잡성을 은폐하여 편의성을 제공한다.