본문 바로가기
-- 오늘 있었던 개발 일기

RDBMS란 무엇인가?

by code study 2025. 12. 21.

RDBMS란?

**RDBMS(Relational Database Management System)**는 관계형 데이터베이스 관리 시스템으로, 데이터를 테이블(표) 형태로 저장하고 관리하는 시스템입니다.

쉽게 말해, 엑셀 스프레드시트처럼 **행(Row)**과 **열(Column)**로 구성된 테이블에 데이터를 체계적으로 저장하고, 이 테이블들을 서로 **연결(Relation)**해서 데이터를 효율적으로 관리할 수 있게 해주는 소프트웨어예요.

핵심만 빠르게 이해하기

테이블(Table)

  • 데이터를 저장하는 기본 단위
  • 엑셀 시트처럼 행과 열로 구성
  • 예: 회원 테이블, 주문 테이블, 상품 테이블

관계(Relationship)

  • 테이블끼리 연결하는 방법
  • "이 주문은 누가 했을까?" 같은 정보를 알 수 있게 해줌
  • Primary Key(주키)와 Foreign Key(외래키)로 연결

SQL

  • 데이터베이스와 대화하는 언어
  • "회원 정보 보여줘", "새 주문 추가해줘" 같은 명령을 내림
  • 모든 RDBMS가 비슷한 SQL을 사용해서 배우기 쉬움

 

 잘못된 예시: 파일 시스템 사용

파일로 데이터 관리
- user_data.txt
  홍길동,010-1234-5678,서울
  김철수,010-9876-5432,부산

문제점:
1. 데이터 중복 발생
2. 데이터 일관성 보장 어려움
3. 여러 사람이 동시에 수정하면 충돌
4. 복잡한 검색 불가능

 올바른 예시: RDBMS 사용

-- 회원 테이블
CREATE TABLE members (
    member_id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    phone VARCHAR(20),
    address VARCHAR(100)
);

-- 주문 테이블 (회원과 연결)
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    member_id INT,
    order_date DATE,
    total_amount INT,
    FOREIGN KEY (member_id) REFERENCES members(member_id)
);

-- 데이터 조회 (여러 테이블 연결)
SELECT m.name, o.order_date, o.total_amount
FROM members m
JOIN orders o ON m.member_id = o.member_id
WHERE m.name = '홍길동';

장점:

  • 데이터 중복이 없음
  • 외래키로 데이터 정확성 보장
  • 복잡한 검색과 분석 가능
  • 안전하게 데이터 처리

왜 RDBMS가 중요한가?

1. 데이터 무결성 보장

실수로 잘못된 데이터가 들어가는 걸 막아줍니다. 예를 들어, 존재하지 않는 회원의 주문이 생기는 일을 방지해요.

은행 앱에서 계좌 이체할 때, 내 계좌에서 돈이 빠져나갔는데 상대방 계좌에 입금이 안 되면 큰 문제겠죠? RDBMS는 이런 일이 절대 생기지 않도록 보장합니다.

이를 트랜잭션이라고 하는데, 둘 다 성공하거나 둘 다 실패하게 만듭니다.

2. 데이터 중복 최소화

같은 정보를 여러 곳에 저장하지 않아도 됩니다.

잘못된 방식:

주문1: 홍길동, 010-1234-5678, 서울, 상품A
주문2: 홍길동, 010-1234-5678, 서울, 상품B
→ 홍길동 정보가 중복!

올바른 방식:

회원 테이블: 홍길동, 010-1234-5678, 서울
주문 테이블: 회원ID=1, 상품A
주문 테이블: 회원ID=1, 상품B
→ 홍길동 정보는 한 곳에만 저장!

3. 강력한 검색 기능

복잡한 조건으로도 원하는 데이터를 쉽게 찾을 수 있어요.

-- "서울에 사는 30대 회원 중 최근 3개월간 10만원 이상 구매한 사람"
SELECT m.name, SUM(o.total_amount) as total
FROM members m
JOIN orders o ON m.member_id = o.member_id
WHERE m.address LIKE '서울%'
  AND m.age BETWEEN 30 AND 39
  AND o.order_date >= DATE_SUB(NOW(), INTERVAL 3 MONTH)
GROUP BY m.member_id, m.name
HAVING SUM(o.total_amount) >= 100000;

이런 복잡한 조건도 한 번에 검색 가능합니다


RDBMS의 주요 이점

특징 설명 실제 활용 예시

데이터 독립성 저장 방식이 바뀌어도 프로그램 수정 불필요 MySQL에서 Oracle로 바꿔도 앱 코드는 그대로
표준 SQL 어떤 RDBMS든 비슷한 SQL 사용 MySQL 배우면 PostgreSQL도 쉽게 사용 가능
보안 사용자별 권한 설정 고객 개인정보는 권한 있는 사람만 볼 수 있음
백업/복구 자동 백업, 장애 시 복구 서버 고장 나도 어제 시점으로 되돌리기 가능
확장성 데이터 증가에 따라 확장 가능 소규모 스타트업에서 대기업으로 성장해도 OK

대표적인 RDBMS 제품

상용 RDBMS (유료)

  • Oracle Database: 대기업과 금융권에서 주로 사용하는 강력하고 안정적인 DBMS
  • Microsoft SQL Server: Windows 환경에 최적화된 중소기업용 DBMS
  • IBM DB2: 대규모 트랜잭션 처리에 강한 엔터프라이즈급 DBMS

