본문 바로가기

프로그래밍/AI

[DB] SQL vs NoSQL (feat.MongoDB)

DB 사용에 있어 SQL과 NoSQL의 개념을 이해 및 비교 하는 것이 중요하다.
각각의 사용 목적 및 특성을 고려하여 DB를 선택해야 한다. 
그 중 NoSQL이면서 문서 데이터베이스인 MongoDB는 AI 시대에 점차 중요해지고 있다. 
SQL
  • SQL : Structured Query Language
    • 데이터베이스 내 데이터 삽입, 업데이트 쿼리, 삭제와 같은 작업에 일반적으로 사용되는 도메인 특화 프로그래밍* 언어
    • 데이터베이스 스키마**를 생성 및 수정하고 엑세스 및 관리 매개변수를 정의하는데 사용
    • 정형 데이터***는 SQL 데이터베이스(특히, 관계형 데이터베이스)에 저장됨 
      • *도메인 특화 프로그래밍 언어 : 특정 작업이나 문제를 대상으로 하는 언어
      • **데이터베이스 스키마 : 데이터 형식 지정 규칙, 테이블/인덱스 구조 등
      • ***정형 데이터 : 일관적이며 사전에 정의된 형식으로 구성된 데이터
  • 관계형 데이터베이스(RDBMS, 관계형 데이터베이스 관리 시스템) 
    • 테이블을 구성하는 데 사용되는 행과 열 내에 데이터를 저장
    • 두 테이블(또는 그 이상) 간의 관계는 외래 키를 사용하여 만들 수 있음.
    • 고정된 스키마를 사용하여 생성 및 관리된다는 점에 유의 
    • 정형 데이터나 반정형 데이터* 유형을 처리하는데 유리함
      • *반정형 데이터 : 스키마가 고정되어 있지는 않으나, 메타데이터나 태그를 포함하여 구조를 식별할 수 있는 데이터 
      • 메타데이터나 태크 예시 :HTML, XML, JSON 등
  • SQL 데이터베이스 예시 
    • Oracle : 가장 일반적으로 사용되는 엔터프라이즈 데이터베이스 시스템 (RDBMS) 
    • MySQL : 오픈 소스 관계형 데이터베이스 관리 시스템 (RDBMS)
    • PostgreSQL : 오픈 소스 객체 관계형 데이터베이스 시스템, ACID 호환 기능 제공 
    • MSSQL: 대규모 엔터프라이즈 환경에서 대량의 트랜잭션 처리 등 제공하는 RDBMS
    • SQLite : RDBMS 제공하는 서버리스 소프트웨어 라이브러리

