January 05, 2020
SQL(관계형 데이터베이스) 과 NoSQL에 대해 알아보겠습니다.
관계형 데이터베이스는 데이터 항목 간에 사전 정의된 관계가 있을 때 그러한 데이터 항목들의 모음을 가리킵니다. 이들 항목은 열과 행으로 이루어진 테이블 집합으로 구성됩니다. 테이블은 데이터베이스에 표시할 해당 객체들에 관한 정보를 수록하는 데 사용됩니다.
테이블의 각 열은 특정 종류의 데이터를 수록하며 필드는 속성의 실제 값을 저장합니다. 테이블의 행은 한 객체 또는 엔터티와 관련된 값들의 모음을 나타냅니다. 테이블의 각 행은 기본 키라고 부르는 고유 식별자로 표시할 수 있고 여러 테이블에 있는 행들은 외래 키를 사용하여 상호 연결될 수 있습니다.
NoSQL은 위에 설명한 관계형 데이터베이스에 반하는 비관계형 데이터베이스 입니다. Not Only SQL의 줄임말로 SQL을 개선하고 보안한다는 의미로 이해하면 될것같습니다.
정보화가 가속화됨에 따라 이전에는 별로 신경쓰지 않았던 부분들까지 데이터화 하여 저장하는 일들이 많아지게 되었습니다.(SNS, Game, IoT 등) 이는 이전까지 사용했던 관계형 데이터베이스만으로는 해결할 수 없는 상황들을 발생시켰고 한계를 극복하기 위해 NoSQL이라는 데이터 저장 기술이 나오게 되었습니다.
NoSQL은 데이터들이 서로 관계가 없습니다. 이는 기존의 관계형 데이터베이스보다 더 유연하고 융통성 있는 메커니즘을 제공합니다.
NoSQL의 DB의 종류는 크게 4가지 유형이 있습니다.
출처 : https://en.wikipedia.org/wiki/Key-value_database
Key와 Value의 쌍으로 데이터가 저장되는 기본적인 저장방식 입니다. 구조가 단순하기 때문에 속도가 빠르고 분산 저장시에 용이합니다. 읽기 중심의 애플리케이션(SNS, Q&A포털)에 최적화되어 있습니다. Rial, Vodemort, Tokyo등의 제품이 있습니다.
출처: https://database.guide/what-is-a-column-store-database/
컬럼 형식 데이터베이스는 데이터의 행이 아니라 데이터의 컬럼을 읽고 쓰는데 최적화된 데이터베이스 입니다. 그림을 보면 사용자의 이름(key)에 해당하는 값의 스키마들이 각각 다른것을 알 수 있습니다. 이는 디스크의 I/O 요구사항과 디스크에서 로드해야 하는 데이터의 양을 줄여주므로, 데이터의 압축, 분산처리, 확장성, 데이터베이스 분석 성능에 중요한 요소입니다. HBase, “Cassandra, Hypertable이 이에 해당됩니다.
출처: https://inyl.github.io/programming/2017/05/09/database.html
JSON, XML과 같은 반정형 데이터 모델 구조를 채택하고 있습니다. 비관계형 문서별로 다른 스키마를 적용할 수 있도록 좀 더 유연하게 스키마를 적용할 수 있습니다. 트리형 구조로 레코드를 저장하거나 검색하는데 효과적입니다. MongoDB, CoughDB가 이 종류에 해당됩니다.
출처 : https://database.guide/what-is-a-graph-database/
데이터를 노드로 포현하며 노드 사이의 관계를 엣지로 표현합니다. 관계형 데이터베이스 보다 유연하며 유지보수에 용이합니다. Nodes, Relationship, Key-Value 데이터 모델을 채용하고 있습니다.
출처 : https://medium.com/hackernoon/sql-vs-nosql-what-is-better-for-you-cc9b73ab1215
사실 SQL과 NoSQL의 사용 경우에 대한 정답은 없습니다. 개인이 더 중요시하는 DB의 장점이 무엇인지에 따라 선택이 달라질 수 있습니다. 각각의 차이점을 잘 이해하고 나의 애플리케이션 개발에 좀더 편리한 DB형태가 무엇인지 잘 판단하여 사용하시기 바랍니다.