DB 종류 알아보기

로선생·2025년 5월 18일
post-thumbnail

이번에 서비스 구성하면서 DB에 대해서 궁금한 부분이 생겨서, 나중에 찾아보기 위해 정리해보았다.

DB는 데이터를 구조화하고 저장하는 시스템으로, 크게 관계형과 비관계형이 있다.

1.관계형 데이터베이스 (RDB)

행과 열을 가지는 표 형식의 데이터베이스를 말한다.

왜 관계형일까? 테이블 자체를 관계(relation)이라고 부르기 때문인데, 테이블의 관계로 구성되어 있기 때문이다. Relation은 수학적 용어로 집합 간의 관계를 말하는데, 여기에서 기인하였다고 한다.

예시)

idname
1Alice
2Bob
order_iduser_iditem
1011Book
1021Laptop
1032Pencil

이 두 테이블은 orders.user_id는 users.id와 관계(relation)를 맺고 있다.

관계형 데이터베이스는 데이터를 조회하고 추가하고 수정하고 삭제하는 데 SQL을 사용한다. Structured Query Language, 직역하자면 구조화된 질의 언어라는 뜻이다.

관계형 데이터베이스의 이점

1) 정규화(Normalization) 작업을 통한 데이터 중복 최소화

모든 주문 테이블에 동일한 고객의 정보를 계속 저장한다면 불필요한 중복이 일어날 것이다.

order_idcustomer_nameaddressitem
101Alice서울시 강남구Book
102Alice서울시 강남구Laptop

정규화를 하면, 중복되는 고객의 정보를 줄임으로 수정/삭제에 용이하다.

customer_idnameaddress
1Alice서울시 강남구
order_idcustomer_iditem
1011Book
1021Laptop

2) JOIN을 통한 데이터 간 연결
: 서로 다른 테이블의 정보도 하나로 묶어 조회가 가능하다.

3) 정확성(무결성) 보장: 외래 키 제약, 유일성 등
: 잘못된 데이터 저장을 방지하는 다양한 기능이 내장되어 있다.

4) SQL로 강력한 쿼리 가능
: 복잡한 조건, 정렬, 집계, 필터링 등을 표현력 높은 언어(SQL)로 처리 가능하다.

관계형 데이터베이스의 단점

1) 스키마 고정 → 유연성 부족
: 테이블 구조를 미리 정의해야 하기 때문에, 새로운 필드나 구조 변경이 필요하면 DB 구조를 수정해야 하므로 번거롭고 위험할 수 있다.

2) 수평 확장(분산 처리)이 어렵다
: RDB는 한 서버에서 동작하도록 설계되어 있기 때문에, 대규모 트래필, 빅데이터 처리에서는 분산 확장이 힘들고 복잡하다. 반면 NoSQL은 설계상 여러 서버로 자동 분산(scale-out)이 쉽다.

3) 복잡한 JOIN은 성능 저하를 일으킬 수 있음

4) 정규화 → 너무 많은 테이블 분리
: 지나치게 정규화하면, 데이터 조회 시 JOIN이 많아지고 관리가 복잡해진다.

5) 유연한 데이터 구조를 다루기 어려움
: 예를 들어, 같은 테이블에 사용자마다 다른 속성이 필요한 경우 (ex. 자유 양식 설문 응답)
NoSQL(MongoDB 등)은 이런 데이터를 문서 형태로 쉽게 다루지만, RDB에서는 복잡한 테이블 설계가 필요하다.

RDB 종류

: Oracle, Mysql, Postgresql, MariaDB 등이 있다.

2.비관계형 데이터베이스 (NoSQL)

등장배경

NoSql은 빅데이터 시대가 도래하면서, 기존 관계형 테이블의 한계를 극복하기 위해 등장하였다. 데이터의 일관성을 포기하는 대신, 여러 대의 컴퓨터에 데이터를 분산하여 저장하는 것을 목표로 한다.

정의

: NoSQL은 "Not Only SQL"의 줄임말로, 전통적인 관계형 데이터베이스(RDBMS)와는 다른 방식으로 데이터를 저장하고 관리하는 데이터베이스를 의미한다.

NoSQL은 SQL을 "사용하지 않는 것"이 아니라, "SQL 만 사용하는 전통 방식에 의존하지 않는다"는 뜻이다.

핵심 특징:

1) 테이블/행/열 구조가 아닌 다양한 방식으로 데이터 저장
: NoSql은 하나의 통일된 구조만 있는 것이 아니라, 저장 방식이 다양하다.

종류설명대표 예시
1. Key-Value형키와 값 쌍으로 저장. 가장 단순하고 빠름.Redis, DynamoDB
2. 문서형(Document)JSON 또는 유사 형식의 문서 단위로 저장MongoDB, CouchDB
3. 컬럼형(Column-family)열 단위로 데이터를 저장, 분석/빅데이터에 적합Cassandra, HBase
4. 그래프형(Graph)노드와 간선으로 구성된 관계 데이터 표현Neo4j, Amazon Neptune

2) 스키마 자유도 높음 (사전 정의 없이도 필드 추가 가능)
: RDBMS에서는 테이블을 만들 때 컬럼 구조를 미리 정의해야 한다.
그런데 NoSQL은 각 문서마다 필드가 달라도, 이를 강제하지 않기 때문에 유연하게 대처가 가능하다.

// 첫 번째 문서
{ "name": "Alice", "age": 25 }

// 두 번째 문서 (추가 필드 포함)
{ "name": "Bob", "age": 30, "hobby": "golf" }

3) 수평 확장성에 강함 (서버 여러 개로 분산 처리 쉽게 가능)
: RDB는 서버 하나를 더 좋은 사양으로 교체하는 Scale-up 만 가능하다.
하지만 NoSql은 서버를 여러 대로 나누어 분산 처리하는 Scale-out 방식도 가능하다.
그래서 NoSql은 트래픽이 많은 서비스, 빅데이터 환경, 클라우드 기반 앱에 유리하다.

4) 비정형·반정형 데이터에 적합 (JSON, 로그, 센서 데이터 등)

데이터 유형설명예시
정형 데이터표처럼 고정된 구조엑셀, SQL 테이블
반정형 데이터구조는 있으나 유동적JSON, XML
비정형 데이터구조 없음로그, 이미지, 동영상, 텍스트

RDB는 정형 데이터에 강하지만, NoSql은 유동적인 데이터를 다루기에 더 적합하다.

NoSql의 단점

1) 데이터 무결성 보장이 약함
: MongoDB에서는 두 문서 간의 참조 관계를 강제로 맞추지 않기 때문에 사용자가 직접 데이터 일관성을 관리해야 한다. → 실수나 오류 발생 위험 증가

2) JOIN이 안 되거나 매우 불편함

3) 표준화 부족
: 관계형 DB는 SQL이라는 공통 언어를 사용하는데, NoSQL은 DB마다 쿼리 언어와 구조가 다르다.

profile
이제는 이것저것 먹어요

0개의 댓글