SQL과 NOSQL의 차이점

임수정·2023년 7월 25일
0
post-thumbnail

웹 애플리케이션 개발을 진행하다 보면 DB를 선택하는 순간이 찾아옵니다.

SQL(MYSQL) VS NOSQL(MongoDB)

그러면 각각은 어떠한 특징을 가지고 있고 둘의 차이점은 무엇인지 알아보겠습니다.

SQL

SQL은 관계형 데이터베이스(RDBMS)에서 데이터 관리 및 처리를 하기 위해 설계된 언어입니다. SQL을 RDBMS에서 사용하면 데이터를 저장, 수정, 삭제 및 검색할 수 있습니다.

SQL 특징

  1. 데이터는 정해진(엄격한) 스키마에 따라 테이블에 저장됩니다.

    • 스키마란 : 데이터베이스의 구조를 정의하는 개체 (여기서 구조란? 어떤 데이터가 테이블에 들어가고 어떤 데이터가 그렇지 않을지를 정의하는 필드(field) 집합을 가리킵니다.)

    • RDBMS에서 스키마를 준수하지 않은 레코드는 추가할 수 없습니다. 추가로 필드를 넣고 싶다면 스키마 전체를 수정해야 합니다.

  2. 데이터는 관계를 통해 여러 테이블로 분산됩니다.

    • 여러 개의 테이블을 만들어야 하지만 하나의 테이블에서 중복 없이 하나의 데이터만을 관리합니다.

SQL 장, 단점

장점

  1. 데이터 무결성 보장(데이터베이스 내의 데이터가 정확하고 유효한 상태를 유지하는 것)
  2. 각 테이블별 중복 없는 데이터 저장

단점

  1. 명확한 스키마로 인해 떨어지는 유연성(수정하기가 번거로움)
  2. JOIN으로 인한 복잡한 쿼리문 생성 가능성

NOSQL

SQL과 정반대의 개념으로 관계와 스키마가 없는 형태로 비관계형 데이터베이스라고 합니다.

NOSQL 특징

  1. 관계, 스키마가 존재하지 않습니다.

  2. 레코드를 문서(documents)라고 부릅니다.

    • 문서는 JSON과 비슷한 형태를 가지고 있습니다.
  3. 다른 구조의 데이터를 같은 컬렉션(=SQL에서의 테이블)에 추가가 가능합니다.

    • 일반적으로 관련 데이터를 동일한 컬렉션에 저장합니다. SQL처럼 여러 테이블로 나누지 않고 User, Post의 내용들도 Order에 포함돼서 저장될 수 있습니다. 즉, JOIN할 필요 없이 모든 정보를 갖춘 문서가 생기는 것입니다.

    • JOIN의 개념은 NOSQL에서 존재하지 않습니다.
      그렇다면 JOIN을 하고 싶을 때 어떻게 할 수 있을까요?


      예를 들면, Order 테이블에 있는 User, Post의 내용들을 복제해 각각의 컬렉션에 저장하여 데이터를 정확하게 산출하도록 하는 것입니다.

      이렇게 진행을 하게 되면 중복된 데이터가 발생한다는 단점을 가지고 있습니다.

NOSQL 장, 단점

장점

  1. 유연성(스키마가 존재하지 않기 때문에)
  2. 관계 설정이 되어있지 않기 때문에 데이터를 읽어오는 속도가 빠름

단점

  1. 데이터의 중복이나 불필요한 데이터의 추가로 데이터의 무결성 보장이 어려움이 있음.
  2. 단순한 쿼리문 작성 시 효율적이지만 다양한 조인 작업을 수행하기에 어려움이 있음.

확장성

또 중요하게 살펴봐야 할 점은 확장성(Scaling)입니다.
데이터베이스 시스템이 확장성을 갖추면 더 많은 트래픽을 처리하여 시스템의 성능을 유지하거나 향상시킬 수 있습니다.

수직적

  • 서버의 성능을 향상시키는 것을 의미합니다.
    (서버의 물리적, 비용적 한계가 있어 일정 수준 이상으로 확장하기 어렵습니다.)

수평적

  • 여러 서버를 추가하여 동시에 운영함으로써 작업을 분산하고 부하를 부담하게 됩니다.
    (보통 클라우드 컴퓨팅 환경에서 유연하게 구현할 수 있어 대규모 시스템에서 많이 사용됩니다.)

저장 방식의 차이로 SQL은 수직적 확장, NOSQL은 수평적 확장만 지원합니다.

SQL 과 NOSQL의 차이점

위의 장, 단점을 정리한 차이점을 정리해 보겠습니다.

  1. 데이터 모델의 차이(관계형 데이터베이스 VS 비관계형 데이터베이스)
  2. 스키마의 차이(스키마 존재(필수) VS 문서(documens))
  3. 확장성 (수직적 확장 VS 수평적 확장)
  4. 적합한 사용 상황
  • SQL
  1. 데이터 무결성 및 안정성이 중요한 업무
  2. 정형화된 데이터를 다루는 경우(회원 정보, 주문 정보)
  • NOSQL
  1. 변동이 거의 없고 읽기 위주의 업무
  2. 수평적 확장이 필요한 경우(많은 트래픽을 처리해야 하는 경우)

[참고자료]

profile
부족함을 인정하고 채워나가는 개발자! (Node.js 개발자)

1개의 댓글

comment-user-thumbnail
2023년 7월 25일

많은 도움이 되었습니다, 감사합니다.

답글 달기