:ledger: 관계형 데이터베이스와 비관계형 데이터베이스의 차이를 알아보자!

지금까지 과제를 진행해오며 사용한 FireBaseSupabase가 있다. 이번에 Supabase를 사용하면서 관계형 데이터베이스에 대해 간략히 알게되었는데, 관계형 데이터베이스와 비관계형 데이터베이스의 개념에 대해 알아보았다.

:one: 관계형 데이터베이스 (RDBMS)

관계형 데이터베이스는 테이터를 테이블에 저장한다. 이 테이블은 행(레코드)과 열(필드)로 구성되며, 여러 테이블간에 관계를 설정할 수 있음. 데이터를 조회하거나 조작할 때, SQL(Structured Query Language)이라는 언어를 사용한다.

:pushpin: 1-1) 구조

  • 테이블: 데이터가 저장되는 기본 단위로, 행과 열로 구성된다.
  • : 데이터의 한 레코드(한 줄)를 나타내며, 예를들면 유저 한 명의 정보를 저장함
  • : 각 레코드의 속성을 나타내며, 예를 들면 유저의 이름, 이메일 등을 저장함
  • 관계: 테이블 간의 연결을 통해 데이터를 연관 시킨다.

:pushpin: 1-2) 예시

아래의 예시가 대표적인 관계형 데이터 베이스이다.

  • MySQL
  • PostgreSQL
  • Oracle
  • SQL Server

:pushpin: 1-3) 특징

  • 스키마: 데이터를 저장하기 전에 테이블 구조와 데이터 유형을 미리 정의해야 한다.
  • 정규화: 데이터를 중복 없이 효율적으로 저장하기 위해 테이블을 분리하고, 관계를 정의한다.
  • 트랜잭션: 데이터의 일관성과 무결서을 보장하는 ACID 특성(원자성,일관성,고립성,지속성)을 지원한다.

:pushpin: 1-4) 비유

관계형 데이터베이스는 엑셀 스프레드시트에 비유할 수 있다.

  • 엑셀에서 정보를 관리할 때, 각 시트가 하나의 테이블이라고 생각해본다.
  • 시트에는 행과 열이 있어서, 데이터가 정확한 칸에 맞춰짐
  • 여러 시트(테이블) 간의 관계를 설정하면, 다른 시트에 있는 데이터를 연결해 *함수로 계신할 수 있다. 이처럼 관계형 데이터베이스도 데이터를 구조화하고 테이블 간의 복잡한 관계를 처리할 수 있음

:two: 비관계형 데이터베이스 (NoSQL)

비관계형 데이터베이스는 데이터를 유연한 형식으로 저장한다. 테이블과 같은 고정된 형식이 없고 문서, 키-값, 그래프, 열등 다양한 방식으로 데이터를 저장할 수 있음

:pushpin: 2-1) 구조

  • 문서(Document): JSON이나 XML과 같은 형식으로 데이터를 저장한다.
  • 키-값(Key-value): 하나의 키와 그에 대응하는 값으로 데이터를 저장한다.
  • 그래프(Graph): 노드와 엣지로 구성된 데이터 구조로, 데이터 간의 관계를 그래프로 표현한다.
  • 열(Column): 각 데이터 항목을 개별적으로 저장하는 구조로, 대규모 데이터 처리에 효율적이다.

:pushpin: 2-2) 예시

아래의 예시가 대표적인 비관계형 데이터베이스이다.

  • MongoDB
  • Redis
  • Firebase

:pushpin: 2-3) 특징

  • 유연한 스키마: 사전 정의된 스키마가 없어서 데이터를 자유롭게 추가 변경이 가능함
  • 확장성: 수평적 확장이 용이해 대규모 데이터 처리에 적함함
  • 데이터 모델: JSON, XML, 바이너리 형식으로 데이터를 저장할 수 있음

:pushpin: 2-4) 비유

비관계형 데이터베이스는 메모장에 비유할 수 있음

  • 메모장은 자유롭게 글을 쓰고, 필요한 정보를 언제든 추가하거나 수정이 가능함
  • 페이지(문서)에 무슨 내용이 들어갈지 정해진 규칙이 없음. 데이터를 저장할 때 유연하고, 필요에 따라 쉽게 구조를 변경할 수 있음

:three: 차이점

  • 구조
    • 관계형 데이터베이스: 테이블 구조(행과 열)을 따름.
    • 비관계형 데이터베이스: 문서,키-값,그래프 등 다양한 구조가 있음
  • 스키마
    • 관계형 데이터베이스: 데이터를 저장하기 전에 엄격한 스키마를 정의
    • 비관계형 데이터베이스: 유연한 스키마로 데이터를 자유롭게 추가 및 수정 가능
  • 확장성
    • 관계형 데이터베이스: 주로 수직적 확장(서버를 업그레이드)
    • 비관계형 데이터베이스: 수평적 확장(서버를 여러 대 추가)이 용이함
  • 관계
    • 관계형 데이터베이스: 테이블 간의 복잡한 관계를 쉽게 표현 가능 (조인)
    • 비관계형 데이터베이스: 데이터를 독립적으로 저장하므로 복잡한 관계 표현에 덜 적합

:four: 각 데이터베이스는 언제 사용할까

둘의 데이터 베이스의 색깔이 완전 다르고, 장단점 또한 있기에 어떤 상황이냐에 따라 다르게 선택할 수 있는 것 같다.

:pushpin: 4-1) 관계형 DB

  • 복잡한 쿼리와 조인이 필요한 경우: 여러 테이블 간의 관계를 자주 활용해야 할 때
  • 데이터 물결성이 중요한 경우: 엄격한 스키마와 트랜잭션이 필요한 상황
  • 비유: 여러 시트(테이블) 간의 계산과 데이터를 연결해야 하는 *엑셀 스프레드시트 작업과 유사함

:pushpin: 4-2) 비관계형 DB

  • 대규모 데이터를 처리해야하는 경우: 많은 양의 데이터를 빠르게 저장하고 검색하고 싶을 때
  • 유연한 데이터 구조가 필요한 경우: 데이터를 자주 수정하거나 다양한 형식의 데이터를 저장할 때
  • 비유: 필요한 내용을 마음대로 기록하고 수정할 수 있는 )메모장*과 유사함

:fire: 마무리

이번에 처음 사용해본 관계형 데이터베이스인 Supabase는 이전에 사용했던 Firebase에 비해 설정해줘야 할 것들이 많다고 느껴졌다. 하지만 그만큼 테이블 간의 참조를 통해 데이터 간의 관계를 명확히 정의할 수 있고, 복잡한 쿼리나 데이터 무결성을 유지할 수 있다는 점에서 강력한 도구임을 알게 되었다.