데이터 중심 애플리케이션 설계를 읽고 정리한 글입니다.

📌 Data Model이란

데이터의 구조와 관계를 정의하는 것을 의미하는데, data model별로 제약이 존재하기 때문에 내가 구축할 애플리케이션에 적합한 모델을 선택하는 것이 중요하다.
그 중에서도 아래 세 가지 모델은 많이 사용되므로 잘 이해해두는 것이 좋겠다.

Relational Model

1970년 Edgar Codd가 제안한 개념으로 데이터는 관계로 구성되고 각 관계는 순서 없는 튜플모음이다. 이를 기반으로 1980년대 중반에 RDBMS가 등장했고 SQL이 개발되었으며 현재까지도 대부분의 웹서비스들이 많이 채택하는 모델이다.

LinkedIn의 profile을 Relational Model로 표현해보자:

  • 사용자마다 하나씩 가지고 있는 name, summary는 users 테이블의 column으로 모델링할 수 있다
  • 하지만 experience, position, education, contact info는 사용자별로 다양하고 one-to-many 관계이기 때문에 table을 구분하였고, users 테이블에서 id를 참조할 수 있도록 모델링할 수 있다

relational-model

Document Model

2000년대 초반부터 웹애플리케이션이 폭발적으로 증가하면서 다양한 데이터 형식과 대량의 데이터들이 양산되기 시작했는데 Relational Model의 한계를 극복하기 위해 Document Model이 등장하게 되었다.
JSON, BSON, XML 형식의 문서를 사용하여 중첩된 데이터 구조를 자연스럽게 표현할 수 있고, schema-less 구조로 다양한 형식의 데이터를 저장할 수 있다.

LinkedIn의 profile을 Document Model로 표현해보자:

  • Relational Model로 표현했을 때는 profile 화면을 보여주기 위해 여러 table을 join해야 하지만, JSON으로 표현하면 한 번의 쿼리만 수행하면 된다

document-model

Graph Model

애플리케이션이 one-to-many 관계이거나 레코드 간 관계가 없다면 Document Model이 적합하지만, many-to-many 관계가 일반적이라면 정점간선으로 이루어진 그래프로 데이터를 모델링하는 것이 자연스럽다.
Graph Model은 다음과 같은 예시에서 적합하다:

  • 소셜 그래프: 정점은 사람이고, 간선은 사람들이 서로 알고 있음을 나타낸다
  • 웹 그래프: 정점은 웹 페이지고, 간선은 다른 페이지에 대한 HTML 링크를 나타낸다
  • 도로/철도 네트워크: 정점은 교차로이고 간선은 교차로 간 도로나 철도 선을 나타낸다

SNS의 Lucy와 Alain이란 사용자를 Graph Model로 표현해보자:

profile
온 몸으로 기억하기 위해 기록합니다. 🌱

0개의 댓글