개발자 면접 공부/네트워크&DB

SQL vs NoSQL

chogyujin 2022. 9. 5. 21:43
728x90

오늘은 SQL 과 NoSQL에 특징과 장,단점에 대해 공부하겠습니다.


SQL 과 NoSQL

SQL과 NoSQL은 보통 관계형이냐 아니냐에 따라 달라집니다.

SQL은 보통 관계형 데이터 베이스라고 합니다.

그럼 반대인 NoSQL은 비 관계형 데이터 베이스입니다.

각각에 특징을 살펴 보도록 하겠습니다.


SQL

SQL은 관계형 DB입니다. RDBMS(Relational DataBase Management System) 에서 데이터를 저장, 수정, 삭제 및 검색이 가능합니다.

 

RDBMS에는 핵심적인 특징이 있습니다.

  • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
  • 데이터는 관계를 통해 여러 테이블에 분산된다.

 

여기서 스키마란 DB의 명세표라고 생각하면 쉽습니다.

 

데이터는 테이블에 레코드로 저장되는데, 각 테이블마다 명확하게 정의된 구조가 있다. 해당 구조는 필드의 이름과 데이터 유형으로 정의된다.

 

따라서 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다. 즉, 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가가 가능한 것이 RDBMS의 특징 중 하나다.

 

또한, 데이터의 중복을 피하기 위해 관계를 이용한다.

출처 : https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html


NoSQL

비관계형 DB이고 관계형 DB에 반대다

스키마가 없으며, 관계 또한 없다.

 

NoSQL에서는 레코드를 문서라고 부른다.

 

여기서 SQL과 핵심적인 차이가 있는데, SQL은 정해진 스키마를 따르지 않으면 데이터 추가가 불가능했습니다.

하지만 NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가가 가능합니다.

 

문서는 Json과 비슷한 형태로 가지고 있는데 관계형 DB처럼 여러 테이블에 나누어 담지 않고, 관련 데이터를 동일한
'컬렉션'에 넣습니다.

 

따라서 위 사진에 SQL에서 진행한 Drders, Users, Products테이블로 나눈 것을 NoSQL에서는 Orders에 한꺼번에 포함해서 저장합니다.

 

그러므로 NoSQL은 Join이라는 개념이 없습니다.

 

그러면 조인하고 싶을 때NoSQL은 어떻게 할까?

 

컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 정확하게 산출

 

하지만 이러면 데이터가 중복되어 서로 영향을 줄 위험이 있습니다 따라서 조인을 잘 사용하지 않고 자주 변경되지 않는 데이터일 떄 NoSQL을 쓰면 상당히 효율적이다.

 


SQL vs NoSQL

 

  장점 단점
SQL 스키마가 있어 데이터 무결성 보장 덜 유연, 스키마를 사전에 계획해야함
관계는 각 데이터를 중복없이 저장 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리문
자주 데이터가 수정되고 조인을 잘쓰면 추천 수직적 확장(서버의 성능 향상)
NOSQL 스키마가 없어서 유연 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있음
데이터 읽어오는 속도 빠름 데이터 중복을 계속 업데이트 해야함
수직 및 수평 확장이 가능 애플리케이션이 발생하는 모든 읽기/쓰기 요청 처리 가능 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 함

그럼 언제 쓰는것이 제일 좋은가?

 

SQL

관계를 맺고 있으며 데이터가 자주 변경되는 애플리케이션일 경우 

변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우 

 

NoSQL

정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우

읽기를 자주 하지만, 데이터 변경은 자주 없는 경우

DB를 수평으로 확장해야 하는 경우(막대한 양의 데이터를 다뤄야 하는 경우),(더 많은 서버가 추가, DB가 전체적으로 분산됨)