본문으로 건너뛰기

분산 데이터베이스

정보처리기사 목차물리 데이터베이스 설계레슨 113 / 233

목차

분산 데이터베이스는 여러 곳의 서버에 나뉘어 저장되면서도 사용자에게는 하나로 보이는 데이터베이스입니다. 나뉘어 있다는 사실을 숨겨 주는 성질을 투명성이라 하고, 숨기는 것이 무엇인지에 따라 여섯으로 가릅니다.

데이터베이스와 DBMS에서 본 데이터베이스는 한 곳에 모여 있었습니다. 전국에 지점을 둔 회사라면 이야기가 다릅니다. 모든 데이터를 서울 서버 한 대에 두면 부산 지점은 멀리까지 다녀와야 하고, 그 서버가 멈추면 모든 지점이 멈춥니다. 그래서 데이터를 쓰는 곳 가까이 나눠 두는데, 이러면 '학생 표가 어디 있나'를 사용자가 알아야 하는 문제가 생깁니다. 분산 데이터베이스는 이 문제를 사용자에게 넘기지 않습니다. 아래 그림은 질의 하나가 서버 사이로 건너가 한 결과로 돌아오는 모습을 보입니다.

8단계 중 1단계. 사용자는 서버가 몇 대인지 모르는 채 표 하나에 묻습니다. 결과로 일곱 행이 모두 돌아옵니다.

1한 표가 여러 서버에 쪼개져 있다

한 표를 쪼개 여러 서버에 나눠 두는 것을 단편화라 합니다. 쪼개는 방향이 둘입니다.

가르는 기준수평 단편화수직 단편화
무엇으로 쪼개나행을 조건으로 가른다열을 골라 가른다
학생 표라면CS 학생은 서울, EE 학생은 부산학번·이름은 서울, 학번·학과코드는 부산
다시 모으려면조각을 이어 붙인다같은 학번끼리 잇는다

쪼갠 조각을 어느 서버에 둘지 정하는 일은 할당이라 합니다. 같은 조각을 여러 서버에 두는 것이 복제입니다.

쪼개 두고 복제해 두면 사용자가 알아야 할 것이 늘어납니다. 어느 서버에 묻고, 조각을 어떻게 모으고, 복제본 가운데 어느 것을 읽을지를 질의마다 적어야 합니다. 분산 데이터베이스는 이것을 모두 DBMS가 맡습니다.

2숨겨 주는 여섯 — 투명성

투명성사용자가 몰라도 되는 것
위치 투명성데이터가 어느 서버에 있는지
분할 투명성표가 조각으로 쪼개져 흩어져 있는지
지역 사상 투명성그 서버의 DBMS가 데이터를 무슨 이름으로 부르는지
중복 투명성같은 데이터의 복제본이 몇 개 어디에 있는지
병행 투명성다른 사용자가 같은 때 같은 데이터를 쓰는지
장애 투명성서버 하나나 연결이 멈췄는지

위치 투명성이 있으면 질의에 서버 이름을 적지 않습니다. 관리자가 행을 다른 서버로 옮겨도 질의를 고치지 않습니다.

-- 위치 투명성이 있을 때
SELECT * FROM 학생;

-- 없으면 서버를 적어야 한다
SELECT * FROM 학생@서울;

지역 사상 투명성은 서버마다 다른 지역 이름을 숨겨 줍니다. 부산 서버의 DBMS가 학생 표를 STU_BUSAN이라는 이름으로 가지고 있어도 사용자는 SELECT * FROM 학생으로 질의하고, 두 이름을 맞춰 주는 일은 DBMS가 맡습니다. 위치 투명성과 가르는 기준은 '무엇을 몰라도 되나'입니다 — 위치 투명성은 어느 서버에 있는지를, 지역 사상 투명성은 그 서버에서 무슨 이름으로 불리는지를 숨깁니다.

병행 투명성은 여러 사용자가 여러 서버에서 동시에 일해도 각자 혼자 쓰는 것과 같은 결과를 받게 하는 것입니다(병행 제어의 일을 서버 여럿으로 넓힌 것입니다).

장애 투명성은 서버나 연결이 멈춰도 시작한 트랜잭션이 끝까지 처리되거나 아예 없던 일이 되게 하는 것입니다(트랜잭션과 ACID의 원자성을 서버 여럿에 걸쳐 지키는 것입니다).

분할 투명성은 자료에 따라 단편화 투명성이라고도 부릅니다.

3얻는 것과 치르는 것

