본문 바로가기

Hub Development/SQL

[SQL] DB 선택 과정 : RDBMS & NoSQL ( feat. Redis와 MongoDB )

728x90

📌 개요


🔹 프로젝트를 진행하며 DB를 선택하기 위해 RDBMS와 NoSQL 중 어떤 DB를 사용해야 하는지 고민하게 되었다. 두 DB에 대한 자세한 내용을 알지 못했기 때문에 추가적인 학습이 필요하다고 생각되어 공부를 시작했다. 추가로, 같은 NoSQL인 Redis와 MongoDB의 장단점에 대해서도 알아봤다.

 

🖋  RDBMS 란?


🔹 RDBMS(Relational DBMS)는 DBMS 앞에 R ( Relational ) 이 추가된 관계형 데이터베이스 관리 시스템. 데이터를 테이블 형태로 저장하고 관리하는 데이터베이스로, 일반적으로 SQL을 사용해서 데이터를 관리한다. 

 

관계형 데이터베이스(RDMBS)에서는 이러한 관계를 나타내기 위해 외래 키(foreign key)라는 것을 사용하고 이러한 테이블간의 관계에서 외래 키를 이용한 테이블 간 Join이 가능하다는 게 RDBMS의 가장 큰 특징이다.

 

⚙️ RDBMS 장점 및 단점


RDBMS의 특징

 

    ◈ Data를 Column과 Row형태로 저장한다.

    ◈ 신뢰성이 높고 데이터의 분류, 정렬, 탐색 속도가 비교적 빠르다.

    SQL을 사용하여 정교한 검색 query를 통해 데이터를 다룬다.

    ◈ Transaction ( 작업의 완전성을 보장 )

    ◈ 반드시 Schema 규격에 맞춰야 한다. ( 유연한 데이터 저장 X )

    ◈ 부하의 분산이 어렵다. ( 수직확장만 가능 )

    ◈ 대표적으로 MySQL, SQLite, PostgreSQL, Oracle 등 이 있다.

 

RDBMS의 장단점

 

    ◈ 장점

        1. 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장한다.

        2. 또한 관계는 각 데이터를 중복없이 한 번만 저장할 수 있다.

 

    ◈ 단점

        1. 테이블간테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다.

        2. 성능 향상을 위해서는 서버의 성능을 향상 시켜야하는 Scale-up만을 지원한다. 이로 인해 비용이 기하급수적으로 늘어날 수 있다.

        3. 스키마로 인해 데이터가 유연하지 못하다. 나중에 스키마가 변경 될 경우 번거롭고 어렵다.

 

🖋  NoSQL 이란?


🔹 NoSQL은 Not only SQL의 약자로 SQL만을 사용하지 않는 DBMS(DataBase Management System)를 의미한다. 따라서 관계형 모델을 사용하지 않는다. 또한, 테이블 간의 관계를 정의하지 않기 때문에 테이블 간의 join도 불가능하다. 

 

NoSQL은 빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS의 단점인 성능 향상을 위해서는 Scale-up 만이 가능하다 라는 문제를 해결하기 위해 나왔다. NoSQL은 데이터 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표한다.

 

⚙️ NoSQL 장점 및 단점



NoSQL의 특징

 

    유연성 : 스키마 선언 없이 필드의 추가 및 삭제가 자유로운 Schema-less 구조

    확장성 : 스케일 아웃 ( 수평 확장 ) 에 의한 서버 확장이 용이

    고성능 : 대용량 데이터를 처리하는 성능이 뛰어나다

    가용성 : 여러 대의 백업 서버 구성이 가능 ( 수평 확장 ) 하여 장애 발생 시에도 무중단 서비스가 가능

    데이터간의 관계를 정의하지 않는다. (Table 간의 join 도 불가능)

    RDBMS의 복잡도와 용량 한계를 극복하기 위한 목적으로 등장한 만큼 RDBMS에 비해 훨씬 더 대용량의 데이터를 저장할 수 있다.

    분산형 구조 : 데이터를 여러 대의 서버에 분산해 저장

    고정되지 않은 Table Schema (Schema가 없어 다루기 쉬움)

    Key에 대한 입/출력만 지원한다.

    Schema가 없다보니 Data에 대한 규격화된 결과 값을 얻기 힘들다.

 

