
애플리케이션을 설계할 때 처음 모델링한 데이터는 최종 모델과 거의 비슷하지 않은 경우가 많다. 일반적으로 데이터를 더 잘 이해하고 비즈니스 요구사항이 변화함에 따라 모델도 변경된다.
관계를 처리하도록 설계되지 않은 데이터베이스를 사용하면 애플리케이션 구축과 변화에 대응하는 것이 복잡해 진다. 이것은 "data model problem"라고 불리는 현상을 야기한다.
물리적 모델(데이터를 실제로 저장하는 방식)이 개념적 모델(우리가 자연스럽게 데이터를 생각하고 표현하는 방식) 과 잘 맞지 않는 문제
예를 들어, 관계형 데이터베이스에서는 모든 관계를 외래 키와 JOIN테이블을 사용하여 모델링해야한다. 아이러니 하게도 '관계형' 데이터베이스라는 이름에도 불구하고 실제로는 관계 자체를 직접 저장하지 않는다.
이러한 개념적 모델과 물리적 모델 간의 차이로 인해 데이터 사용이 더어려워진다. 관계와 비즈니스 규칙이 개발자가 작성한 SQL query와 코드 속에 묻혀 버리기 때문이다. 지식 그래프와 그래프 데이터 베이스는 관계와 비즈니스 규칙을 물리적 모델 자체에 명시적으로 포함함으로써 이 문제를 해결한다. 그래프 데이터 베이스에서는 관계가 데이터 구조 자체에 존재한다.
관계형 데이터베이스도 나름의 용도가 있지만, 관계가 중요한 사용 사례에는 지식 그래프가 훨씬 더 적합하며 관계에 최적화된 유연한 데이터 구조를 가지고 있다.
지식 그래프는 관계를 데이터의 핵심 구성요소로 취급하므로써 데이터 모델링 문제를 해결한다. 관계는 JOIN을 재구성하는 대신 그래프 데이터베이스에 기본적으로 저장한다.
지식 그레프 구축의 첫번째 단계는 명확한 목적과 사용 사례를 정의하는 것이다.
구현을 시작하기 전에 지식 그래프가 해결할 문제를 명확하게 정의해야한다. 지식그래프는 관계형 모델에서는 복잡한 쿼리와 잦은 변경이 필요한 복잡한 데이터를 효과적으로 구성하고 조회하는데 탁월하다.
전체 도메인을 한번에 모델링하려 하지 말고, 집중된 시작점을 선택하자.
점진적 접근은 모델을 확장하기 전에 관리 가능한 범위 내에서 접근 방식을 검증 할 수 있게 해준다.

NASA의 "Lessons Learned Database"
Cisco의 메타데이터 기반 지식 그래프
Novartis의 생물학적 지식 그래프
데이터베이스 관리 시스템(DBMS: DataBase Management system)은 시간이 지남에 따라 지식 그래프를 모델링, 쿼리 및 확장하는 방법을 결정한다. 효과적인 DBMS를 선택하면 비즈니스 요구에 맞게 사용 사례를 해결하고 확장할 수 있다.
그 주요 선택지로는 Triple Store(트리플스토어)와 Property Graph(속성그래프)가 있다.
RDF(Resource Description Framwork) 데이터 베이스는 '트리플스토어'라고도 하며, 데이터를 주어-술어-목적어 트리플 형태로 구조화한다.
새 관계와 관계의 속성을 추가하는 경우:
고도로 연결된 데이터셋을 다룰때 트리플 스토어는 빠르게 복잡해진다.
Property Graph는 데이터를 Nodes(엔티티), Edges(관계), properties(노드나 관계에 대한 추가 정보)로 표현된다.

triple store VS property graph
그래프 데이터 모델링은 데이터를 노드와 관계로 표현하는 방법에 관한 것이다. 그래프 구조를 설계할 때는 도메인을 가장 효과적으로 표현할 수 있는 방법을 고안하게 된다.

그래프 데이터 모델을 개발하는 과정 :
1. 도메인 분석 및 질문 정의
- 애플리케이션이 답해야할 특정 질문 정의
2. 주요 엔티티(node) 식별
- 데이터셋의 주요 객체( 고객, 제품, 거래등)를 나타내는 노드를 결정
- 각 노드에는 목적, 역할, 유형을 정의하는 하나 이상의 레이블이 있음.
3. 관계 정의
- 노드 간의 연결을 정의
- 예 : 구매한(purchased), 팔로우한다(follows), 주문했다(place order), 소속된다(belopngs to) 등
- 이 관계들은 노드들이 어떻게 상효작용하는지 나타냄
4. 속성 추가
- 노드와 관계에 대한 더 자세한 정보를 제공하는 속성을 추가
- 예: 'Person' 노드는 'first_name'과 'last_name'속성을 가질 수 있다.
- 예 : 'PLACED_ORDER'관게는 'purchase_date'와 같은 속성을 가질 수 있다.

