본문 바로가기

데이터베이스

SQL vs NO SQL

SQL과 NO SQL

SQL과 NO SQL은 데이터베이스 세계을 양분하는 데이터 저장 방식으로, 저장방식의 차이에 따라 생성, 조회, 수정 등에서 각각 다른 특성과 장단점을 가진다.  이 두가지에 대해 간단히 알아보고 장단점에 대해 알아보도록 하겠다.

 

 

SQL

SQL은 'Structured Query Language(구조화된 쿼리 언어)' 의 약자로, 관계형 데이터베이스를 사용하는데 사용하는 쿼리 언어이다. 보통 관계형 데이터베이스라는 의미로도 사용한다. SQL에는 두가지 특징이 있다.

 

  • 데이터는 정해진 엄격한 데이터 스키마(=structure)를 따라 데이터베이스 테이블에 저장
  • 데이터는 관계를 통해서 연결된 여러개의 테이블에 분산 

 

엄격한 스키마

데이터는 테이블에 레코드로 저장되며 각 테이블에는 명확하게 정의된 구조가 있다. 구조란 필드의 이름과 데이터 유형으로 정의 된다. SQL에서 저장되는 데이터들은 이 엄격한 스키마에 맞게 저장되어야 하며, 조건에 맞지 않는 레코드는 테이블에 추가될 수 없다.

 

 

관계

SQL의 또다른 부분은 관계이다. 데이터들은 여러개의 테이블로 분할되어 데이터의 중복을 감소시킨다. 이렇게 분할된 테이블들은 각각 테이블의 스키마에 따라 책임지는 부분만 책임지기 때문에 부정확한 데이터를 다루게될 위험성을 줄인다. 여러 테이블의 분할된 데이터들의 연관관계가 필요할 때, 조인 구문을 활용하여 필요한 데이터만을 취할 수 있다.

 

 

NO SQL

NO SQL은 이름처럼 SQL이 아니다. 즉 관계형 데이터베이스가 아니므로 스키마, 관계의 특성이 없다. NO SQL에서는 데이터 레코드 들을 문서(Documents)라고 부른다. SQL에서는 정해진 스키마를 따르지 않으면 데이터를 추가할 수 없지만, No SQL에서는 다른 구조의 데이터를 같은 컬렉션(SQL에서의 테이블)에 저장할 수 있다. 

 

NO SQL에서 문서는 JSON과 비슷한 형태를 가지고 있다. 일반적으로 관련 데이터를 동일한 컬렉션에 넣는다. 이러한 형식은 SQL에서 테이블을 분리하여 여러 테이블에 나누어 저장하는 것과 상반된다. 따라서 여러 테이블/콜렉션에 조인할 필요없이 이미 필요한 모든 것을 만든 문서를 작성하게 된다. 실제로 NO SQL에는 조인이라는 개념이 존재하지 않는다. 대신 컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 정확하게 산출하도록 한다. 이러한 방식은 데이터가 중복되기 때문에 동기화 문제가 발생할 수 있지만, 그럼에도 불구하고 복잡하고 느려질수있는 조인을 사용할 필요가 없다는 점에서 큰 장점을 같는다. 특히 자주 변경되지 않는 데이터일때 더 큰 장점을 갖는다.

 

 

수직적 확장과 수평적 확장

데이터베이스의 성능을 높이기 위한 확장은 수직적 확장과 수평적 확장으로 나뉜다.

  • 수직적 확장: 단순하게 서버의 성능을 향상시키는 것으로 CPU나 메모리를 업그레이드 하는 등의 방식
  • 수평적 확장: 더 많은 서버가 추가되어 데이터베이스가 전체적으로 분산되는 방식 

 

데이터가 저장되는 방식 떄문에 SQL은 수직적 확장만을 지원하지만, NO SQL에서는 기본적으로 수평적 확장을 지원하기 때 둘다 가능하다.

 

SQL에서 수평적 확장을  위해서 샤딩이라는 기법이 필요한데 이는 DBMS레벨에서 데이터를 나누는 것이 아니라 데이터베이스 자체를 분할하는 방식이다.  

 

 

SQL vs NO SQL

SQL의 장점

데이터의 중복 없이 저장

엄격한 스키마를 통해 데이터의 무결성을 보장

 

SQL의 단점

JOIN의 성능 이슈

수평적 확장이 어려움

 

NOSQL의 장점

스키마가 없기 때문에 훨씬 더 유연

SQL에서 Join이 필요한 조회와 비교하면 속도가 빠름

수직 및 수평 확장이 가능

 

NOSQL의 단점

유연성이 보장되는 만큼 데이터의 무결성 저해

데이터의가 여러 컬렉션에 중복되어 있기 때문에, 수정해야할 경우 모든 컬렉션에서 수행해야함

클라우드 환경에서 비용이 많이 듬

 

 

결론

사용자와 데이터에게 명확한 스키마가 중요하고 데이터 베이스 구조가 변경될 여지가 적을 경우, 연관되는 데이터의 변경이 자주 일어나는 경우에는 SQL, 데이터의 구조가 자주 변경되고, 수정보다 읽기 작업이 많을 때, 막대한 양의 데이터를 다뤄야 할때 NoSQL을 사용한다.

 

 

 

 

 

 

참고:

https://siyoon210.tistory.com/130

 

SQL vs NoSQL (MySQL vs. MongoDB)

※이 포스팅은 academind의 SQL vs. NoSQL을 번역한 포스팅입니다. [개요] 웹 애플리케이션 개발을 위한 첫 걸음을 내딛은 이후에 한가지 선택사항을 마주하게 됩니다. MySQL와 같은 SQL을 사용할 것인가?

siyoon210.tistory.com

https://codingjuny.tistory.com/55

 

NOSQL vs SQL

🌟MongoDB를 사용한 이유 우리 프로젝트에서 NOSQL에 해당하는 MongoDB 를 사용했다. 실시간 통신이 많아서 빠른 Data 조회 속도가 필요했기 때문이다. 또한 MongoDB 는 위치기반의 데이터 관련 쿼리를

codingjuny.tistory.com

 

'데이터베이스' 카테고리의 다른 글

Transaction  (4) 2022.03.18
정규화와 반정규화  (0) 2022.03.18
SQL Injection  (0) 2022.03.17
SQL JOIN에 대해(작성 중)  (0) 2022.03.16
관계형 데이터베이스의 키(Key)  (0) 2022.03.12