NoSQL의 장단점

 

    장점

        1. 데이터 분산이 용이하며 성능 향상을 위한 Saclue-up 뿐만이 아닌 Scale-out 또한 가능하다.

        2. 가변적인 구조로 데이터 저장이 가능 / 데이터 모델의 유연한 변화가 가능

 

    단점

        1. 데이터가 여러 컬렉션에 중복으로 저장되어 있기 때문에, 데이터를 수정 또는 삭제해야 한다면, 데이터가 저장된 모든 컬렉션에 대해 이를 수행해야 한다. 

        2. 스키마가 존재하지 않다는 것은 단점이 될 수 있는데요. 데이터 구조가 명확하지 않기 때문에 데이터 구조 정의가 어려울 수 있다.

        3. 확장성이 높아지는 대신, 일관성이 떨어질 수 있다.

 

🚧 NoSQL의 종류


🔹 NoSQL의 데이터베이스는 크게 4가지의 종류가 있다.  

 

    1. Key-Value DB

    2. Document DB

    3. Graph DB

    4. Column Family DB

 

이 중, 대표적인 두 개의 데이터베이스인 Key-Value DB와 Document DB에 대해서 알아보자.

 

🍁 Key-Value DB


🔹  Key-Value Database는 데이터가 Key와 Value의 쌍으로 저장된다. Key는 Value에 접근하기 위한 용도로 사용되며, 값은 어떠한 형태의 데이터라도 담을 수 있다. 심지어는 이미지나 비디오도 가능하다. 또한 간단한 API를 제공하는 만큼 질의의 속도가 굉장히 빠른 편이다.

 

Key-Value DB의 Key 값은 unique한 고유값으로 유지되어야 한다. JOIN 연산을 고려하지 않으므로 RDB에서 관리하는 외부키나, 컬럼별 constraints 등이 필요 없다.

 

  • 종류 :
    • Redis
    • Oracle Berkely
    • AWS DynamoDB
  • 사용 케이스 :
    • 성능 향상을 위해 데이터 캐싱
    • 장바구니 같은 웹 애플리케이션에서 일시적인 속성 추적
    • 이미지나 오디오 파일 같은 대용량 객체 저장
    • 대용량 로그 저장

🍁 Document DB


🔹 Documnet Database 데이터는 Key와 Document의 형태로 저장된다. Key-Value 모델과 다른 점은 Value가 계층적인 형태인 Document로 저장된다는 것이다.

 

객체지향에서의 객체와 유사하며, 이들은 하나의 단위로 취급되어 저장된다. → 하나의 객체를 여러 개의 테이블에 나눠 저장할 필요가 없어진다는 뜻이다.

 

주요한 특징으로는 객체를 Document의 형태로 바로 저장 가능하기 때문에 객체-관계 매핑이 필요하지 않다. 또한, 검색에 최적화되어 있는데, 이는 Key-Value 모델의 특징과 동일하다. 단점이라면 사용이 번거롭고 쿼리가 SQL과는 다르다는 점인데, Document 모델에서는 질의의 결과가 JSON이나 xml 형태로 출력되기 때문에 그 사용 방법이 RDBMS에서의 질의 결과를 사용하는 방법과 다르다.

 

  • 종류 :
    • MongoDB
    • CouchDB
    • AWS Document DB
  • 사용 케이스 :
    • 대용량 데이터를 읽고 쓰는 서비스 백엔드 지원
    • 다양한 속성이 있는 데이터 관리
    • 유형이 다양해질 수 있는 메타데이터 저장
    • 비정규화된 중첩 구조의 데이터를 사용하는 앱 백엔드

👻  Redis & MongoDB


🔹 Redis는 Key-Value 형태의 데이터 구조를 가지는 인메모리 데이터 저장소이다. 반면, MongoDB는 Document 형태의 데이터 구조를 가지며, 디스크 기반으로 데이터를 저장한다. 이러한 차이로 인해 Redis는 메모리 기반으로 빠른 데이터 처리가 가능하며, 주로 캐싱에 사용되는 반면, MongoDB는 대용량의 데이터를 저장하고 관리하는 데 적합하다.

 

사용 사례

Redis는 캐싱, 메시징, 실시간 분석, 게임 랭킹, 세션 관리 등 다양한 분야에서 사용된다. 대표적으로 Twitter, GitHub, StackOverflow, Pinterest 등의 기업에서 사용되고 있다. 반면, MongoDB는 웹 애플리케이션, 모바일 애플리케이션, 로그 관리, IoT 등의 분야에서 활용되며, Adobe, eBay, Expedia, Cisco 등의 기업에서 사용되고 있다.

 

https://velog.io/@seanlion/nosqldb

 

'Hub Development > SQL' 카테고리의 다른 글

[SQL] ONLY_FULL_GROUP_BY 모드는 에러가 아니다  (2) 2024.03.23