데이터베이스
데이터베이스 (Database)
왜 쓰는지
파일 시스템(텍스트 파일, 엑셀 등)에 데이터를 저장하면 생기는 문제를 DB가 해결한다.
| 문제 | DB가 해결하는 방법 |
|---|---|
| 보안 | 접근 권한(Role) 관리, 인증 없이는 데이터 접근 불가 |
| 동시성 | 여러 사용자가 동시에 읽고 쓸 때 충돌 방지 (Lock, MVCC) |
| 데이터 회복 & 백업 | 장애 발생 시 트랜잭션 로그로 복구 가능 |
| ACID 보장 | 데이터 일관성과 무결성을 트랜잭션 수준에서 보장 |
어떻게 쓰는지
DBMS(DataBase Management System): 데이터베이스를 관리하는 소프트웨어. 사용자가 SQL로 요청하면 DBMS가 실제 데이터를 읽고 쓴다.
대표적인 DBMS: MySQL, PostgreSQL, Oracle, MariaDB, SQLite
SQL 명령어는 역할에 따라 4가지로 분류된다.
| 분류 | 이름 | 역할 | 주요 명령어 |
|---|---|---|---|
| DDL | Data Definition Language | 구조(스키마) 정의 | CREATE, ALTER, DROP, TRUNCATE |
| DML | Data Manipulation Language | 데이터 조작 | SELECT, INSERT, UPDATE, DELETE |
| DCL | Data Control Language | 권한 제어 | GRANT, REVOKE |
| TCL | Transaction Control Language | 트랜잭션 제어 | COMMIT, ROLLBACK, SAVEPOINT |
언제 쓰는지
| 상황 | RDBMS | NoSQL |
|---|---|---|
| 구조화된 데이터 | RDBMS | - |
| 관계형 조인 | RDBMS | - |
| ACID 보장 필요 | RDBMS | - |
| 트랜잭션 | RDBMS | 제한적 |
| 스키마 변경 빈번 | - | NoSQL |
| 대규모 비정형 데이터 | - | NoSQL |
| 높은 쓰기 성능 | - | NoSQL |
| 복잡한 쿼리 | RDBMS | - |
장점
| 장점 | 설명 |
|---|---|
| 데이터 무결성 | 제약 조건과 트랜잭션으로 일관성 보장 |
| ACID 보장 | Atomicity, Consistency, Isolation, Durability |
| 복잡한 쿼리 | JOIN, 서브쿼리로 강력한 데이터 검색 |
| 표준 언어 | SQL은 DBMS 간 호환 가능 |
| 정규화 | 데이터 중복 제거로 저장 효율성 |
| 보안 | 권한 관리(DCL)로 접근 제어 |
단점
| 단점 | 설명 |
|---|---|
| 스키마 고정 | 구조 변경 시 마이그레이션 비용 |
| 수평 확장 어려움 | 샤딩 없이는 단일 서버 확장성 제한 |
| 높은 쓰기 비용 | 트랜잭션, 정규화로 인한 오버헤드 |
| 유연성 부족 | 형식이 정해진 데이터만 저장 가능 |
특징
| 용어 | 설명 |
|---|---|
| 데이터(Data) | 개별적인 사실 (예: 27, "김철수", true) |
| 정보(Information) | 가공·처리된 데이터 — 의미가 부여된 것 (예: "나이 27살인 회원 김철수") |
| 스키마(Schema) | 테이블의 구조 정의 — 컬럼명, 타입, 제약 조건 |
| 인스턴스(Instance) | 실제 저장된 데이터 행들 |
주의할 점
❌ 과도한 정규화
JOIN이 많아지면 오히려 성능 악화 가능. 필요하면 역정규화(Denormalization) 고려.
⚠️ DDL 자동 커밋
DROP, TRUNCATE, ALTER는 자동 COMMIT됨. ROLLBACK 불가능 (MySQL 기준). 실행 전 반드시 백업 후 신중하게 처리.
관련 파일: