SQL과 NoSQL의 차이

이정규·2021년 10월 28일
0

Computer Science

목록 보기
1/4

SQL이란

Structured Query Language의 약자로 말그대로 구조적인 쿼리 언어로 관계형 데이터베이스를 제어하는 언어이다.

관계형 데이터베이스 (RDBMS)

SQL을 통해 데이터를 제어한다.

특징

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

1. 정해진 데이터 스키마

각 Table에는 명확하게 정의된 Structure(스키마)가 존재한다.
그리고 데이터는 Table에 Record로 저장이 된다.
여기서, Structure(스키마)를 지키지 않는 Record는 절대절대 테이블에 들어갈 수 없다.

2. 관계

관계형 데이터베이스답게 관계가 중요하다.
관계란 테이블들을 서로 관계가 있는 테이블들을 연관지어 잇는 것이다.
만약 Product(쇼핑 상품들), Orders(주문한 상품들), Users(사용자)가 존재한다면, 각각의 테이블들은 관계를 지어서 생각해야 한다.

장점

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

단점

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

사용하는 시기

  • 관계를 맺고 있는 데이터가 자주 변경되는 경우에 사용한다.
  • 명확한 스키마가 사용자와 데이터에게 중요한 경우

NoSQL

SQL과 반대되는 접근방식이기 때문에 이름이 NoSQL이다. 말그대로 비관계형 데이터베이스이다.

특징

  • 스키마 없음
  • 관계 없음

특징도 SQL과 반대되는 특징이다.

1. 스키마가 없으면 어떤 형식으로?

이걸 알려면 NoSQL의 구조를 알아야 한다.
먼저 DB - Collections - Document형식으로 되어있다.

  • Collections : 우리가 RDBMS에서 알던 Table인데 Structure가 없는 Table
  • Document : RDBMS에서 Records
    Document는 JSON데이터와 비슷한 형식으로 구성되어있다.

    자, 여기 사진을 보면 Duplicate Data 라고 한다. 바로 "데이터 복제"이다.
    컬렉션인 Users의 정보가 변경되면 자동으로 Orders에도 변경된 정보로 반영이 된다.

실수로 Orders 컬렉션에서 User의 데이터를 수정한다면 자동으로 Users컬렉션에도 반영이 되는 원치않는 데이터가 될 수 있다.

장점

  • 스키마가 없기 때문에 유연하다.
  • 데이터는 필요로 하는 형식으로 저장이 된다. 그렇기에 데이터를 읽어오는 속도가 빨라진다.
  • 수직 및 수평적 확장에 용이하다.

단점

  • 유연성 때문에, 데이터 구조를 결정하기 힘들다.
  • 데이터 중복은 문서(레코드)가 변경된 경우 그와 관련된 문서를 갖고 있는 컬렉션을 찾아 하나하나 업데이트를 해줘야 한다.

사용하는 시기

  • 정확한 데이터 구조가 정해지지 않은 경우, 변경/확장이 될 수 있는 경우
  • 읽기는 자주 하지만, 변경이 잦지 않는 경우
  • 막대한 양의 트래픽을 다뤄야 하는 경우 => 수평적 확장에 용이하기에

수직적(Vertical) & 수평적(Horizontal) & 확장(Scaling)

NoSQL에서 확장이 쉽다고 했다. DB를 어떤식으로 확장을 시켜야 하는 걸까?

확장에는 수직적(Vertical) 확장수평적(horizontal) 확장이 있다.

  • 수직적 확장
    "Scale up방식으로 확장한다." 라고도 한다.말 그대로 DB서버의 성능을 확장 시키는 것입니다. DB서버에 CPU를 더 좋은 것으로 바꾸는 원초적인 방식이다.

    성능 확장에 한계가 존재하고, 성능 증가에 대한 비용 증가폭이 매우 크다.
    SQL, NoSQL 둘 다 가능한 방식입니다.

  • 수평적 확장
    "Scale out방식으로 확장한다." 라고도 한다.
    서버를 여러대 만들어서 확장하는 것이다.

    각 서버에 걸리는 부하를 균등하게 해주는 로드밸런싱이 필수적으로 동반된다.
    서버가 여러대가 있기 때문에 한 대가 장애로 다운되어도 다른 서버로 서비스 제공이 가능하다는 장점이 있다.
    SQL도 가능하지만, 매우 어렵고 비용이 많이 발생한다.
    하지만 NoSQL은 이러한 수평적 확장을 기반으로 만들어졌기 때문에 쉽게 확장이 가능하다.

참고
https://devuna.tistory.com/73
https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html

profile
강한 백엔드 개발자가 되기 위한 여정

0개의 댓글