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가지
- 관계형 구조: 테이블 간 관계(Relation)로 데이터 연결
- SQL 언어: 표준화된 언어로 데이터 조작
- ACID 보장: 안전하고 일관된 데이터 처리
언제 사용하나?
- 데이터 간 관계가 명확한 경우 (회원-주문-상품)
- 데이터 무결성이 중요한 경우 (금융, 의료)
- 복잡한 쿼리와 분석이 필요한 경우 (통계, 리포트)
'-- 오늘 있었던 개발 일기' 카테고리의 다른 글
| Spring 프레임워크가 무엇인가 (0) | 2025.12.26 |
|---|---|
| NoSql에서 트랜잭션이 가능한가? (0) | 2025.12.22 |
| 오늘의 개발 문제 : fetch였다.. (0) | 2025.12.19 |
| 자바의 Collections Framework에 대해 (0) | 2025.12.15 |
| 오늘의 개발 문제 : 리액트, html REST API 연결 (0) | 2025.12.15 |