코규리

 

유투버 노마드코어의 SQL, NoSQL 차이 설명

Q. SQL, NoSQL이 각각 뭐야?

SQL만 알면 NoSQL도 알 수 있습니다. NoSQL의 전체명칭은 Not only SQL, 즉 모든 SQL뿐만이 아닌 DB를 뜻하기 때문입니다. (DataBase는 데이터의 저장공간입니다.)

SQL(Structure Guery Language)은 다음과 같이 설명할 수 있습니다. 데이터베이스(DB)를 어떠한 관계적인 측면을 통하여 관리하고 정리하는 컴퓨터 언어입니다. 프로그래밍 언어는 아니죠.

개발자의 관점에서 데이터가 필요한 경우는 보통 일정한 틀이 있습니다. 무작위의 내용이 아니라 사용자의 이름, 비밀번호 등 필요한 정보에 대한 카테고리가 정해져있다는 뜻입니다. 이러한 기준들이 앞서말한 '관계'중 일종이며, 이러한 관계성을 이용해 관리해주는 것이 SQL입니다. 따라서 해당 SQL명령어를 통해 개발자가 DB를 관리할 수 있습니다.

예를 들어, excel의 Seet(행열구조)에서 개발자가 사용자의 데이터를 행, 열로 구분지어 데이터 하나하나 넣는 것이 아니라 SQL이란 명령어를 통해 table(행열구조)위에 자동적으로 누구(행)의 이름-비밀번호-주소(열) 의 데이터인지 입력되도록 하는 겁니다.

 

이런 SQL명령어는 따로 배우고 사용하기도 하고, ORM이라는 것을 통해 자동적으로 SQL코드를 얻어오기도 합니다.

 

 

 

Q. 그럼  NoSQL이 SQL은 아닌 거야?

NoSQL은 사실 Non-relational Opratioinal Database SQL 혹은 Not Only SQl, 두 가지로 해석됩니다.

일반적으로는 Not Only SQL이라고 설명하니 이 방향대로라면 기존의 특성 + 부가적인 특성을 지원하는 언어라고 보는 게 옳다고 봅니다.

이 NoSQL은 일반적인 프로젝트가 아니라 어떤 특별한 상황에 맞춤된 특화적인 언어입니다. 따라서 너무! 많은 데이터 혹은 굉장히! 빠른 처리가 필요하면 이 NoSQL을 사용하게 됩니다.

 

 

 

Q. 각각 어떤 예시가 있을까?

형태에 대한 설명을 하자면 SQL은 행-열 구조의 table을 가집니다. 반대로 NoSQL은 이런 행-열구조에 얽매이지 않습니다. 그 예로 키-값/문서/컬럼/그래프 형태 (더 있습니다. 많아요)가 있습니다.

(1) 키-값 (Oracle-NoSQl, Amazon-Dynamo 등)

Key-Value형태로 java언어의 map, python의 dictionary를 떠올릴 수 있습니다. 정수형, 실수형, 문자열, 배열 등의 값들을 키 별로 저장하는 형태이고 키값의 특성상 빠른 속도를 자랑합니다. 단순화된 구조이기 때문에 가능한 것입니다.

 

(2) 문서지향 (MongoDB 등)

(1)에서 말한 여러 개의 키값 을 하나의 문서로 저장합니다. json, XML, YAML등의 문서형식을 사용하게 됩니다.

 

(3) 컬럼지향 (Google-Bigtable, Amazon-Redshift 등)

SQL가 행(row)을 이용하는 데이터 관리였다면 이번에는 열(Column)을 이용하는 데이터 관리입니다. 

 

(4) 그래프(Facebook-Tao)

대표적인 예로 페이스북이 있었습니다. 행이나 열을 통한 구분이 필요없고 그저 각 노드의 관계성만을 요구할 때 사용합니다. 이것이 바로 소셜 네트워크인 것입니다.

 

 

기존의 SQL의 예로는Oragle-Database, DB2, SQL-Server, PostgreSQL, MySQL, SQLite 등이 존재합니다.