Skip to content

Latest commit

 

History

History
99 lines (58 loc) · 6.1 KB

NoSQL vs SQL.md

File metadata and controls

99 lines (58 loc) · 6.1 KB

NoSQL vs SQL

0. 개요


SQL과 NoSQL은 무엇이며, SQL과 NoSQL의 정확한 차이점과 각각의 장단점을 알아보고 언제 사용하는지를 알아보려한다.

1. SQL 이란?


SQL은 '구조화 된 쿼리 언어 (Structured Query Language)'의 약자입니다.

SQL을 사용하면 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 저장, 수정, 삭제 및 검색 할 수 있습니다.

https://t1.daumcdn.net/cfile/tistory/99BF063C5C937DF324

엄격한 스키마

데이터는 정해진 데이터 스키마 (=structure)를 따라 데이터베이스 테이블에 저장됩니다.

데이터는 테이블(table)에 레코드(record)로 저장되며, 각 테이블에는 명확하게 정의된 구조(structure)가 있습니다. (구조란 어떤 데이터가 테이블에 들어가고 어떤 데이터가 그렇지 않을지를 정의하는 필드(field) 집합을 가르킵니다.)

구조(structure)는 필드의 이름과 데이터 유형으로 정의됩니다.

📝 **(관계형 데이터베이스에서)** 스키마를 준수하지 않는 레코드는 추가할 수 없습니다.

관계

SQL 기반의 데이터 베이스의 또 다른 중요한 부분은 관계입니다. 데이터들을 여러개의 테이블에 나누어서, 데이터들의 중복을 피할 수 있습니다. 만약 사용자가 구입한 상품들을 나타내기 위해서는, Users(사용자), Products(상품), Orders(주문한 상품) 여러 테이블을 만들어야 하지만, 각각의 테이블들은 다른 테이블에 저장되지 않은 데이터 만을 가지고 있습니다. (중복된 데이터가 없습니다.)

https://t1.daumcdn.net/cfile/tistory/994D09355C937ECD2D

📝 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에, 다른 테이블에서 부정확한 데이터를 다룰 위험이 없습니다.

2. NoSQL 이란?

NoSQL은 기본적으로 SQL(관계형 데이터베이스)와 반대되는 접근방식을 따르기 때문에 지어진 이름입니다.

  • 스키마 없음
  • 관계 없음

NoSQL세상에서는 레코드를 문서(documents)라고 부릅니다. 이것은 단순히 이름만 다른 것이 아니라, 핵심적인 차이점 이있습니다. SQL 세상에서는 정해진 스키마를 따르지 않는다면 데이터를 추가 할 수 없지만, NoSQL에서는 다른 구조의 데이터를 같은 컬렉션(= SQL에서의 테이블)에 추가할 수 있습니다.

https://t1.daumcdn.net/cfile/tistory/99FBC9415C937F2A20

3. SQL , NoSQL 의 장단점

SQL의 장점

  • 명확하게 정의 된 스키마, 데이터 무결성 보장
  • 관계는 각 데이터를 중복없이 한번만 저장됩니다.

NoSQL의 장점

  • 스키마가 없기때문에, 훨씬 더 유연합니다. 즉, 언제든지 저장된 데이터를 조정하고 새로운 "필드"를 추가 할 수 있습니다.
  • 데이터는 애플리케이션이 필요로 하는 형식으로 저장됩니다. 이렇게 하면 데이터를 읽어오는 속도가 빨라집니다.
  • 수직 및 수평 확장이 가능하므로 데이터베이스가 애플리케이션에서 발생시키는 모든 읽기 / 쓰기 요청을 처리 할 수 있습니다.

SQL의 단점

  • 상대적으로 덜 유연합니다. 데이터 스키마는 사전에 계획되고 알려져야 합니다. (나중에 수정하기가 번거롭거나 불가능 할 수 도 있습니다.)
  • 관계를 맺고 있기 때문에, JOIN문이 많은 매우 복잡한 쿼리가 만들어 질 수 있습니다.
  • 수평적 확장이 어렵고, 대체로 수직적 확장만 가능합니다. 즉 어떤 시점에서 (처리 할 수 있는 처리량과 관련하여) 성장 한계에 직면하게 됩니다.

NoSQL의 단점

  • 유연성 때문에, 데이터 구조 결정을 하지 못하고 미루게 될 수 있습니다.
  • 데이터 중복은 여러 컬렉션과 문서가 (SQL 세계에서 처럼 하나의 테이블에 하나의 레코드가 아니라) 여러 개의 레코드가 변경된 경우 업데이트를 해야 합니다.
  • 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정(update)를 해야 하는 경우 모든 컬렉션에서 수행해야 함을 의미합니다. (SQL 세계에서는 중복된 데이터가 없기 때문에 한번만 수행하면 됩니다.)

SQL은 언제 사용하는 것이 좋을까요?

  • 관계를 맺고 있는 데이터가 자주 변경(수정)되는 애플리케이션일 경우 (NoSQL에서라면 여러 컬렉션을 모두 수정해줘야만 합니다.)
  • 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우

NoSQL은 언제 사용하는 것이 좋을까요?

  • 정확한 데이터 구조를 알 수 없거나 변경 / 확장 될 수 있는 경우
  • 읽기(read)처리를 자주하지만, 데이터를 자주 변경(update)하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 업데이트 할 필요가 없는 경우)
  • 데이터베이스를 수평으로 확장해야 하는 경우 ( 즉, 막대한 양의 데이터를 다뤄야 하는 경우)
  • 분명한 것은 데이터베이스는 다른 방식으로 설계 될 수 있다는 겁니다. NoSQL 데이터베이스를 쓰더라도 설계적으로 언급된 단점들을 완화시킬 수 있습니다. (예를들면 중복된 데이터를 줄이는 방법). SQL 데이터베이스도 마찬가지입니다. 요구사항을 만족시키고, 복잡한 JOIN문을 만들지 않도록 설계할 수 있습니다.

출처:

https://siyoon210.tistory.com/130

https://velog.io/@thms200/SQL-vs-NoSQL

https://ko.myservername.com/sql-vs-nosql-exact-differences#SQL_vs_NoSQL_Security