RDBMS와 NoSQL

함승완·2024년 10월 25일

RDBMS란 ? (Relational DataBase Management System)

관계형 데이터베이스는 고정된 행과 열로 구성된 테이블에 데이터를 저장한다.
각 열에는 하나의 속성에 대한 정보가 저장되고 행에는 각 열의 데이터 형식에 맞는 데이터가 저장된다.

특징

  • 데이터가 정해진 데이터 스키마에 따라 테이블에 저장된다.
  • 데이터가 관계를 통해 여러 테이블에 분산된다.

RDBMS의 장점

  • 스키마가 명확하게 정의되어 있다.
  • 데이터 무결성을 보장한다.
  • 각 데이터를 중복없이 한 번만 저장한다.

RDBMS의 단점

  • 유연성이 떨어져 데이터 스키마를 사전에 계획해야 하므로 추가, 수정이 어렵다.
  • 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있다.
  • 대체로 수직적 확장만 가능하다.

NoSQL이란 ? (Not Only SQL)

비관계형 데이터베이스로 관계형 데이터베이스를 제외한 나머지 유형을 말한다.
데이터 유형에 따라 다양한 유형을 갖추고 있으며, 주요 유형으로는 문서, 키, 값, 와이드 컬럼, 그래프 등이 있다.

NoSQL의 장점

  • 스키마가 없어서 유연하고 언제든지 저장된 데이터를 조회하고 새로운 필드 추가할 수 있다.
  • 데이터는 애플리케이션이 필요로 하는 형식으로 저장되기 때문에 데이터를 읽어오는 속도가 빨라진다.
  • 수직 및 수평 확장이 가능해서 애플리케이션에서 발생시키는 모든 읽기와 쓰기 요청 처리가 가능하다

NoSQL의 단점

  • 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
  • 데이터 중복을 계속 업데이트 해야된다.
  • 데이터가 여러 컬렉션에 중복되어있기 때문에 수정이 필요한 경우 모든 컬렉션에서 수행해야 한다.

RDBMS와 NoSQL의 차이점

1. 데이터 저장

RDBMS의 경우 데이터를 sQL언어를 통해 테이블에 저장한다.
미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장해야됨

NoSQL의 경우 key-value, document, wide-dolumn, graph등의 방식으로 저장함.

2. 스키마

스키마는 데이터베이스 전체 또는 일부의 논리적인 구조를 표현한 것으로 데이터베이스 내에서 데이터가 어떤 구조로 저장되는지를 나타냄

RDBMS를 사용하려면 고정된 스키마가 필요하다.
컬럼에 대한 정보를 미리 정해야만 데이터 처리가 가능함.
스키마를 나중에 변경할 수는 있지만 데이터베이스 전체를 수정하거나 오프라인으로 전환해야 할 수 있음.

NoSQL은 RDBMS보다 유연하게 스키마의 형태를 관리 가능.
컬럼을 추가할 때 즉시 새로운 열을 추가할 수 있고 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 됨.

3. 쿼리

쿼리는 데이터베이스에 대해서 정보를 요청하는 행위이다.
SQL기반의 관계형 데이터베이스는 테이블의 형식과 테이블 간의 관계에 맞춰 데이터를 요청해야함.
요청하는 방식이 정해져 있기 때문에 SQL언어와 같이 구조화된 쿼리 언어를 사용하는 것.

NoSQL의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두고 있기 때문에 구조화되지 않은 쿼리 언어로도 데이터를 요청할 수 있다(UnQL)

4. 확장성

SQL 기반의 RDBMS는 수직적으로 확장하며 높은 메모리와 CPU를 사용한다.
데이터베이스가 구축된 하드웨어의 성능을 많이 이용해서 비용이 비싼 편.
여러 개의 서버로 데이터베이스의 관계를 정의할 수 있지만 복잡하고 시간이 오래걸림.

NoSQL로 구성된 데이터베이스는 반대로 수평적으로 확장함.
NoSQL 데이터베이스를 위한 서버를 추가로 구축하게 되면 많은 트래픽을 편리하게 처리할 수 있다는 장점이 있음
SQL보다 저렴한 범용 하드웨어, 클라우드 기반 인스턴스에 NoSQL데이터베이스를 호스팅 할 수 있어 비용이 저렴하다.

어느 상황에 사용해야될까

RDBMS

  • ACID를 준수해야하는 소프트웨어를 개발할 때.
  • 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우
  • 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우

NoSQL

  • 정확한 데이터의 구조를 알 수 없거나 확장될 가능성이 있는 경우
  • 읽기는 자주 해도 데이터 변경은 자주 없는 경우
  • 막대한 양의 데이터를 다뤄야 해서 데이터베이스를 수평으로 확장해야 되는 경우

느낀점

RDBMS는 초기에 설정이 끝까지 간다고 생각하고 만들어야할 것 같다.
하지만 애매한 데이터베이스 세팅이 이루어진다고 가정하면 NoSQL도입을 고려해볼 것 같다.
NoSQL을 사용한다 했을 때 적합한 서비스는 검색기능일 수 있을 것 같다.
가나다라를 검색한다 했을 때
ㄱㄴㄷㄹ 라고 검색해도 나와야 하는 서비스를 진행할 때
도큐먼트 안에다가 ㄱㄴㄷㄹ, 가ㄴㄷㄹ, 가나ㄷㄹ 이런것을 넣어두면 되지 않을까 ?

profile
좋은 개발자 좋은 코딩 좋은 컴퓨터

0개의 댓글