조직 원리는 주요 비즈니스 개념이나 규칙을 그래프에 직접 포함시켜 지식 그래프의 프레임워크를 구축한다. 이는 지식 그래프가 통찰력을 제공할 수 있도록 데이터를 구성하는 유연하고 개념적인 구조이다.
대부분 간단한 조직원리를 사용하고, 정말 필요할때만 Ontology를 활용한다.
데이터 구조를 모델링 한 후, 지식 그래프를 채울 데이터를 준비해야한다.
사용 사례와 관련된 데이터셋을 식별하는 것부터 시작한다.
구조화된 데이터: 테이블이나 스프레드시트와 같이 명확한 구조를 가진 데이터
반구조화된 데이터: JSON 또는 XML 파일과 같이 일부 구조를 가진 데이터
비구조화된 데이터: 텍스트 문서, 이메일, 로그와 같이 구조가 없는 데이터
원시 데이터에는 불일치, 오류, 누락된 값이 포함될 수 있다. 지식 그래프에 데이터를 로드하기 전에 데이터를 정리해야 한다.
주요 데이터 준비 작업 :
모든 데이터셋에서 날짜, 숫자 값, 텍스트 필드가 일관되게 표현되는지 확인
예: 날짜 형식을 모두 'YYYY-MM-DD'로 통일
동일한 고객이나 제품에 대한 여러 항목과 같은 중복 레코드를 식별하고 병합
그래프 데이터 모델은 지식 그래프를 생성하기 전에 이 "엔티티 해상도(entity resolution)" 단계를 효율적으로 수행하는 데 도움이 됨
불완전한 데이터를 어떻게 처리할지 결정:
잘못된 철자, 유효하지 않은 ID 또는 기타 불일치와 같은 부정확성을 식별하고 수정
이러한 데이터 준비 과정을 통해 지식 그래프에 더 정확하고 일관된 데이터를 로드할 수 있게 된다.
그래프 데이터 모델을 정의하고, 데이터를 준비했다면, 이제 데이터를 그래프 데이터베이스 인스턴스에 수집할 차례이다.
Neo4J를 예로 설명할 예정이다.

성공적으로 데이터를 수집하고 검증했다면, 지식 그래프가 완성된것이다.
지식 그래프를 구축하는 것은 중요한 이정표이지만, 사용 사례에서 필요한 질문에 답할 수 있는지 확인하기 전까지는 과정이 완료되지 않는다.
지식 그래프를 테스트하면 개선이 필요한 영역을 식별하고 그에 따라 최적화할 수 있다. 이런 반복적인 과정을 통해 지식 그래프가 사용 사례를 지원하고 효율적으로 작동하는지 확인할 수 있다.
지식 그래프가 비즈니스 질문에 답할 수 있는지 확인하기 위해 쿼리를 실행한다. 이러한 쿼리는 그래프가 실행 가능한 인사이트를 제공하고 1단계에서 정의한 목표를 충족하는지 검증해야한다.
예를 들어, 전자 상거래 지식그래프에서는 다음과 같은 간단한 쿼리로 시작할 수 있다 :
이 후, 더 고급쿼리로 나아갈 수 있다.
지식 그래프가 의미 있거나 예상된 결과를 제공하지 않는 경우, 기초를 다시 검토해야 할 수도 있다.
이러한 테스트와 최적화 과정을 통해 지식 그래프의 실용성과 효율성을 보장한다.
지식 그래프는 고정된 것이 아니라, 새로운 데이터와 비즈니스 요구에 맞춰 조정할 수 있다. 시간이 흐름에 따라 지식 그래프는 불가피한 변화에 적응하며 발전한다.
도메인이 변화함에 따라 지식 그래프도 함께 조정해야한다.
지식 그래프는 비즈니스와 함께 성장해야한다. 다음과 같은 모범 사례를 적용하여 확장성과 효율성을 유지할 수 있다.
지식 그래프를 꾸준히 유지관리하면 비즈니스가 성장함에 따라 정확한 인사이트를 계속 제공할 수 있다.
전통적인 데이터베이스는 풍부한 관계를 단순한 구조로 평면화하지만, 지식 그래프는 우리가 자연스럽게 생각하는 방식으로 데이터를 표현할 수 있게 해준다. (엔티티의 네트워크로서)
NASA와 Cisco 같은 조직들은 지식 그래프를 활용하여 고도로 연결된 데이터에서 인사이트를 도출한다. 이러한 인사이트는 전통적인 관계형 시스템에서는 발견하기 어려운 것들이다. 지식 그래프의 일반적인 사용 사례로는 추천 엔진 구축, 부정 거래 탐지 시스템 개발, 기업 검색을 위한 GraphRAG 사용 등이 있다.
시작하는 경우, 특정 사용 사례에 집중하고, 개념증명을 위해 위에서 설명한 단계를 따르는 것이 좋다.
이 후, 요구사항과 데이터셋이 변화함에따라 그래프가 발전하도록 한다. 첫번째 구현은 완벽할 필요가 없다(유용하기만하면됨). 경험이 쌓이고 지식 그래프가 성숙해짐에따라 연결된 데이터에서 계속해서 새로운 인사이트를 발견하게 된다.
Neo4j의 지식그래프 개념 증명 구축 개발안내서 : "The Developer's Guide : How to Build a Knowledge Grap(Northwind 데이터셋을 사용한 지식 그래프 구현의 상세한 과정)"