SQL vs NoSQL

조영래·2022년 11월 5일
0
post-thumbnail

SQL

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

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

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

특징

  • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장한다.
  • 데이터는 관계를 통해 여러 테이블에 분산된다.
  1. 정해진 데이터 스키마 :
    각 테이블에는 명확하게 정의된 Structure(스키마)가 존재
    데이터는 Table Record로 저장

  2. 관계 :
    관계형 데이터베이스는 관계가 중요.
    관계란 테이블들을 서로 관계가 있는 테이블들을 연관지어 잇는 것이다.
    ex) 상품 - 주문한 상품들 - 사용자 (관계) 지어서 생각

장점

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

단점

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

NoSQL

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

특징

  • 스키마 없음
  • 관계 없음
  1. 구조 DB - Collections - Document 형식
    Collections : 우리가 RDBMS에서 알던 Table로 Structure가 없는 Table
    Document : RDBMS에서 Records
    Document는 JSON데이터와 비슷한 형식으로 구성

장점

  • 스키마가 없어서 유연하다
  • 데이터는 필요로 하는 형식으로 저장됨, -> 데이터를 읽어오는 속도가 빨라짐
  • 수직 및 수평적 확장에 용이하다

단점

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

사용하기 시기

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

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

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

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

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

    성능 확장에 한계가 존재하고, 성능 증가에 대한 비용 증가폭이 매우 크다.
    SQL, NoSQL 둘 다 가능한 방식입니다.
  • 수평적 확장
    "Scale out방식으로 확장한다." 라고도 한다.
    서버를 여러대 만들어서 확장하는 것이다.

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

참조

profile
난될놈이야

0개의 댓글