성장通

03. 관계형에서 그래프 씽킹으로 본문

그래프/그래프 데이터

03. 관계형에서 그래프 씽킹으로

백악기작은펭귄 2024. 1. 21. 22:11

관계형에서 그래프 씽킹으로

그래프를 도입하여 그래프 씽킹을 시작하기 전에 생각해봐야 할 세 가지 질문이 있다.

 

  1. 관계형 기술보다 그래프 기술이 문제 해결에 더 적합한가?
  2. 데이터를 어떻게 그래프로 사고할 수 있는가?
  3. 그래프 스키마는 어떻게 모델링하는가?

 

이 세 가지 질문을 이해하고 답변하기 위해 많은 시간을 투자한다면 그래프 기술을 성공적으로 도입할 수 있을 것이다. 그럼 이러한 질문들을 이해하기 위해 다음을 살펴보도록 하자.

 

질문에 답하기 위해, 이번 포스팅에서 관계형 기술과 그래프 기술의 차이점을 알아보고 예제 데이터를 두 가지 방식으로 생각해 볼 것이다. 또한 다음 포스팅에서 그래프 스키마 언어를 알아보고 이를 이용하여 그래프 스키마 모델링을 진행해 볼 것이다. 마지막으로 이를 종합하여 관계형과 그래프 중 선택을 하기 위해 고려해야 할 사항들을 생각해 보며 데이터 설계를 연습해 보며 마치겠다.

 

관계형과 그래프의 차이

우리는 지금까지 그래프에 대한 다른 선택지로 관계형을 언급했다. 반대되는 개념은 아니지만, 주로 비교되는 대상이기에 여기서도 이와 같이 진행하도록 하겠다.

 

먼저 관계형 시스템이란, 사람, 장소, 사물과 같이 현실의 개체를 저장하고 가져오는 기능에 중점을 둔 데이터 조직 방식이라고 할 수 있다. 1980년대 SQL 시대를 선도한 기술이라고 해도 과언이 아니며 여전히 많은 곳에서 사용되고 있는 효율적인 시스템이다. 데이터의 형태가 정해진 정형 데이터의 수집과 관리에 용이하며 빠른 데이터 접근이 가능해 저장과 관리에 특화된 시스템이다.

 

반면 그래프 시스템은 데이터 간의 연결 즉 관계에 초점을 맞추어 이를 저장하고 관리하는 것에 중점을 둔 데이터 조직 방식으로, 사람이 다른 사람을 아는 것, 사람이 어떠한 장소에 거주하는 것, 사람이 어떠한 물건을 구매하고 소유하는 것 등 현실 개체 간의 조합적인 연결을 나타낸다. 2000년대 웹의 대중화와 함께 비정형 데이터의 수집과 그로부터 내재된 가치를 얻는 것이 중요해지면서 떠오른 기술로, 비정형 데이터에 대해서도 손쉽게 저장과 관리가 가능해 최근 각광받고 있다.

 

두 시스템 모두 개체와 관계를 표현하고 데이터를 저장 및 관리할 수 있지만 각 시스템에는 각각의 장단점이 존재한다. 이러한 장단점을 잘 이해하고 고려하여 해결하고자 하는 문제에 더 적합한 시스템을 선택하는 것이 중요하다.

 

관계형 데이터 모델링

관계형에서 그래프 씽킹으로의 전환은 데이터 모델링 영역에서부터 시작된다. 이들 두 시스템의 데이터 모델링을 이해하고 나면 어떤 시스템이 더 적합한지를 판단할 수 있다.

 

관계형 시스템에는 데이터를 시각적으로 모델링하는 방법으로 통합 모델링 언어(Unified Modeling Language, UML)개체-관계 다이어그램(Entity-Relationship Diagram, ERD)이 주로 사용된다. 여기서는 예제 데이터를 이용해 ERD로 관계형 데이터 모델링을 완성하는 방법을 알아보고, 이후 이를 그래프 형태로도 생각해 볼 것이다.

 

먼저 예제 데이터는 금융 서비스 업계의 Customer 360 데이터의 일부로, 고객 ID인 customer_id, 고객 이름인 name, 고객 계좌 ID인 acct_id, 대출 상품 ID인 loan_id, 마지막으로 신용카드 번호인 cc_num을 항목으로 가진다. 고객과 대출, 고객과 계좌는 다대다의 관계를 가지며 고객과 신용카드의 경우 일대다 관계를 가진다.

 

 

 

고객, 계좌, 대출, 신용카드 등의 주요 개체를 가지며, 각 개체는 고객과 관계를 갖는다. 고객은 여러 계좌를 가질 수 있고 이들 계좌는 한 명 이상의 고객을 가질 수 있다. 또한 고객은 여러 계좌를 가질 수 있으며 계좌는 한 명 이상의 고객을 가질 수 있다. 마찬가지로 대출 또한 고객과 다대다 관계를 이룬다. 마지막 신용카드의 경우 고객은 여러 신용카드를 가질 수 있지만 신용카드는 오직 고유한 한 고객에게만 속한다.

 

