관계형 DB를 사용하는 이유

한 줄 정의

RDB(Relational Database)는 데이터를 테이블 간 관계로 구조화하고, 트랜잭션으로 정합성을 보장하는 데이터 저장소다.

실무에서 왜 중요한가

RDB의 핵심 특성을 모르면 다음 상황에서 방향을 잃는다.

  • NoSQL과 RDB 중 어떤 것을 선택해야 하는지 기준이 없다.
  • 트랜잭션이 보장하는 것과 보장하지 않는 것을 구분하지 못한다.
  • 정규화와 반정규화의 트레이드오프를 설명하지 못한다.
  • RDB의 장단점을 모르면 NoSQL이 더 적합한 상황에서도 RDB를 선택한다.

RDB의 핵심 특성

ACID

속성의미실무 영향
Atomicity (원자성)트랜잭션은 전부 성공하거나 전부 실패결제 중 오류 시 전체 롤백
Consistency (일관성)트랜잭션 전후로 데이터 무결성 유지FK, UNIQUE 등 제약조건 보장
Isolation (격리성)동시 트랜잭션이 서로 간섭하지 않음격리 수준에 따라 다름
Durability (지속성)커밋된 데이터는 장애 후에도 유지WAL(Write-Ahead Log) 기반

관계 모델

데이터를 테이블(행과 열)로 표현하고, 테이블 간 관계(FK)로 연결한다. SQL로 선언적 조회가 가능하다.

-- 주문과 사용자를 관계로 조회
SELECT o.id, u.name
FROM orders o
JOIN users u ON o.user_id = u.id
WHERE o.status = 'COMPLETED';

RDB vs NoSQL

기준RDBNoSQL
데이터 구조정형 (스키마 고정)비정형/반정형 (유연한 스키마)
정합성ACID 보장대부분 Eventually Consistent
조인자유롭게 가능제한적 또는 불가
확장 방식Scale-up 중심Scale-out 용이
적합한 경우정합성이 중요한 비즈니스 데이터대량 로그, 캐시, 실시간 데이터

실무 원칙: 비즈니스 핵심 데이터(주문, 결제, 사용자)는 RDB, 보조 데이터(캐시, 세션, 로그)는 NoSQL이 일반적이다.

정규화와 반정규화

정규화

데이터 중복을 제거하고 테이블을 분리해서 정합성을 높이는 과정이다.

  • 같은 데이터가 여러 곳에 있으면 수정 시 불일치가 생긴다.
  • 정규화하면 UPDATE가 한 곳에서만 발생한다.

반정규화

조회 성능을 위해 의도적으로 중복을 허용하는 것이다.

  • JOIN이 많아서 조회가 느릴 때 사용한다.
  • 데이터 정합성 관리 부담이 증가한다.

실무 원칙: 정규화를 기본으로 하고, 조회 성능이 문제가 될 때만 반정규화를 적용한다.

자주 나는 실수

  • RDB와 NoSQL의 선택 기준 없이 익숙한 것을 사용한다.
  • ACID를 설명하지 못하면서 트랜잭션을 사용한다.
  • 정규화/반정규화의 트레이드오프를 고려하지 않는다.
  • “RDB는 느리다”는 선입견으로 NoSQL을 선택하고, 정합성 문제를 겪는다.

핵심 요약

RDB는 데이터를 테이블 간 관계로 구조화하고, ACID 트랜잭션으로 정합성을 보장합니다. 비즈니스 핵심 데이터처럼 정합성이 중요한 곳에 적합합니다.

NoSQL은 유연한 스키마와 수평 확장이 장점이지만, 강한 정합성 보장이 어렵습니다. 정규화를 기본으로 하고, 조회 성능이 병목일 때만 반정규화를 적용하는 것이 원칙입니다.

꼬리 질문

관련 문서