[데이터 중심 애플리케이션 설계] 02장 - 데이터 모델과 질의 언어
데이터 모델은 아마도 소프트웨어 개발에서 제일 중요한 부분일 것이다. 왜냐하면 데이터 모델은 소프트웨어가 어떻게 작성됐는지 뿐만 아니라 해결하려는 문제를 어떻게 생각해야 하는지에 대해서도 지대한 영향을 미치기 때문이다.
1. 관계형 모델과 문서 모델
1. 관계형 모델
관계형 모델은 오늘날 가장 잘 알려진 데이터 모델로 1970년 에드가 코드(Edgar Codd)가 제안한 관계형 모델을 기반으로 한 SQL이다. 데이터는 관계(relation)로 구성되고 각 관계는 순서 없는 튜플(tuple) 모음이다. 관계형 모델은 이론적 제안이었고 당시 많은 사람은 관계형 모델을 효율적으로 구현할 수 있을지 의문을 제기했지만 1980년대 중반에 관계형 데이터베이스 관리 시스템(RDBMS, relational database management system)과 SQL은 정규화된 구조로 데이터를 저장하고 질의할 필요가 있는 사람들 대부분이 선택하는 도구가 됐다.
2. NoSQL
NoSQL은 Not Only SQL의 약자로 현재 2010년대에 관계형 모델의 우위를 뒤집으려는 가장 최신 시도다.
NoSQL 데이터베이스는 다음과 같은 다양한 원동력이 있다.
- 대규모 데이터셋이나 매우 높은 쓰기 처리량 달성을 관계형 데이터베이스보다 쉽게 할 수 있는 뛰어난 확장성을 필요
- 상용 데이터베이스 제품보다 무료 오픈소스 소프트웨어에 대한 선호도 확산
- 관계형 모델에서 지원하지 않는 특수 질의 동작
- 관계형 스키마의 제한에 대한 불만과 더욱 동적이고 표현력이 풍부한 데이터 모델에 대한 바람
3. 문서 모델
문서 모델은 스키마 유연성, 지역성에 기인한 더 나은 성능으로 선호되는 모델이다. 일부 애플리케이션의 경우 애플리케이션에서 사용하는 데이터 구조와 더 가깝기도 한다. 애플리케이션에서 데이터가 문서와 비슷한 구조라면 문서 모델을 사용하는 것이 좋다. 애플리케이션에서 조인이나 다대다 관계를 사용하지 않는다면 매력적인 모델이다.
2. 데이터를 위한 질의 언어
관계형 모델이 등장했을 때 데이터를 질의하는 새로운 방법도 함께 나타났다. SQL은 선언형 질의 언어인 반면 IMS와 코다실은 명령형 코드를 사용해 데이터베이스에 질의한다. 선언형은 HOW에 명령형은 WHAT에 중심을 두는 것으로 선언형은 목표를 달성하기 위한 방법이 아니라 목표를 달성하기 위해 어떻게 할지를 지정하면 되며, 명령형은 목표를 달성하기 위해 무엇을 할지를 지정하면 된다.
선언형은 명령형보다 간결하고 쉽게 작업할 수 있다는 장점이 있으며, 데이터베이스 엔진의 상세 구현이 숨겨져 있어 질의를 변경하지 않고도 성능을 향상시킬 수 있다는 장점이 있다. 또한 상세 구현이 숨겨져 있다는 것은 병렬 실행에서 명령어의 순서를 지정해야하는 명령형에 비해 장점을 갖는다.
3. 그래프형 데이터 모델
데이터에서 다대다 관계가 매우 일반적이라면 그래프형 데이터 모델이라는 선택지가 있다. 그래프는 정점(Vertex)과 간선(Edge)으로 이루어진 자료구조로 소셜, 웹, 도로 등 많은 유형의 데이터를 그래프로 모델링할 수 있다.
1. 속성 그래프 모델
속성 그래프 모델에서 각 정점은 다음과 같은 요소로 구성된다.
- 고유한 식별자
- 유출(outgoing) 간선 집합
- 유입(incoming) 간선 집합
- 속성 컬렉션(키-값 쌍)
각 간선은 다음과 같은 요소로 구성된다.
- 고유한 식별자
- 간선이 시작하는 정점(꼬리 정점)
- 간선이 끝나는 정점(머리 정점)
- 두 정점 간 관계 유형을 설명하는 레이블
- 속성 컬렉션(키-값 쌍)
2. 트리플 저장소 모델
트리플 저장소 모델은 속성 그래프 모델과 거의 동등하다. 트리플 저장소에서는 모든 정보를 주어(subject), 서술어(predicate), 목적어(object)처럼 매우 간단한 세 부분 구문 형식으로 저장한다.
Ref
- 데이터 중심 애플리케이션 설계 - p.27 ~ p.69