개체와 속성

개체(Entity)란 사람, 장소, 사물 등 데이터베이스에서 추적해야 하는 모든 객체(Object)를 의미하며, 속성(Attribute)이란 이름, 날짜, 기능 설명 등 개체의 특성(Property)을 가리키는 개념이다. 일반적으로 데이터 모델링은 이러한 데이터 내의 개체와 속성을 설명함으로써 실제 세계 묘사를 돕는 기술이다.

 

관계형 데이터 모델링의 기존 접근 방식은 데이터에서 개체와 속성을 식별하는 것에서 시작된다. 예제 데이터에서의 개체는 고객, 계좌, 신용카드 등이며 속성은 고객명, 계좌번호 등을 가리킨다. 관계형 시스템에서는 전통적으로 개체를 table로 표현한다.

 

 

위 다이어그램에는 고객과 은행 계좌를 예시로 들었다. 각 개체는 스스로를 설명하는 속성 목록을 포함한다. 관계형 데이터베이스에서 각 개체는 테이블이 되는데, 행에는 해당 개체의 데이터가, 열에는 속성값이 포함된다.

 

ERD 구축

개체들 간에는 관계가 존재한다. 고객은 계좌를 가지며 계좌 또한 고객을 가진다. 관계형 데이터베이스에서는 이러한 관계를 ERD를 이용하여 설계하고 모델링한다.

 

 

위 다이어그램에서, 고객과 계좌 개체를 연결하는 다이아몬드가 추가되었다. 이는 두 개체 간의 연결이 있음을 암시하는 표기법으로, n:m, 즉 다대다의 관계를 가짐을 의미한다. ERD에 나타나는 연결은 테이블 또는 외래 키(Foreign Key)로 변환할 수 있고, 관계형 시스템에서는 고객과 계좌의 연결을 테이블로 저장한다. 이 말은 곧, 두 개체 간의 연결을 나타내는 Owns 또한 하나의 개체가 된다는 의미이다.

 

이러한 방식은 오랫동안 사용되어 왔지만, 현상을 테이블의 개념으로 바꿔 설명하는 탓에 데이터의 연결을 직관적으로 이해하기는 어려워졌다. 이러한 문제를 해결하기 위해 고안된 방식이 그래프 데이터베이스이다.

 

그래프 데이터의 개념

앞서 관계형 데이터 모델링에 사용했던 예제 데이터 중 일부를 가져와서 시각화해 보자.

 

 

table 형태로 표현된 예제 데이터를 그래프 형태로 나타내었다. Alice, Brian, Chris 세 사람의 정보를 포함하며, Alice, Brian은 계좌를 공유하고 있지만 Chris는 다른 두 고객과 데이터를 공유하지 않는다.

 

그래프의 기본 요소

먼저 그래프와 그래프 데이터의 기본 요소 및 정의를 살펴보자.

 

  1. 그래프: 정점(vertex)과 간선(edge)으로 이루어진 데이터 표현 방식
  2. 정점: 데이터의 개념 또는 개체. node라고도 불리지만 기타 개념과의 혼동을 피하기 위해 vertex를 채택하였다.
  3. 간선: 정점 간의 관계 혹은 연결

 

위 그림의 금융 데이터는 네 가지 개념적 개체인 고객, 계좌, 신용카드, 대출을 포함한다. 그래프에서는 이러한 개체를 정점으로 표현한다. 두 정점은 간선으로 연결되어 있는데, 간선은 데이터 포인트 간의 관계를 나타낸다. 즉, 두 정점 사이 간선이 존재하면 두 객체는 서로 관련이 있음의 의미한다.

 

예제 데이터에서는 간선을 이용해 개인(고객)과 금융 데이터(계좌, 카드 등) 사이의 관계를 나타내고 있다. 고객은 계좌를 보유(owns)하며, 대출을 받고 있고(owes), 신용카드를 사용(uses)한다. 이러한 관계는 그래프 데이터베이스 내에서 모델링 되어 나타내어지고, 이러한 정점과 간선을 모두 포함하여 '그래프'라고 부른다.

 

인접

그래프 이론에서 중요하게 다루는 주제 중 하나인 인접(adjacency)을 먼저 살펴보자. 기본적으로 인접은 그래프 이론에서 정점의 연결 여부를 가리키는 수학적 용어로, 간선으로 연결된 두 정점은 서로 인접한다고 정의한다. 위 그림에서 Alice와 Brian은 인접하는데, 여기서 알 수 있듯이, 기존의 관계형과 달리 그래프 데이터를 사용하면 서로 다른 개체 간의 관계를 쉽게 확인할 수 있다.

 

이웃

연결된 데이터는 일종의 커뮤니티를 형성한다. 그래프 이론에서, 이러한 커뮤니티를 이웃(neighborhood)이라고 부른다. 이웃을 표기할 때는 $N(v)$와 같이 표현하며, 이는 정점 $v$에 인접한 모든 정점, 즉 정점 $v$의 이웃을 통틀어 칭하는 표기이다.

 

 

