All Articles

SQL vs NoSQL

사실 SQL(Structured Query Language)은 데이터베이스 자체를 나타내는 것이 아니라, 단지 쿼리언어이다. 그러나 관용적으로 관계형 데이터베이스를 의미하기도 하며, 여기서도 이를 기준으로 다뤄보도록 한다.

SQL

SQL을 사용해 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 저장/수정/삭제 및 조회할 수 있다. 관계형 데이터베이스에는 두 가지 특징이 있다.

  1. 엄격한 스키마 : 스키마를 준수하지 않는 레코드는 추가할 수 없음
  2. 관계 : 여러 개의 테이블에 데이터를 나누어 담아, 데이터들의 중복을 피할 수 있음

장점

  • 스키마가 명확하고 데이터 무결성이 보장된다.
  • 각 데이터를 중복없이 한 번만 저장된다.

단점

  • 상대적으로 덜 유연하다. 데이터 스키마는 사전에 계획되고 알려져야 하며, 나중에 수정하기가 번거롭거나 불가능 할 수도 있다.
  • 관계를 맺고 있기 때문에, join문이 많은 매우 복잡한 쿼리가 만들어질 수 있다.
  • 수평적 확장이 어렵고, 대체로 수직적 확장만 가능하다.

NoSQL

No의 의미보다는 Not only의 의미라는 주장이 더 강하다. 즉, SQL계열 쿼리 언어를 사용하는 게 불가한 것은 아니다. 하지만 이 글에서는 SQL과의 비교/대조 관점에서 다뤄본다. SQL과 다르게, 이러한 특징이 있다.

  1. 스키마 없음 : 다른 구조의 데이터를 같은 컬렉션(= SQL로 치면 테이블)에 추가할 수 있음. 스키마를 신경쓸 필요 없으며 join이라는 개념이 존재하지 않음.
  2. 관계 없음 : 특정 데이터를 같이 사용하는 모든 컬렉션에서, 똑같은 데이터 업데이트가 수행되어야 함

NoSQL 계열에서는 레코드를 문서(documents)라고 부르며, JSON 데이터와 비슷한 형태를 띠고 있다.

// MongoDB Document의 예시
{
  "_id": ObjectId("1254910hh9s01437764230"),
  "username": "phenomenon",
  "name": { first: "Hyunsang", last: "Han" }
}

장점

  • 스키마가 없으므로 더 유연하다. 즉, 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가 할 수 있다. 이에 따라 데이터를 애플리케이션이 필요로 하는 형식으로 저장함으로써 데이터를 읽어오는 속도가 빨라지게 할 수 있다.
  • 수직 및 수평 확장이 가능하다.

단점

  • 유연성 때문에, 데이터 구조가 명확하지 않을 수 있다.
  • 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정(Update)을 해야 하는 경우 모든 컬렉션에서 해줘야 한다.

[참고자료]
https://siyoon210.tistory.com/130