오픈소스 RDBMS (무료)

  • MySQL: 가장 인기 있는 오픈소스 DB, 웹 서비스에 많이 사용
  • PostgreSQL: 고급 기능과 표준 SQL 준수에 강한 오픈소스 DBMS
  • MariaDB: MySQL과 거의 동일하며 호환성이 우수한 대체재

경량 RDBMS

  • SQLite: 모바일 앱에 내장 가능한 서버 없는 경량 DB
  • H2: 개발/테스트용으로 많이 사용하는 빠르고 가벼운 DB

ACID - 안전한 데이터 처리의 핵심

RDBMS가 데이터를 안전하게 처리하는 4가지 원칙입니다.

1. Atomicity (원자성)

"전부 성공 아니면 전부 실패"

-- 계좌 이체 예시
START TRANSACTION;
  UPDATE accounts SET balance = balance - 10000 WHERE account_id = 1; -- A계좌에서 출금
  UPDATE accounts SET balance = balance + 10000 WHERE account_id = 2; -- B계좌에 입금
COMMIT;

둘 중 하나라도 실패하면 둘 다 취소됩니다!

2. Consistency (일관성)

"규칙을 항상 지킴"

잔액은 항상 0원 이상이어야 한다는 규칙이 있으면, 어떤 경우에도 마이너스 잔액이 생기지 않습니다.

3. Isolation (격리성)

"동시에 해도 서로 방해 안 함"

A가 이체 중일 때 B가 같은 계좌를 조회해도 이상한 값이 보이지 않습니다.

4. Durability (지속성)

"완료되면 영구 저장"

거래 완료 후 서버가 다운되어도 데이터는 안전하게 저장되어 있습니다.


실전 예시로 이해하기

쇼핑몰 데이터베이스 설계

-- 1. 회원 테이블
CREATE TABLE members (
    member_id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(100) UNIQUE NOT NULL,
    name VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 2. 주문 테이블 (회원과 연결)
CREATE TABLE orders (
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    member_id INT,                     -- 어떤 회원이 주문했는지
    order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    total_amount INT,
    FOREIGN KEY (member_id) REFERENCES members(member_id)  -- 회원 테이블과 연결
);

실제 활용 쿼리

-- 특정 회원의 주문 내역 조회
-- 여러 테이블을 JOIN으로 연결해서 한 번에 조회
SELECT 
    m.name,              -- 회원 이름
    o.order_date,        -- 주문 날짜
    o.total_amount       -- 주문 금액
FROM members m
JOIN orders o ON m.member_id = o.member_id  -- 회원과 주문을 연결
WHERE m.name = '홍길동'                      -- 홍길동의 주문만
ORDER BY o.order_date DESC;                  -- 최신 주문부터

여러 테이블을 JOIN으로 연결해서 복잡한 정보도 쉽게 가져올 수 있다는 게 RDBMS의 강점입니다.

 


 

NoSQL이란?

NoSQL은 "Not Only SQL"의 약자로, RDBMS와는 다른 방식으로 데이터를 저장하고 관리하는 데이터베이스예요.

NoSQL의 특징

  • 유연한 구조: 테이블 형태가 아닌 다양한 방식으로 데이터 저장
  • 스키마 자유: 미리 구조를 정하지 않아도 됨
  • 빠른 속도: 대용량 데이터를 빠르게 처리
  • 수평 확장: 서버를 여러 대 추가해서 확장 가능
// MongoDB에 저장되는 데이터 (JSON 형태)
{
  "_id": "abc123",
  "title": "오늘의 일기",
  "content": "좋은 하루였다",
  "emotion": "happy",
  "tags": ["일상", "행복", "주말"],      // 배열도 그냥 저장
  "weather": {                           // 중첩 객체도 그냥 저장
    "temp": 25,
    "condition": "맑음"
  }
}
// 같은 "diaries" 컬렉션에 서로 다른 구조의 문서 저장 가능

// 첫 번째 일기 - 간단하게
{
  "_id": "1",
  "title": "짧은 일기"
}

// 두 번째 일기 - 필드 추가해도 OK
{
  "_id": "2",
  "title": "긴 일기",
  "content": "오늘은...",
  "photos": ["img1.jpg", "img2.jpg"],  // 새 필드 그냥 추가
  "location": { "lat": 37.5, "lng": 127.0 }
}

// RDB였다면? ALTER TABLE로 컬럼 추가 필요

언제 무엇을 선택할까?

RDBMS를 선택하세요:

  • 데이터 구조가 명확하고 잘 안 바뀔 때
  • 데이터 정확성이 최우선일 때 (금융, 결제)
  • 복잡한 관계와 조인이 많을 때

NoSQL을 선택하세요:

  • 데이터 구조가 자주 바뀔 때
  • 엄청 빠른 처리 속도가 필요할 때
  • 대용량 데이터를 다룰 때
  • SNS, 실시간 서비스 등

핵심 정리

RDBMS는 데이터를 테이블 형태로 저장하고, 테이블 간 관계를 정의하여 데이터를 체계적으로 관리하는 시스템입니다.

핵심 특징 3가지

  1. 관계형 구조: 테이블 간 관계(Relation)로 데이터 연결
  2. SQL 언어: 표준화된 언어로 데이터 조작
  3. ACID 보장: 안전하고 일관된 데이터 처리

언제 사용하나?

  • 데이터 간 관계가 명확한 경우 (회원-주문-상품)
  • 데이터 무결성이 중요한 경우 (금융, 의료)
  • 복잡한 쿼리와 분석이 필요한 경우 (통계, 리포트)