hongcheol / CS-study

cs지식을 정리하는 공간
MIT License
237 stars 28 forks source link

SQL vs NoSQL #82

Open lksa4e opened 2 years ago

lksa4e commented 2 years ago

SQL vs NoSQL

[SQL (Structured Query Language) ]

SQL은 RDBMS (관계형 데이터베이스 관리 시스템)의 데이터를 관리하기 위해 설계된 프로그래밍 언어입니다. SQL의 예시로는 MySQL, PostgreSQL 등이 있습니다.

이 글에서는 SQL을 곧 RDBMS (관계형 데이터베이스) 로 사용함

[NoSQL (Not Only Structured Query Language) ]

NoSQL은 앞서 말한 SQL보다 덜 제한적인 모델을 이용해 데이터의 저장 및 검색 메커니즘을 제공합니다. NoSQL의 예시로는 mongoDB, redis 등이 있습니다.

데이터의 구조 (Structure)

[SQL]

image

출처 : https://siyoon210.tistory.com/130

SQL에서는 엄격한 스키마(데이터 저장 구조)를 원칙으로 하기 때문에 스키마를 준수하지 않는 형식의 데이터는 저장할 수 없습니다.

[NoSQL]

image

출처 : https://siyoon210.tistory.com/130

NoSQL에서는 정해진 스키마가 없습니다. SQL에서는 정해진 스키마를 따르지 않는다면 데이터를 추가할 수 없었지만, NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가할 수 있습니다.

NoSQL에서는 레코드를 document, 테이블을 Collection이라고 부릅니다.

데이터의 관계 (Relationship)

[ SQL ]

image

출처 : https://mjmjmj98.tistory.com/43

데이터들을 여러개의 테이블에 나누어서, 데이터들의 중복을 피할 수 있습니다.

만약 사용자가 구입한 상품들을 나타내기 위해서는, Customers(사용자), Products(상품), Orders(주문한 상품) 여러 테이블을 만들어야 하지만, 각각의 테이블들은 다른 테이블에 저장되지 않은 데이터를 가지고 있습니다. (중복된 데이터가 없습니다.)

이런 명확한 구조는 장점이 있습니다. 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에, 다른 테이블에서 부정확한 데이터를 다룰 위험이 없습니다.

[ NoSQL ]

image

출처 : https://mjmjmj98.tistory.com/43

반면 NoSQL에서는 보통 하나의 컬렉션(SQL에서의 테이블)에 관련 데이터를 모두 작성합니다.

일반적으로 관련 데이터를 동일한 컬렉션에 넣습니다. (RDBMS처럼 여러 테이블에 나누어 담지 않습니다.) 많은 Order(주문한 상품)이 있는 경우, 일반적인 정보를 모두 포함한 데이터를 Orders 컬렉션에 저장합니다. (즉, 관계형데이터 베이스에서 사용했던 Users나 Products 정보 또한 Orders에 포함해서 한꺼번에 저장됩니다.)

따라서 여러 테이블 / 컬렉션에 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성하게 됩니다. (실제로 NoSQL DB에는 조인이라는 개념이 존재하지 않습니다.) 대신 컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 정확하게 산출하도록 합니다.

이런 방식은 SQL과 다르게 중복된 데이터가 생기게 됩니다. 그래서 데이터를 업데이트 할 때마다 주의해야 합니다. (예를 들어 Customer에 John의 email을 추가했는데, Orders에는 이를 업데이트하지 않으면 문제가 발생합니다.)

데이터의 확장성 (Scalability)

두 종류의 데이터베이스를 비교할 때 살펴 봐야할 또 하나의 중요한 개념은 확장(Scaling) 입니다. (데이터베이스 서버의 확장성)

확장은 수직적(vertical) 확장수평적(horizontal) 확장으로 구별할 수 있습니다.

[ SQL(vertical scale)]

데이터가 저장되는 방식 때문에 SQL은 일반적으로 수직적 확장만을 지원합니다.

[NoSQL(horizontal scale)]

반면에 NoSQL에서는 수평적 확장이 가능합니다.

SQL vs NoSQL 장단점

[SQL]

장점

단점

[NoSQL]

장점

단점

SQL vs NoSQL의 선택

SQL과 NoSQL을 적당하게 선택하기 위해서는 어떤 데이터를 다루는지, 어떤 어플리케이션에 사용되는지를 고려해야 합니다.

[SQL]

[NoSQL]

lksa4e commented 2 years ago

[면접대비 토막상식 - 자주 쓰이는 NoSQL] Redis • key-value 형식으로 데이터를 저장한다 • 인메모리 DB로 데이터를 메모리에 저장하고 관리하기 때문에 성능이 좋지만, 데이터를 유한하게 저장하기 때문에 캐쉬 등과 같이 데이터의 저장기한이 있고, 빠른 성능이 필요한 경우에 사용 (DB라기보다는 캐쉬의 역할!)

MongoDB • document 형식으로 데이터를 저장한다. • mysql처럼 서버-클라이언트 방식으로 설치해서 사용한다. 하지만 MySQL과 같은 SQL 방식이 아니므로, 가변적 데이터 구조를 다루는데 유용하다.