NoSQL
  • NoSQL : Not only Structured Query Language
    • 데이터베이스 내에서 비정형 데이터*와 반정형 데이터를 수집, 저장, 조회하는데 사용되는 DB 관리 시스템 접근 방식
    • 기존의 관계형 DB를 통합 분석하거나 계산 할 수 없는 데이터를 네이티브 형식**으로 유지
    • 테이블 형식이 아닌 비관계형 데이터 모델을 처리 
    • SQL과 유사한 쿼리 언어를 지원
      • *비정형 데이터 : 사전에 정의된 데이터 모델이나 일관적인 구성이 없는 데이터. ex) 사진, 오디오, 동영상
      • **네이티브 형식: NoSQL DB의 다양한 데이터 저장 형식. ex) txt, JPG, MP3
  • NoSQL Database Type
    • 문서 데이터베이스 ; MongoDB, CouchDB
      • 객체 지향 데이터베이스라고도 하며, JSON 객체와 유사하지만 같지 않은 문서에 데이터를 저장
        • JSON, BSON 형태의 문서로 저장. 스키마가 유연하여 개발 속도가 빠름.
      • 네이티브 객체에서 개발자가 사용하는 프로그래밍 언어로 반환된 드라이브를 사용하여 ORM 필요없음
      • 숫자, 배열, 객체, 문자열, 부울 문자, 키-값 쌍, 중첩된 문서 등을 포함할 수 있음
        • ORM(Object-Relational Mapping): 객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블을 자동으로 연결(매핑)해주는 기술 또는 도구
    • 키-값 데이터베이스 ; Amazon DynamoDB, ScyllaDB, Redis 
      • 데이터를 키-값 쌍의 그룹으로 수집, 조회, 저장. 
      • 각 데이터 레코드는 고유 키와 연관된 값으로 표현됨. (키는 데이터베이스에서 값 조회하는데 사용) 
    • 컬럼-패밀리 스토어 ; Apache Cassandra, HBase(Hadoop-based), Google Bigtable
      • '와이드 컬럼 스토어' 라고도 불림 
      • 데이터를 행이 아닌 열으로 구성하므로, 깊이가 희박한 광범위한 데이터 세트로 작업할 때 유용 
      • 각 행에는 서로 다른 열(columns) 세트가 있으며 열은 패밀리로 모임. 
      • 성능 최적화를 위한 수평적 확장이 있는 대규모 세트로 작업할 때 유리 
    • 그래프 데이터베이스 ; Neo4j, Amazon Neptune, OrientDB
      • 노드(데이터)와 에지(관계)로 저장. 추천 시스템이나 소셜 네트워크 분석에 특화.
        • 노드 : 사람, 장소, 사물에 대한 정보 저장 
        • 에지 : 노드 간의 관계에 대한 정보 저장
      • 그래프 구조(ex. 소셜 네트워크, 계층 구조) 를 쿼리하는데 유리 

SQL vs NoSQL
비교 항목  SQL(관계형 데이터베이스)  NoSQL(비관계형 데이터베이스)
저장 모델  테이블(Table) 기반 (행과 열)  다양한 모델(문서, 키-값, 그래프 등)
데이터 유형 정형 데이터만 처리 가능 비정형, 반정형, 정형 데이터 모두 처리
스키마 엄격한 사전 정의 스키마 유연한 동적 스키마
확장성 주로 수직적 확장 (Scale-up) 주로 수평적 확장 (Scale-out)
쿼리 언어 SQL(표준화된 언어)  모델별 상이(UnQL, 전용 API 등) 
데이터 관계  JOIN 사용(테이블 간 연결) 임베딩(Embedding) 또는 참조(Reference)
트랜잭션 ACID 강력 보장(데이터 정합성 최우선)  BASE(가용성 우선). 단, 일부는 ACID 지원 

 

  • 언제 어떤 DB를 사용? 
    • SQL 선택: 데이터 구조가 명확하고 변경될 가능성이 적으며, 데이터의 무결성과 정확성이 최우선일때. 
    • NoSQL 선택: 데이터 구조가 자주 변경되거나, 대용량의 비정형 데이터를 빠르게 처리하고 확장해야 할때. 
  • 확장성 
    • 수직적 확장(SQL) : 데이터 관계의 복잡성 때문에 하나의 강력한 서버(수직적 확장)을 선호
    • 수평적 확장(NoSQL) : 대용량 데이터 처리를 위해 여러 대의 서버(수평적 확장)로 나누어 처리하는 구조
  • 트랜잭션
    • ACID (SQL) : 트랜잭션이 완벽하게 성공하거나 아예 실패함(All or Nothing)을 엄격하게 보장(정합성
    • BASE (NoSQL) : 즉각적인 정합성 보다는 최종적 일관성을 지향하는 유연한 속성
      • MongoDB Atlas: ACID compliance를 유지할 수 있는 분산 시스템 NoSQL 데이터베이스

참고 자료 

https://www.mongodb.com/ko-kr/resources/basics/databases/nosql-explained/nosql-vs-sql

 

NoSQL 대 SQL 데이터베이스

NoSQL 데이터베이스와 SQL 데이터베이스 간의 주요 차이점에 대해 알아보세요.

www.mongodb.com