얻는 것치르는 것
쓰는 곳 가까이 두어 빨리 읽는다여러 서버에 걸친 처리가 어렵다
한 서버가 멈춰도 나머지로 돌아간다관리할 곳이 늘고 복잡하다
서버를 늘려 조금씩 키울 수 있다통신이 끼어 되레 느려질 수 있다
쓰는 곳에서 직접 관리한다데이터가 어긋날 위험이 있다

여기서 '빨리 읽는다'는 가까운 서버에 있는 데이터를 읽을 때만 그렇습니다. 여러 서버의 데이터를 이어야 하는 질의는 서버 사이로 데이터를 옮겨야 해서, 한 서버에 모아 두었을 때보다 느려질 수 있습니다.

예제

다음 여섯 가지 일이 일어났습니다. 각각 어느 투명성이 해 준 일인지 먼저 골라 보세요.

(가) 관리자가 EE 학생 행을 부산 서버에서 대구 서버로 옮겼습니다. 사용자의 질의는 한 글자도 고치지 않았는데 결과가 그대로 나옵니다.

(나) 부산 서버의 전원이 나갔습니다. 그 순간 처리 중이던 수강 신청은 오류 없이 끝났습니다.

(다) SELECT * FROM 학생으로 일곱 행이 나왔습니다. 실제로는 서울에 세 행, 부산에 네 행이 따로 저장되어 있습니다.

(라) 같은 때 다른 학생도 수강 신청을 했습니다. 두 사람 모두 자기 신청만 반영된 결과를 받았습니다.

(마) 학과 표를 세 서버에 똑같이 복제해 두었습니다. 사용자는 학과 표가 하나뿐인 것처럼 조회합니다.

(바) 부산 서버의 DBMS는 학생 표를 STU_BUSAN이라는 이름으로 가지고 있습니다. 사용자는 그 이름을 모른 채 학생으로 질의해 결과를 받습니다.

가르는 기준 — 무엇을 숨겼나투명성사례
데이터가 있는 서버의 이름위치 투명성(가)
표가 조각으로 쪼개져 있다는 것분할 투명성(다)
지역 DBMS가 쓰는 이름지역 사상 투명성(바)
복제본의 수와 자리중복 투명성(마)
같은 때 일하는 다른 사용자병행 투명성(라)
멈춘 서버와 끊어진 연결장애 투명성(나)

(가)와 (다)를 가르는 기준은 '표가 쪼개졌는지'입니다. (가)는 조각 하나가 통째로 옮겨 간 일이라 자리만 바뀌었고, (다)는 한 표가 두 조각으로 쪼개져 있는데도 한 장으로 보인 일입니다.

(나)와 (라)를 가르는 기준은 '무엇 때문에 가려졌는지'입니다. (나)는 서버가 멈춰서, (라)는 다른 사용자가 같은 때 일해서입니다.

시험 포인트

  • 필기: 분산 데이터베이스는 여러 서버에 나뉘어 있으면서 사용자에게 하나로 보이는 데이터베이스입니다. 표를 쪼개는 방향은 행으로 가르는 수평 단편화와 열로 가르는 수직 단편화입니다. 투명성 여섯은 위치·분할·지역 사상·중복·병행·장애이고, 숨기는 것이 무엇인지로 가립니다. 장점은 가까운 곳에서 빨리 읽기·한 곳이 멈춰도 돌아감·조금씩 키우기이고, 단점은 여러 서버에 걸친 처리와 관리가 어렵고 통신 때문에 되레 느려질 수 있다는 것입니다. 상황을 주고 어느 투명성인지 고르게 하거나, 여섯 가운데 하나를 다른 이름으로 바꿔 놓고 찾게 합니다. 자료에 따라 지역 사상 투명성을 빼고 다섯만 드는 글도 있지만, '투명성이 아닌 것'을 묻는 문제에 지역 사상 투명성이 보기로 나오면 그것은 투명성입니다.
  • 실기: 이름은 위치 투명성(Location Transparency), 분할 투명성(Fragmentation Transparency, 자료에 따라 단편화 투명성), 지역 사상 투명성(Local Mapping Transparency), 중복 투명성(Replication Transparency), 병행 투명성(Concurrency Transparency), 장애 투명성(Failure Transparency)으로 씁니다.

확인 문제

1. 어느 분산 데이터베이스에 중복 투명성(replication transparency)이 있습니다. 이 시스템에서 일어나는 일로 알맞은 것을 고르세요.

  • ① 과목 표를 세 서버에 똑같이 두었지만, 사용자는 과목 표가 하나인 것처럼 조회합니다.
  • ② 과목 표의 행을 학점에 따라 두 서버에 갈라 두었지만, 사용자는 한 표로 조회합니다.
  • ③ 과목 표를 다른 서버로 옮겼지만, 사용자의 질의를 고치지 않았습니다.
  • ④ 과목 표를 가진 서버가 멈췄지만, 사용자는 오류를 보지 않았습니다.