위 그림은 Alice(c_0)부터 시작하는 그래프 이웃(graph neighborhood)을 나타낸 것이다. 여기서 cc_17과 loan_32, acct_14 정점은 Alice와 직접 연결, 즉 인접해 있다. 이것을 c_0의 일차 이웃(first neighborhood)이라고 한다. 이웃 개념은 시작 정점을 기준으로 확장되는 개념으로, Alice와 acct_14 정점을 사이에 두고 연결된 Brian의 경우 인접은 아니지만 그래프로 연결되어 있으므로 이차 이웃(second neighborhood)이라고 한다. 눈치챘겠지만, 이 'n차 이웃'의 n은 서로 이어진 정점 사이 간선의 개수에 의해 결정된다.

이러한 이웃 개념은 전체 그래프에 대해서 확장하여 적용할 수 있다.

 

거리

인접 개념이 이웃 개념과 연결되듯, 이웃 개념은 다시 거리(distance) 개념과 연결된다. 앞서 이웃 개념으로 정의한 정점의 연결성을 다른 방식으로 표현한 것이 바로 거리이며, 위 그림에서 Alice와 Brian 사이의 거리는 2, 나머지 정점은 1의 거리에 있다고 할 수 있다. 즉, n차 이웃의 n, 다시 말해 이어진 정정 사이 간선의 개수가 거리가 된다.

 

이러한 거리를 표현하는 방법은 $dist(start_vertex, end_vertex)$와 같이 표현하며, 위 예제 데이터에서는 $dist(Alice, cc_17)=1$로 표현된다.

 

차수

앞서 설명한 인접, 이웃, 거리는 두 데이터 간의 연결 관계를 이해하는데 도움이 된다. 하지만 이 개념들은 연결이 얼마나 '많이' 이루어져 있는지를 직관적으로 보여주지는 못한다(물론 이웃에 포함된 개수를 확인할 수는 있다). 이때 등장하는 개념이 바로 차수(degree)이다. 차수란 한 정점에 연결된 간선의 개수를 나타내는 수학적 개념으로, 데이터가 가지는 연결의 개수를 직관적으로 이해할 수 있도록 해준다.

 

위 그림에서 Alice와 cc_17, loan_32, acct_14는 Alice를 중심으로 서로 연결되어 있다. 즉, Alice는 다른 정점으로 이어지는 간선을 3개 가지고 있고, 따라서 Alice의 차수는 3이 된다. 이는 $deg(Alice)=3$와 같이 표현할 수 있다. 여기서 cc_17, loan_32, 그리고 Brian은 1개의 간선만을 가지는데, 이처럼 차수가 1인 정점을 그래프 이론에서는 리프(leaf)라 부른다.

 

간선이 특정 정점에서 시작하는지 혹은 끝나는지에 따라 정점의 차수를 다시 두 개의 하위 범주로 분류한다.

 

  1. 내차수(in-degree): 한 정점으로 들어오는 간선의 수를 가리킨다.
  2. 외차수(out-degree): 한 정점에서 나가는 간선의 수를 가리킨다.

 

Alice의 세 간선은 Alice에서 시작해 다른 세 정점 cc_17, loan_32, acct_14에서 끝난다. 따라서 Alice의 외차수는 3이 된다. 또 acct_14로 들어오는 간선은 두 개이므로 acct_14의 내차수는 2가 된다. 마찬가지로, Chris에서 나가는 간선이 두 개이므로 Chris의 외차수는 2가 된다.

 

이처럼 차수는 정점들의 특징을 나타내줄 수 있는 중요한 속성 중 하나인데, 애플리케이션의 특성에 따라 다르겠지만 차수가 높은 정점을 허브(hub) 또는 영향력이 큰 개체로 간주하여 문제 해결에 이용하기도 한다. 기술적으로도 간선이 굉장히 많은 슈퍼노드(supernode, 보통 차수가 100,000 이상)는 데이터베이스에서의 저장 및 관리, 질의에 있어 성능 저하를 일으킬 우려가 있으므로 미리 파악하여 관리할 필요성이 있다.

 

예고

다음 포스팅에서는 애플리케이션에 그래프 구조를 적용하고 해석하는 방법에 대해 알아볼 것이다. 또 그래프 스키마 언어를 이용하여 이번에 살펴보았던 시각적 다이어그램을 코드로 변환하여 그래프 스키마를 모델링하는 방식에 대해 알아볼 것이다.

'그래프 > 그래프 데이터' 카테고리의 다른 글

06. 관계형을 그래프로  (0) 2024.02.18
05. 그래프의 다중성  (1) 2024.02.03
04. 그래프 스키마 언어  (0) 2024.01.28
02. 그래프 씽킹  (0) 2023.12.21
01. 떠오르는 그래프 기술  (1) 2023.12.06