EDITOR'S NOTE
디이프의 핵심 기술에는 iF® Core(Insilico Food Core)가 있는데요. iF® Core(Insilico Food Core)는 미국 국립 보건원(NIH), 식품의약품안전처, 농촌진흥청 등 국가 기관에서 검증한 약 2,800만 건의 데이터를 바탕으로 구축되었습니다.
그리고 디이프의 서비스 중의 하나인 음식 및 식품 추천은 디이프만의 독자적인 iF® Core(Insilico Food Core)라는 유전체-질병-대사체-식품 간의 상호관계를 분석한 데이터베이스를 활용하여 이루어집니다.
이 데이터베이스는 방대한 하나의 Graph DB라고도 볼 수 있는데요, 오늘은 디이프의 이상민 소장님께서 Graph DB에 대해 알려드리도록 하겠습니다.
우리는 무수히 많은 그래프 구조의 데이터들을 마주합니다. 대표적으로 뇌(뉴런 간 연결)를 비롯해 지식 그래프, 화학 분자, 단백질 상호 작용, 세포 간 유사도 그래프, 이미지 분해 등이 있습니다. 이처럼 graph를 이해하는 것은 우리 주변의 다양한 문제들을 이해하고 해결하는 데 필요합니다. 또한, 객체 간의 높은 depth의 관계성을 가지기 쉬운 graph의 특성은 데이터를 새로운 방법으로 바라봄으로써 단편적인 지식에서는 찾지 못했던 새로운 지식을 제시할 수 있습니다.
(이미지 출처: https://wonbae.github.io/2021-02-22-Graph1-importance-of-graph)
그래프는 노드(또는 vertex) 집합V와 엣지(간선) 집합 E로 구성된 자료 구조를 의미합니다. 예를 들어 아래의 그래프는 v1, v2, v3, v4, v5로 구성된 노드 집합 V와 e1, e2, e3, e4로 구성된 엣지 집합 E로 구성돼 있습니다.
그래프는 구성된 엣지와 노드 집합의 수에 따라 sparse graph와 dense graph로 나뉠 수 있습니다. Sparse graph는 노드의 수가 엣지의 수보다 많을 경우를 의미하며, 반대로 노드의 수가 엣지의 수보다 적을 경우에는 dense graph라고 합니다.
(이미지 출처 : https://ratsgo.github.io/data%20structure&algorithm/2017/11/18/graph/)
그래프에서 degree 정보는 중요한 의미를 가집니다. 한 노드의 degree란 해당 노드에 연결된 엣지의 수(혹은 엣지 가중치의 합)를 가리킵니다. Subgraph는 임의의 그래프 �=(�,�)가 주어졌을 때 다음을 만족하는 �′=(�′,�′) 는 �의 부분그래프(subgraph)라고 합니다.
(이미지 출처 : https://www.mathbootcamps.com/the-degree-of-a-vertex-in-an-undirected-graph/, http://mathonline.wikidot.com/graphs-and-subgraphs)
Directed graph는 엣지가 순서가 있는 쌍으로 표현된 그래프의 일종입니다. 다시 말해 엣지가 방향성을 가집니다. 방향 그래프에서는 degree는 indegree, outdegree 두 가지로 나뉩니다. Indegree는 들어오는 방향의 엣지 수를 의미하며, outdegree는 나가는 방향의 엣지 수를 의미합니다. Weighted graph는 엣지에 가중치 내지는 우선순위 정보가 추가된 형태의 그래프입니다.
(이미지 출처 : https://github.com/erenkeskin/directed-weighted-graph, https://www.techiedelight.com/ko/eulerian-path-directed-graph/)
앞에서 graph에 기본적인 개념들에 대해 알아보았습니다. 그렇다면 graph DB는 무엇을 의미하는 것일까요? 일반적으로 데이터베이스라고 하면 사용자 또는 응용 프로그램들이 공유하여 사용할 수 있도록 통합 저장된 데이터들의 집합을 의미하는데 graph DB는 graph 구조로 되어 있는 데이터들의 집합을 의미합니다. Graph DB에서는 기본적으로 노드와 엣지로 데이터들을 저장 및 관리합니다. 노드와 엣지에는 데이터 유형을 구분하는 라벨 정보와 property정보를 저장할 수 있습니다.
매트릭스라는 영화의 정보들을 graph DB로 표현해 보겠습니다. 매트릭스라는 노드가 생성될 것이고 매트릭스에 포함된 다양한 정보들(개봉, 장르, 국가, 등급 등)은 property로 저장되게 됩니다.
여기서 배우 정보들은 노드 정보에 포함되지 않았는데 배우 정보와 배우들이 출연한 다른 영화 정보까지 graph로 확장해 본다면 어떻게 될까요? 그림 7에서 보이는 것처럼 배우와 영화가 엣지로 연결된 graph DB로 표현할 수 있습니다. 매트릭스 영화는 1~3편까지 개봉되었다는 사실을 알 수 있으며, 모든 주연배우들이 3편까지 함께 했다는 사실을 알 수 있습니다.
Graph DB는 데이터를 하나의 객체로 저장하기 때문에 용량이 늘어나거나 입력되는 형태가 다양해도 문제가 되지 않는 장점이 있습니다. 또한, 여러 관계 정보를 조인해서 질의(query)해야 할 경우에 Graph DB는 관계형 DB에 비해 처리 속도가 빠르다는 장점을 가집니다. Graph DB는 사용자에게 현실 모형에 가까운 데이터 형태를 제공하기 때문에 다른 DB에 비해 직관적으로 데이터를 이해하기 쉽습니다.
(이미지 출처 : https://towardsdatascience.com/comparing-graph-databases-5475bdb2e65f)
관계형 데이터베이스는 오랫동안 데이터베이스 환경을 장악해 왔습니다. 그러나 하나의 데이터베이스만 고집하는 시대는 이제 과거가 되었습니다. 다루는 문제나 데이터의 특성에 따라 가장 적합한 데이터베이스 선택하는 것이 필요합니다. Graph DB는 다른 DB에 비해 장점이 많은 데이터베이스로 여러 분야에서 활용 가치가 높아지고 있습니다. 소셜 네트워킹, 추천 엔진, 사기 탐지, 지식 그래프, 분자 네트워크와 같은 데이터를 다루신다면 graph DB는 좋은 대안이 될 수 있습니다.
https://wonbae.github.io/2021-02-22-Graph1-importance-of-graph
https://ratsgo.github.io/data%20structure&algorithm/2017/11/18/graph/
https://www.mathbootcamps.com/the-degree-of-a-vertex-in-an-undirected-graph/
http://mathonline.wikidot.com/graphs-and-subgraphs
https://towardsdatascience.com/comparing-graph-databases-5475bdb2e65f