정답

①입니다. 중복 투명성은 같은 데이터의 복제본이 몇 개 어디에 있는지를 숨깁니다. 복제본이 셋이어도 사용자는 하나만 있는 것처럼 씁니다.

  • ② 한 표가 조각으로 쪼개져 흩어진 것을 숨긴 일입니다. 분할 투명성입니다.
  • ③ 데이터가 있는 서버의 이름을 숨긴 일입니다. 위치 투명성입니다.
  • ④ 멈춘 서버를 숨긴 일입니다. 장애 투명성입니다.

2. 다음 (가)~(마)에 맞는 이름을 한글 이름과 영문으로 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

  • (가) 주문 표의 행이 지점마다 나뉘어 세 서버에 흩어져 있는데, 사용자는 쪼개지지 않은 표 하나로 조회합니다.
  • (나) 질의에 서버 이름을 적지 않습니다. 관리자가 표를 다른 서버로 옮겨도 질의를 고치지 않습니다.
  • (다) 서울과 부산에서 같은 순간에 같은 주문 행을 고쳤는데, 두 사람 모두 혼자 고친 것과 같은 결과를 받았습니다.
  • (라) 주문을 처리하는 도중에 부산 서버가 멈췄는데, 그 주문은 끝까지 처리되어 모든 서버에 같은 결과로 남았습니다.
  • (마) 부산 서버의 DBMS는 주문 표를 ORD_BUSAN이라는 이름으로 가지고 있는데, 사용자는 주문 표 하나의 이름으로 질의합니다.
정답

받는 답: (가) 분할 투명성(Fragmentation Transparency) · (나) 위치 투명성(Location Transparency) · (다) 병행 투명성(Concurrency Transparency) · (라) 장애 투명성(Failure Transparency) · (마) 지역 사상 투명성(Local Mapping Transparency)

(가)의 실마리는 '쪼개져 흩어져 있는데 한 장으로 보인다', (나)는 '서버 이름을 적지 않는다', (다)는 '같은 순간에 고쳤는데 혼자 고친 것과 같다', (라)는 '멈췄는데 끝까지 처리되었다', (마)는 '그 서버가 쓰는 이름을 모른 채 질의한다'입니다.

  • 같은 이름의 다른 꼴: (가) 단편화 투명성 — 자료에 따라 이렇게도 부릅니다. 함께 받습니다.
  • 틀리는 꼴 위치 투명성 — (가)에: 데이터가 있는 서버의 이름을 숨깁니다. (가)는 표가 쪼개져 있다는 것을 숨겼습니다.
  • 틀리는 꼴 중복 투명성 — (가)에: 같은 데이터의 복제본 수를 숨깁니다. (가)는 같은 데이터를 여러 곳에 둔 것이 아니라 다른 행을 나눠 둔 것입니다.
  • 틀리는 꼴 장애 투명성 — (다)에: 멈춘 서버를 숨깁니다. (다)에서 멈춘 서버는 없습니다.
  • 틀리는 꼴 위치 투명성 — (마)에: 어느 서버에 있는지를 숨깁니다. (마)는 서버는 밝혀져 있고 그 서버가 쓰는 이름을 숨겼습니다.

3. 학과 표를 서울·부산 두 서버에 똑같이 복제해 두었습니다. (1) 사용자가 복제본의 수를 몰라도 되게 해 주는 투명성의 이름을 한글 이름과 영문으로 쓰세요. (2) 이렇게 복제해 두면 얻는 것 하나와 치르는 것 하나를 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

정답

받는 답: (1) 중복 투명성(Replication Transparency)

(2) 얻는 것 — 부산에서도 가까운 서버에서 학과 표를 읽어 빨리 응답하고, 서울 서버가 멈춰도 부산 사본으로 읽을 수 있습니다. 치르는 것 — 학과명을 고칠 때 두 사본을 모두 고쳐야 하고, 한쪽만 고쳐지면 두 서버의 값이 어긋납니다.

  • 틀리는 꼴 분할 투명성 — (1)에: 한 표가 조각으로 쪼개져 흩어진 것을 숨깁니다. 여기서는 같은 표를 통째로 두 곳에 두었습니다.
  • 틀리는 꼴 위치 투명성 — (1)에: 어느 서버에 있는지를 숨깁니다. 복제본이 몇 개인지를 숨기는 것은 중복 투명성입니다.

더 보기: 복제본을 언제 어떻게 맞추는지는 다음 레슨 데이터베이스 이중화에서 봅니다.

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

정보처리기사 목차로