SQL vs NoSQL

김가을·2024년 8월 4일

MySQL과 같은 SQL을 사용할까? 아니면 MongoDB와 같은 NoSQL을 사용할까?


데이터베이스는 크게 관계형 데이터베이스(SQL 기반) vs 비관계형 데이터베이스(NoSQL 기반)로 구분한다.

SQL과 NoSQL은 만들어진 방식, 저장하는 정보의 종류, 저장하는 방법 등에 차이가 있음


먼저 기초 개념들부터 짚고 넘어가자.

DB(Data Base)

  • 여러 사람이 공유해서 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합
  • 데이터 저장소

DBMS(Data Base Management System)

  • 데이터베이스를 운영하고 관리하는 소프트웨어

  • 다수의 사용자들이 데이터베이스 내의 데이터를 접근 할 수 있도록 해주는 소프트웨어 도구의 집합

    → 사용자가 DB한테 직접 요청을 보내는 것이 아닌 DBMS에게 요청을 보내 해당 DBMS가 DB에게 사용자 요청을 전달하고 전달받은 데이터를 사용자에게 넘겨줌

    💥 사용자는 Query Language를 통해 DBMS에게 요청을 보냄

RDBMS (Relatioal DBMS)

  • 관계형 DBMS
  • 데이터베이스는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 (column)과 (row)으로 이루어짐

  • 정해진 스키마에 따라 테이블이 구성됨
    • 스키마(Schema) - DB에서 사용되는 전체 데이터 구조를 정의하는 개체 → 사용자는 스키마를 통해 구성 요소간 제약 조건을 지정할 수 있음
      제약조건
      NOT NULL - 해당 속성의 값에 null이 들어갈 수 없음
      UNIQUE - 해당 속성값들이 모두 중복되지 않음
      PRIMARY KEY - 기본 키, 값이 중복될 수 없음
      FOREIGN KEY - 두 테이블 사이의 관계를 연결해줌
  • 테이블끼리 관계를 가짐
    • 데이터의 중복을 피하기 위해 이용함
    • 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰위험이 없음
    • 1:1 (일대일) 1:N (일대다) N:M (다대다)

SQL(Structured Qeury Language)

RDBMS에서 사용되는 언어

  • 사용자는 SQL을 통해서 RDBMS에게 요청을 보내고, RDBMS는 사용자의 요청을 통해 DB에서 데이터를 꺼내서 사용자에게 테이블 형식으로 데이터를 보내줌

결론

  • 스키마가 뚜렷해 테이블 간의 관계를 직관적으로 파악할 수 있음
  • SQL을 사용하면 RDBMS에서 데이터를 저장, 수정, 삭제 및 검색을 할 수 있음
  • MySQL, Oracle, SQLite, PostgreSQL, MariaDB

NoSQL(Not only SQL)

  • No 스키마, No 관계

    • 스카마가 없는 건 아님 RDBMS는 데이터를 입력할 때 스키마에 맞게 입력해야 하는 반면 NoSQLd은 데이터를 읽어올 때 스키마에 따라 데이터를 읽어올 수 있음(schema on read)
  • 데이터가 고정되어 있지 않은 데이터베이스

    → 데이터의 구조가 같을 필요가 없음( 다른 문서에는 영향을 미치지 않음)

  • 등장배경

    2009년에 페북, 트위터, 구글 애널리틱스 등 사용자가 급격히 증가 → 데이터도 폭발적으로 증가함 ㄷㄷ

    → 서버 확장이 불가피해졌음…..

    [서버 확장 종류]

    • 수직적 확장

      • 서버의 사양을 높여 한 대의 서버에 조금 더 많은 데이터를 담음
    • 수평적 확장
      - 서버의 대수를 늘려 데이터를 여러 서버에 분산 시켜서 저장

      RDBMS 확장의 한계

    • 수직적 확장 - 가격이 비쌈, 사양을 무한하게 높일 수 없음

    • 수평적 확장 - 처음에 만들어질 때 단일서버에서 돌아갈 거라는 가정을 가지고 만들어진 데이터 베이스 시스템이기 때문에 기술적으로 어렵고 한계도 존재함


    !! RDBMS의 수평적 확장 한계를 극복하기 위해 NoSQL 데이터베이스 등장 !!

[특징]

  • 유연한 데이터 모델

    • RDBMS와 달리 고정된 스키마 xxx

    • 데이터를 유연하게 추가, 삭제, 수정 ㅇㅇㅇ

      → 비용이 적게 든다

  • 저렴한 비용

    • NoSQL 데이터베이스는 오픈소스 제품들이 많아 비교적 저렴하고 무료로 사용할 수 있는 제품도 많음
    • 데이터 가용성을 보장하기 위해 노드를 추가할 수 있어 하드웨어 비용도 상대적으로 낮음

SQL vs NoSQL

데이터 저장(Storage)

SQL

- SQL 언어를 이용해서 데이터를 테이블에 저장
- 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이털르 저장해야함

NoSQL

- key-value, document, wide-column, graph 등의 방식으로 데이터를 저장

**스키마(Schema)**

SQL

- 고정된 형식의 스키마가 필요. 즉 처리하려는 데이터 속성별로 열(column)에 대한 정보를 미리 정해야 함
- 스키마는 나중에 변경할 수 있지만 데이터베이스 전체를 수정하거나 오프라인으로 전환해야 할 수도 있음

NoSQL

- 동적으로 스키마의 형태를 관리할 수 있음
- 행을 추가할 때 즉시 새로운 열을 추가할 수 있고 개별 속성에 대해 모든 열에 대한 데이터를 반드시 입력하지 않아도 됨

**쿼리(Query)**

SQL

- 테이블의 형식과 테이블 간의 관계에 맞춰 데이터를 요청해야 함
    - SQl 언어와 같이 구조화 된 쿼리 언어를 사용하는 이유이기도 함
    

NoSQL

- 데이터 그룹 자체를 조회하는 것에 초점을 둠
    - 구조화 되지 않은 쿼리 언어로도 데이터 요청이 가능(UnQL)

**확장성(Scalability)**

SQL

- 수직적 확장
    - 비용이 많이 듬
- 여러 개의 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 매우 복잡하고 시간이 많이 소요됨

NoSQL

- 수평적 확장
    - 보다 저렴함
- 많은 트래픽을 보다 편리하게 처리할 수 있음

둘 중 어떤 것을 사용해야 할까?

  • 프로젝트의 특정 요구 사항과 필요에 따라 SQL 또는 NoSQL을 선택
  • 데이터베이스에 필요한 것이 무엇이고 어떤 유형의 시스템이 가장 효율적인 방식으로 제공할 수 있는지에 따라 결정
    • 웹 애플리케이션처럼 빠르고 확장 가능하며 안정적인 데이터베이스가 필요한 경우, 데이터 조작보다 빠른 탐색 속도가 필요한 경우 사용 - NoSQL
    • 애플리케이션에 복잡한 데이터 쿼리와 트랜잭션 지원이 필요한 경우 - SQL
profile
말못하는감자에서말하는감자가되기까지

0개의 댓글