SQL와 NoSQL

2020. 5. 3. 20:11데이터베이스

데이터베이스의 두 가지 타입으로 나누면 SQL과 NoSQL으로 구분할 수 있다.

그에 대한 설명을 서로의 차이를 통해 간단히 해보려고한다.

 

 

NoSQL 이니셔티브의 최초의 시각적 표현

SQL?

Structured Query Language(구조적 질의어)의 약자로 DB에서 자료를 처리하는 용도로 쓰인다. 보통 우리가 일반 DB나 관계형 DB를 말하면 SQL을 의미하는 경우가 많다. 대표적으로 MariaDB, MySQL등이 존재한다.

 

NoSQL?

Not only SQL로, SQL만을 사용하지 않는 데이터베이스 관리 시스템(DBMS)를 말한다. 관계형 데이터베이스를 사용하지 않는다는 의미가 아닌, 여러 유형의 데이터베이스를 사용하는 것이다. 대표적으로 mongoDB, Firebase의 datastore등이존재한다.

 

눈치가 빠르면 위 내용만으로 어느정도 감이올지도 모른다. SQL과 NoSQL은 사실 관계형, 비관계형 데이터베이스로 구분한것이라고 봐도 될 것이다. 물론 NoSQL이 관계형 DB를 사용하지 않는다는 건 아니지만 관계형이 아닌 DB를 사용하여 관계형 DB의 단점을 보완하기 위해 등장한 방식이 NoSQL이다. 

 

 

 

그렇다면 어떤 차이가 존재하는가??

 

1. 스키마와 데이터간의 관계의 유무

 

가장 직관적인 차이이다. SQL은 우리가 알다시피 정해진 데이터 스키마에 있는 테이블에 데이터를 저장한다. 또 서로 다른 테이블은 'join'하여 데이터 간의 관계를 만들어 관리하여 업데이트(수정)이 용이하다. 이 두가지 특징은 관계형 데이터베이스의 특징이라고 볼 수 있다. 하지만 이러한 관계의 양에 따라서는 너무 복잡한 쿼리가 만들어 질수 있다.

 

반면 NoSQL은 스키마나, 데이터간의 관계를 만들어주는 'join'의 개념이 존재하지 않는다. 관계가 없기 때문에 데이터가 중복되고 업데이트 과정에 상대적으로 안전하지 못하다. 하지만 복잡하게 'join'을 하면서 관계를 만들어줄 필요 없다는 장점도 있다.

 

 

2. 수직적 확장과 수평적 확장

 

SQL 데이터베이스는 보통 수직적 확장을 지원한다. 서버를 추가하는 것이 아닌 사용하는 서버의 성능을 향상시키는 확장만 가능하다는 의미이다. 즉 현재 데이터베이스를 사용하는 하드웨어의 성능이 중요시 되고 그에 따른 비용도 매우 높을수 밖에 없다. 

 

하지만 NoSQL은 여러대의 컴퓨터에 데이터에 분산저장하는 수평적 확장을 지원하기 때문에 값싼 장비 여러개로 대량의 데이터 처리가 가능하다.

 

 

 

 

그렇다면 우리는 어떤 데이터베이스를 사용하면 되는가?

사실 기업의 규모가 아닌 이상 어떤 DB 타입을 사용해도 상관없으나 프로젝트의 상황에 맞는 데이터베이스를 고려해서 사용하는 것이 아마 최선의 답일 것이다. (둘 다 사용해보자)

 

간단하게 

데이터의 업데이트가 잦고 데이터의 관계를 유지하는 구조적인 로직을 원한다면 관계형 DB SQL

데이터의 수정이 낮고 막대한 데이터를 다루며 비용에 부담이 있다면 비관계형 DB NoSQL을 사용한다고 생각하자

 

 

 

 

 

 

참고: 위키백과, 우리 모두의 백과사전

siyoon210 블로그 https://siyoon210.tistory.com/130