nathan_H

[DataBase] SQL vs NoSQL 본문

Computer Science/DataBase

[DataBase] SQL vs NoSQL

nathan_H 2020. 10. 26. 20:36

Intro


  • 어플리케이션 개발을 함에 있어, 데이터베이스는 필수적으로 사용하게 된다.
  • 그리고 데이터베이스도 SQL, NoSQL 중 선택의 갈림길에 놓이게 된다.
  • SQL & NoSQL의 각 특징을 파악하고, 어떤 상황과 용도로 사용하는 것이 적절한지 정리하고자 한다.

SQL


  • SQL(Structured Query Language)은 데이터베이스 자체를 나타내는 용어는 아니다, 특정 유형의 데이터베이스와 상호 작용하기 위한 쿼리 언어이다.
  • 그래서 정확히 이야기 하면, RDMBS에서 사용되는 쿼리 언어라고 보면 되는데, 설명을 위해 SQL을 RDBMS 의미로 같이 사용할 예정이다.

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

  • 엄격한 스키마 : 정해진 데이터 스키마(구조)에 따라 데이터베이스 테이블에 저장된다.
  • 관계 : 관계(Relation)를 통해 여러 개의 테이블로 분산 된다.

엄격한 스키마

schema

  • 데이터는 정해진 테이블에 레코드로 저장되기 때문에 각 테이블의 구조와 각 필드의 타입에 따라 엄격하게 관리된다.
  • 즉, 스키마를 준수하지 않은 레코드는 삽입이 되지 않는다.
  • 또한 테이블에 구조보다 더 많은 정보가 필요하다면, 다른 테이블에서 조인을 통한 추가적인 연산을 통해 조회를 진행해야 한다.

관계

relation

  • 관계형 데이터베이스는 데이터들을 도메인에 맞게 여러 테이블에 저장 및 관리가 되어진다.
  • 구조를 잘 설계를 하면, 데이터의 중복을 피하며 원하는 데이터들로만 정확히 저장 및 관리를 할 수 있다.

NoSQL


image

  • NoSQL은 이름에서 알 수 있듯이 SQL과 반대되는 접근방식을 따르는 데이터베이스이다.

스키마 없음

  • NoSQL 에서는 다양한 타입이 존재하는데, MongoDB와 같은 NoSQL DB에서는 레코드를 "문서"라고 부른다.
  • SQL에서는 정해진 스키마를 따르지 않으면 데이터 삽입이 불가능했지만, NoSQL은 다른 구조의 데이터를 같은 컬렉션에 추가할 수 있다.
  • 즉, 컬렉션에는 SQL에서 가지는 엄격한 스키마 구조가 없기 때문에 다양한 데이터 타입들이 들어갈 수 있다.

관계 없음

ex1

  • NoSQL은 스키마가 없기 때문에 도메인에 필요한 정보를 모두 Collection에 저장하고 관리하게 된다.
  • 따라서, SQL와 달리 조인 개념이 없으면 대신 컬렉션을 통해 데이터 복제하여 각 컬렉션 일부분이 되어 산출하도록 한다.
  • 이런 특징은 조인 연산 필요성이 없어 속도 측면에서는 이점이 있으나, 데이터 중복이 될 수 있는 불안정한 측면이 있다.
  • 또한 수정 측면에서도,한쪽 컬렉션에서는 수정이 진행되고 다른 컬렉션에서는 수정이 이루어지지 않은 경우가 발생할 수 있어 부정확한 데이터가 발생할 수 있다.

Scaling


scaling

https://www.geeksforgeeks.org/horizontal-and-vertical-scaling-in-databases/

  • SQL & NoSQL의 비교와 차이점 중 중요한 부분으로 Scaling을 집고 넘어가야 한다.

Vertical Scaling

  • 데이터베이스 서버의 성능을 확장시키는 방식. (CPU와 같은 컴퓨터의 성능을 높이는 것)
  • SQL 데이터베이스는 스키마를 통해 저장되기 때문에, Vertical Scaling을 지원한다.
  • 추가로, SQL 데이터베이스는 "Sharding"의 개념이 있지만, 특정 제한이 있어 구현하기 쉽지 않음.

Horizontal Scaling

  • 물리적 서버가 추가되고, 데이터베이스가 전체적으로 분산하는 방식.
  • NoSQL은 특정 구조와 관계가 없기 때문에 Horizontal Scaling을 지원하며, 여러 서버에 쉽게 분리할 수 있음.

SQL & NoSQL 장단점


  • SQL & NoSQL의 특징을 알아봤는데, 각 특징을 통해 어떤 장단점이 있고, 각 장단점을 통해 어떤 데이터를 다루는데 적합한지 알아보자.

SQL 장점

  • 명확하게 정의된 스키마.
  • 데이터 무결성 보장
  • 관계를 통해 데이터 중복없이 저장.

SQL 단점

  • 스키마로 인해 유연한 구조를 가지지 못함.
    • 사전 계획에 움직여야 함.
  • 관계를 맺고 있기 때문에, 각 테이블에 포함된 이외의 테이터가 필요한 경우 JOIN은 추가적인 연산이 발생해 비용이 들고 복잡한 쿼리문 작성 필요
  • 스키마 & 관계 특징으로 인해 Horizontal Scaling 힘들어, CPU 성능 한계로 인해 처리량과 확장성 측면에 한계가 있음.

NoSQL 장점

  • 스키마와 관계가 없기 때문에, 유연한 데이터 구조를 가짐.
    • 언제든지 저장된 데이터를 변경 및 새로운 필드를 추가할 수 있음.
  • JSON 형식으로 저장되기 때문에, 애플리케이션이 사용하기 쉽고 빠르게 읽어올 수 있음.
  • 수직 및 수평 확장이 모두 가능한 구조로 확장성 측면에서 장점을 가짐.

NoSQL 단점

  • 유연성 때문에, 데이터의 구조를 결정하기 쉽지 않고 정확한 데이터를 관리하기 힘듬.
  • 특히 수정이 발생하는 경우 중복된 데이터가 있는 모든 컬렉션에 수행을 해야함.

SQL은 언제 사용할까?

  • 관계를 맺고 있는 데이터나 자주 변경이 이루어지는 어플리케이션을 만들 경우.
  • 구조가 변경될 여지가 없고, 명확하고 정확한 데이터가 보장되어야 하는 경우.
  • 예시 ) 상품 주문 및 내역 관리 시스템.

NoSQL은 언제 사용할까?

  • 정확한 데이터 구조를 만들기 힘들거나 구조가 쉽게 변경 / 확장이 될 수 있는 경우.
  • 읽기 처리가 자주 있고, 변경을 자주 하는 경우
    • 한번의 변경으로 수 많은 컬렉션을 업데이터를 할 필요가 없는 경우.
  • 데이터베이스를 수평적으로 확장하는 경우.(방대한 양의 데이터를 다뤄야 하는 경우)
  • 예시 ) SNS 친구 관계 및 피드 데이터.

마무리


  • 위 내용은 이론에 기반한 특징과 내용이며, 사실 SQL과 NoSQL은 어플리케이션에 따라 어떻게 설계하냐에 따라 SQL이 가진 단점을 해결(복잡한 쿼리 및 JOIN 연산 비용 등)할 수 있고, NoSQL의 단점(중복된 데이터 등)을 해결해서 사용할 수 있다.
  • 그러니 내가 만들고자 하는 시스템에 대한 명확한 정의 및 이해에 기반해 결정하는 것이 중요하다.
Comments