1. SQL(관계형 DB)과 NoSQL(비관계형 DB)
SQL(Structured Query Language)
- RDBMS(관계형 데이터베이스 관리 시스템)의 데이터를 관리하기 위해 설계된 프로그래밍 언어
ex) MySQL, PostgreSQL 등
NoSQL(Not Only Structured Query Language)
- SQL보다 덜 제한적인 모델을 이용해 데이터의 저장 및 검색 메커니즘을 제공
ex) mongoDB, redis 등
2. 데이터 구조
[SQL]
핵심적인 특징 2가지
- 데이터는 정해진 데이터 스키마(데이터 저장 구조)에 따라 테이블에 저장된다.
- 데이터는 관계를 통해 여러 테이블에 분산된다.
따라서 스키마에 맞지 않는 형식의 데이터는 저장할 수 없다.
SQL을 이용한다면, 한 명의 고객만 email을 추가하거나
핸드폰 번호를 적지 않는 것은 불가능하다.
[NoSQL]
관계형 DB의 반대. 스키마도 없고, 관계도 없다.
NoSQL에서는 다른 구조의 데이터를 추가할 수 있다.
위와 같이 "John"의 문서(=documents = SQL의 레코드)에 email key값을 추가한다고해서, 다른 문서에 영향을 미치지 않는다. 여기서 SQL과 핵심적인 차이가 있는데, NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하며, 데이터의 구조가 같을 필요가 없다.
3. 관계
[SQL]
SQL은 데이터 사이의 관계를 지정하기 쉽다.

Orders 테이블을 보면, Customer ID와 Product ID를 통해 John이 연필을 12개 샀다는 것을 알 수 있다. 이처럼 SQL은 각 테이블 간의 관계 지정을 통해 테이블을 접근할 수 있고, 따라서 중복 없이 해당 데이터만을 다룰 수 있다.
[NoSQL]
반면 NoSQL에서는 보통 하나의 컬렉션(SQL에서의 테이블)에 관련 데이터를 모두 작성한다. John이 연필을 12개 샀을 때, Orders 컬렉션에는 주문 번호와 고객에 대한 정보, 상품에 대한 정보가 모두 들어가게 된다. 이때 SQL과 달리 id만을 저장하는 것이 아니라 고객 이름이나 전화번호 등 모든 정보를 저장하게 된다. 이렇게 해서 Customers와 Products를 보지 않고 Orders만으로 우리가 원하는 데이터를 모두 얻을 수 있도록 한다.

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

[SQL(vertical scale)]
SQL은 일반적으로 수직적 확장(vertical scale)만을 지원함. 수직적 확장은 하드웨어를 업그레이드하거나 추가하여 서버의 성능을 향상시키는 것을 말한다.
[NoSQL(horizontal scale)]
반면에 NoSQL에서는 수평적 확장(horizontal scale)이 가능하다. 서버를 추가하면서 데이터베이스를 분산시킬 수 있다.
5. SQL vs NoSQL 정리
SQL | NoSQL |
규격이 정해져 있다. | 정해진 규격이 없다. |
Table 구조 | Document 구조 |
Join이 가능하다 | Join의 개념이 없다. |
관계 형성하기에 적합 | 복잡한 관계에 적합하지 않음 |
수직적 확장 | 수직적/수평적 확장 |
트랜잭션을 사용한다 | 트랜잭션이 없다. |
분산처리가 어렵다 | 분산처리가 쉽다. |
출처: https://mjmjmj98.tistory.com/43 [Live passionate😎:티스토리]
출처: https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html
'코딩 > 기초 지식' 카테고리의 다른 글
OOP(객체 지향 프로그래밍) (0) | 2022.07.21 |
---|---|
객체와 인스턴스의 차이 (0) | 2022.07.21 |