SQL은 구조화 된 쿼리언어(Structured Query Language)로 관계형 데이터베이스(RDBMS)에서의 데이터 처리를 목적으로 만들어진 프로그래밍 언어를 의미한다.
SQL을 사용하는 관계형 데이터베이스는 두가지 특징을 가지고 있는데
첫번째는 정해진 구조에 따라 테이블에 데이터가 저장된다는 것이고,
두번째는 데이터는 기본키를 통해 여러 테이블과 연결되어 분산된다는 것이다.
데이터는 테이블에 레코드 형식으로 저장되며, 각 테이블은 정해진 구조가 있기 때문에 해당 구조를 따르지 않으면 레코드를 추가할 수 없다. 또한 테이블 별로 데이터가 나눠져 저장되기 때문에 데이터들의 중복이 없고, 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어진다.
NoSQL은 관계형 데이터베이스 이외의 형식으로 데이터를 저장하는 데이터베이스를 의미한다. 따라서 NoSQL에는 스키마도 없고 관계도 없다.
정해진 구조가 없기 때문에 관계형 데이터베이스와는 다르게 정해진 구조 없이 데이터를 저장할 수 있다.
NoSQL에서는 레코드를 문서(documents)라고 말하는데 문서는 JSON과 비슷한 형태를 가지고 있기 때문에 구조를 신경 쓸 필요가 없고, 관계형 데이터베이스에서 각각의 테이블에 나눠서 저장했던 데이터를 하나의 테이블에 저장하기 때문에 join같은 연산이 필요하지 않게 된다.
SQL 장점
- 테이블의 구조가 명확하게 정의되어 데이터의 무결성을 보장한다.
- 관계에 따라 데이터가 분산되기 때문에 데이터의 중복이 없다.
SQL 단점
- 테이블의 구조가 정해져있기 때문에 나중에 구조 수정이 번거롭거나 불가능하다.
- 데이터가 분산되어있기 때문에 조회 테이블에 따라 많은 join을 요구하게되고, 이는 성능 저하로 이어질 수 있다.
- RDBMS의 경우 수직 확장(Scale-up)만이 가능하며 수직 확장은 성능 확장의 한계가 있고, 성능 증가에 대한 비용이 크다.
NoSQL 장점
- 정해진 테이블 구조가 없기 때문에 유연하고, 데이터 형식이 변경되어도 데이터를 저장하는데 문제가 없다.
- 데이터를 원하는 형식으로 저장하기 때문에 join을 사용하지 않고, 데이터를 조회하는 속도가 향상된다.
- 수평 확장(Scale-out)이 가능하며 확장의 한계가 없고, 가격이 비교적 저렴하며, 읽기/쓰기가 여러대의 서버에 분산 처리되기 때문에 부하가 줄어든다.
NoSQL 단점
- 데이터가 중복되어 저장되기 때문에 데이터를 업데이트하게 되면 모든 컬렉션에서 데이터를 수정해야한다.
- 데이터 구조가 정해져 있지 않기 때문에 데이터의 일관성이 없다.
SQL과 NoSQL 모두 각각의 다른 특징을 가지고 있기 때문에 어떠한 구조가 좋다고는 말할 수 없지만