SQL과 NoSQL

김용범·2024년 10월 22일

SQL과 NoSQL

SQL 이란❓

SQL은 Structured Query Language를 뜻하며, RDBMS에서 사용되는 표준 질의 언어이고, 비절차적 언어라는 특징을 가집니다.

비절차적 언어는 무엇일까

비절차적 언어는 SQL 언어의 특징으로 원하는 결과에 대한 내용(What)만 명세하고, 결과를 얻는 내부의 방식에 대한 내용(How)는 없다는 특징을 가집니다. 즉, 사용자는 특정 RDBMS에 해당하는 쿼리 문법을 사용하여 어떤 값들을 얻을 지만 작성하고, 그에 대한 결과 데이터들은 RDBMS 내부적으로 처리하여 반환해줍니다.

대부분의 SQL 쿼리 실행 순서는 다음과 같습니다.

  • FROM and JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT

RDBMS는 무엇일까

RDBMS(관계형 데이터 베이스 관리 시스템)는 관계형 데이터베이스를 생성, 업데이트, 관리하는 데 사용하는 프로그램으로 잘 알려진 RDBMS로는 MySQL, PostgreSQL, MariaDB, Oracle 등이 있습니다. 이러한 RDBMS의 특징은 다음과 같습니다.

  • 정해진 스키마에 따라 테이블이 구성된다. 여기서 테이블은 데이터를 구성하는 가장 기본적인 단위이다.
  • 테이블끼리 관계를 가진다. 관계의 종류로는 1:1, 1:N, N:M 관계가 있다.
    • 1:1 관계는 학생과 주민등록번호의 관계이다.
    • 1:N 관계는 학생과 선생님과의 관계이다. 한 학생은 1명의 선생님에게 배우고, 1명의 선생님은 여러 명의 학생을 가르친다.
    • N:M 관계는 학생과 수업의 관계이다. 하나의 학생은 여러 개의 수업을 수강할 수 있고, 하나의 수업 역시 여러 명의 학생이 포함된다.

      RDMBS에서는 하나의 속성에서 가질 수 있는 값은 반드시 원자값이어야 하기 때문에 배열이 들어갈 수 없으므로, 1:N 관계로 풀어서 적는 것이 원칙이다.
  • 데이터베이스의 상태를 변화시키기 위해서 수행하는 논리적 작업 단위인 "트랜잭션"을 사용한다. 트랜잭션의 특징은 4가지 ACID 가 있는데, 그 내용은 다음과 같다.
    • A(Atomicity) 원자성: 트랜잭션은 모두 수행되거나 모두 수행되지 않는다.
    • C(Consistency) 일관성: 하나의 트랜잭션 이후 데이터베이스의 상태는 이전과 같이 유효해야 한다.
    • I(Isolation) 고립성: 트랜잭션 수행 중에 다른 트랜잭션의 작업이 끼어들지 못한다.
    • D(Durability) 지속성: 트랜잭션이 성공시 적용된 결과는 영구적으로 지속된다.

RDBMS의 한계

2009년부터 페이스북, 트위터, 구글 애널리틱스 등 사용자가 급격하게 증가하면서 데이터 역시 폭발적으로 증가하는 상황이 발생했습니다. 즉, 단일 서버에 모든 데이터를 넣을 수 없어졌고, 이로 인한 서버의 확장이 불가피해졌습니다. 서버 확장의 종류로는 2가지가 있습니다.

  • Scale-Up(수직적 확장): 서버의 "사양"을 높인다.
  • Scale-Out(수평적 확장): 서버의 "대수"를 늘린다.

여기서 수직적 확장은 가격이 비싸고, 사양을 무한하게 높일 수 없습니다. 그렇다면 수평적 확장을 해야하는데,, RDBMS는 처음 설계시 단일 서버로 돌아간다는 전제 하에 만들어진 데이터베이스 시스템이기 때문에 수평적 확장을 하기에는 기술적으로 어렵고, 한계 또한 존재했습니다. 이러한 RDBMS의 한계를 극복하기 위해 NoSQL 데이터베이스가 등장하게 되었습니다.

NoSQL 이란 ❓

NoSQL은 Not Only SQL이란 의미를 가지고, 전통적인 관계형 데이터베이스 시스템과는 다른 방식으로 데이터를 저장하고 관리하는 데이터베이스 시스템입니다. 즉, 스키마가 테이블이라는 시스템에 고정되어 있는 것이 아니라 Column, Graph, Key-Value, Document 등 유연한 데이터 모델을 가지는 것이 특징입니다.

유연한 데이터 모델

유연한 데이터 모델에 대해서 조금 더 살펴보면, RDBMS와 달리 고정된 스키마가 없어 유연하게 처리하면 어떤 장점이 있을까요? 바로 데이터의 추가, 삭제, 수정이 용이해져서 데이터 모델의 변화에 대한 대응이 용이합니다. 예를 들어 A센터의 강좌 내용에는 이름, 강좌와 같은 속성이 있다고 가정해봅시다. DB에는 A센터의 강좌만 존재했지만, B라는 센터의 강좌까지 저장을 해야하는 상황입니다. 여기서 B 센터에는 이름, 강좌, 선생님이라는 속성이 있어 "선생님"이라는 속성을 추가하게 된다면? 다른 C, D, E 센터가 추가된다면 ?

일반적으로 DDL 속성을 변경하는 것은 DB에 큰 부하를 줄 수 있으므로 데이터 모델의 변경은 최소화해야 합니다. 따라서 이런 경우에는 NoSQL이 유용하게 사용될 수 있습니다.

저렴한 비용

NoSQL 데이터베이스는 오픈소스 제품들이 많아서 비교적 저렴하며, 무료로 사용할 수 있는 제품도 많습니다. 또한, 데이터 가용성을 보장하기 위해 노드를 추가할 수 있으므로 하드웨어 비용도 상대적으로 낮습니다.

Reference

profile
꾸준함을 기록하며 성장하는 개발자입니다!

0개의 댓글