AI

백 투 더 베이직(Back to the Basic): 데이터베이스(Database)의 본질, 기초부터 다시 배우는 DB의 모든 것

marvin-jung 2026. 5. 13. 22:41
반응형
SMALL
백 투 더 베이직(Back to the Basic): 데이터베이스(Database)의 본질, 기초부터 다시 배우는 DB의 모든 것
RDBMS · ACID · 인덱스 · 트랜잭션 · 정규화 · NoSQL까지, 한 번에 정리하는 DB 입문 완벽 가이드
"데이터베이스(DB)를 모르는 사람이 있을까요?"

아마 거의 없을 것입니다. 하지만 "DB를 정확히 설명할 수 있는 사람"은 어떨까요? 의외로 많지 않습니다. 매일 사용하지만 정작 본질은 흐릿한 개념, 그것이 바로 데이터베이스입니다. 이번 글에서는 화려한 최신 기술을 잠시 내려놓고, 가장 기본으로 돌아가서 DB를 처음부터 차근차근 다시 정리해 보겠습니다.

개발을 하든, 인프라를 다루든, 심지어 단순히 엑셀로 데이터를 정리하든 우리는 모두 어떤 형태로든 데이터베이스를 마주합니다. 그러나 "데이터베이스가 무엇인가요"라는 질문을 받으면 대부분 "데이터를 저장하는 곳" 정도로 답하고 멈춥니다. 이 글은 바로 그 멈춘 지점부터 다시 시작하는 글입니다. 신입 개발자에게는 든든한 기초를, 경력자에게는 익숙함에 가려져 있던 본질을 다시 비춰주는 거울이 되었으면 합니다.

1. 데이터베이스(Database)란 정확히 무엇인가

데이터베이스의 가장 정확한 정의는 "여러 사람이 공유하여 사용할 목적으로, 통합·저장·관리되는 데이터의 집합"입니다. 단순히 데이터를 모아둔 파일과는 다릅니다. 데이터베이스가 되기 위해서는 네 가지 핵심 특징을 갖춰야 합니다.

🔗
통합된 데이터
Integrated Data
중복 최소화
💾
저장된 데이터
Stored Data
영속성 확보
⚙️
운영 데이터
Operational Data
업무 필수 자료
👥
공용 데이터
Shared Data
다수 사용자 공유
DB와 DBMS는 다릅니다

많은 분들이 혼용하지만, 데이터베이스(DB)DBMS(Database Management System)는 엄연히 다른 개념입니다. DB는 "데이터의 묶음" 그 자체이고, DBMS는 그 데이터를 효율적으로 다루기 위한 소프트웨어입니다. 우리가 흔히 부르는 MySQL, Oracle, PostgreSQL, MongoDB는 모두 DB가 아니라 DBMS입니다.

1970년
IBM의 에드거 F. 코드(E.F. Codd) 박사가 관계형 데이터 모델 논문을 발표하며 RDBMS의 이론적 기반을 마련했습니다.
1979년
최초의 상용 RDBMS인 Oracle V2가 출시되어, 관계형 데이터베이스의 시대가 본격적으로 열렸습니다.
1995년
오픈소스 RDBMS인 MySQL이 등장하여 웹 시대의 데이터베이스 보급을 폭발적으로 가속화했습니다.
2009년~
MongoDB, Cassandra 등 NoSQL이 본격 등장하며 빅데이터 시대에 맞는 새로운 데이터 처리 패러다임이 자리잡았습니다.
2. RDBMS의 핵심 구조: 테이블, 행, 열, 그리고 키(Key)

현재 가장 널리 쓰이는 데이터베이스는 관계형 데이터베이스(RDBMS, Relational Database Management System)입니다. 이름 그대로 데이터들 사이의 "관계(Relation)"를 핵심으로 다룹니다. RDBMS의 데이터는 모두 테이블(Table)이라는 2차원 구조에 저장됩니다.

USERS 테이블 예시+----+----------+------------+-------------+ | id | name | birth_date | email | +----+----------+------------+-------------+ | 1 | Marvin | 1985-04-12 | m@test.com | | 2 | Jung | 1990-07-23 | j@test.com | | 3 | Lee | 1992-11-30 | l@test.com | +----+----------+------------+-------------+ ↑ ↑ ↑ ↑ Column Column Column Column ─────────────── Row ────────────────→

여기서 가로 한 줄을 행(Row, 또는 Record/Tuple)이라 부르고, 세로 한 줄을 열(Column, 또는 Field/Attribute)이라 부릅니다. 그리고 RDBMS의 영혼이라 할 수 있는 것이 바로 키(Key)입니다.

키(Key)의 종류
키 종류설명
Primary Key (PK)각 행을 유일하게 식별하는 키. NULL 불가, 중복 불가. 테이블당 1개.
Foreign Key (FK)다른 테이블의 PK를 참조하는 키. 관계(Relation)를 만드는 핵심.
Unique Key (UK)중복은 허용되지 않지만 NULL은 가능한 키. 여러 개 지정 가능.
Composite Key두 개 이상의 컬럼을 조합하여 만든 키.
3. ACID: 데이터베이스의 4대 약속

은행에서 1만 원을 송금했는데 돈은 빠져나갔지만 받는 사람 계좌에는 입금되지 않는다면? 데이터베이스에 가장 치명적인 사고입니다. 이런 일이 일어나지 않도록 RDBMS가 반드시 지켜야 하는 네 가지 속성이 있는데, 앞 글자만 따서 ACID라고 부릅니다.

A — Atomicity (원자성)

하나의 트랜잭션은 "전부 성공"하거나 "전부 실패"해야 합니다. 송금 트랜잭션에서 출금만 되고 입금이 안 되는 중간 상태는 절대 허용되지 않습니다.

C — Consistency (일관성)

트랜잭션 전후로 데이터베이스의 무결성 제약 조건은 항상 만족되어야 합니다. PK 중복, FK 위반 등은 일어나선 안 됩니다.

I — Isolation (격리성)

동시에 실행되는 트랜잭션들이 서로 간섭하지 않아야 합니다. 다른 트랜잭션의 중간 상태가 보여서는 안 됩니다.

D — Durability (지속성)

트랜잭션이 성공적으로 커밋(commit)되면, 시스템이 다운되더라도 그 결과는 영구적으로 보존되어야 합니다.

4. SQL: 데이터베이스와 대화하는 언어

RDBMS와 소통하기 위한 표준 언어가 SQL(Structured Query Language)입니다. SQL은 사용 목적에 따라 크게 세 가지로 나뉩니다.

DDL · DML · DCL
분류주요 명령어와 용도
DDL (정의)
Data Definition
CREATE / ALTER / DROP
테이블, 인덱스, 스키마 등 구조를 정의·변경·삭제
DML (조작)
Data Manipulation
SELECT / INSERT / UPDATE / DELETE
실제 데이터를 조회하고 변경
DCL (제어)
Data Control
GRANT / REVOKE / COMMIT / ROLLBACK
권한 관리 및 트랜잭션 제어
기본 SQL 예시-- 1. 테이블 생성 (DDL) CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE ); -- 2. 데이터 삽입 (DML) INSERT INTO users (id, name, email) VALUES (1, 'Marvin', 'm@test.com'); -- 3. 데이터 조회 (DML) SELECT name, email FROM users WHERE id = 1;
5. 인덱스(Index): 검색 속도의 비밀

책의 맨 뒤에 있는 "찾아보기"를 떠올려 보시기 바랍니다. 책 전체를 처음부터 끝까지 읽지 않고도 "데이터베이스"라는 단어가 몇 페이지에 있는지 단숨에 찾을 수 있습니다. 데이터베이스 인덱스(Index)가 정확히 같은 역할을 합니다.

B-TREE 인덱스 구조 (단순화)
50
↙ ↘
20
80
↙ ↓ ↘
10
35
65
95
대부분의 RDBMS는 B-Tree(또는 B+Tree) 구조로 인덱스를 만듭니다. 100만 건의 데이터에서도 단 몇 번의 비교만으로 원하는 값을 찾을 수 있습니다.
⚠️ 인덱스의 양면성

인덱스는 SELECT 속도를 극적으로 높여주지만, INSERT/UPDATE/DELETE 속도는 떨어뜨립니다. 데이터가 변경될 때마다 인덱스도 함께 재정렬되어야 하기 때문입니다. 또한 인덱스 자체가 디스크 공간을 차지합니다. "모든 컬럼에 인덱스를 거는 것"은 초보자가 가장 흔히 저지르는 실수입니다.

6. 트랜잭션(Transaction)과 락(Lock)

트랜잭션(Transaction)"논리적으로 하나의 작업으로 묶이는 작업의 단위"입니다. 앞서 설명드린 송금 예시처럼, 출금과 입금은 따로따로 일어나서는 안 되는 하나의 트랜잭션입니다.

트랜잭션 처리 흐름BEGIN; -- 트랜잭션 시작 UPDATE account SET balance = balance - 10000 WHERE user_id = 1; -- A의 출금 UPDATE account SET balance = balance + 10000 WHERE user_id = 2; -- B의 입금 COMMIT; -- 둘 다 성공하면 영구 저장 -- 만약 중간에 오류가 나면 ROLLBACK

여러 트랜잭션이 동시에 같은 데이터에 접근할 때 충돌을 막기 위해 사용하는 것이 락(Lock)입니다. 다만 락은 잘못 쓰면 두 트랜잭션이 서로의 락을 기다리며 영원히 멈추는 데드락(Deadlock)을 만듭니다. 그래서 RDBMS는 격리 수준(Isolation Level)을 통해 동시성과 일관성 사이에서 균형을 잡습니다.

격리 수준특징
READ UNCOMMITTED가장 낮은 수준. 커밋되지 않은 데이터도 읽음(Dirty Read 발생).
READ COMMITTED커밋된 데이터만 읽음. Oracle, PostgreSQL 기본값.
REPEATABLE READ같은 트랜잭션 내 동일 쿼리는 항상 같은 결과. MySQL 기본값.
SERIALIZABLE가장 엄격. 트랜잭션을 순차적으로 실행하는 효과.
7. 정규화(Normalization): 깔끔한 DB 설계의 기본

같은 데이터를 여기저기 중복해서 저장하면 어떤 일이 벌어질까요? 한 곳을 수정하고 다른 곳을 빠뜨리는 순간 데이터의 일관성이 무너집니다. 이런 문제를 이상 현상(Anomaly)이라고 부르며, 이를 방지하기 위해 테이블을 쪼개는 과정이 바로 정규화(Normalization)입니다.

1NF
제1정규형: 원자성
모든 컬럼은 더 이상 쪼갤 수 없는 원자값(Atomic Value)을 가져야 합니다. "취미: 독서, 영화, 게임" 같은 값은 금지됩니다.
2NF
제2정규형: 부분 함수 종속 제거
기본키의 일부에만 종속되는 컬럼이 없어야 합니다. 복합키 테이블에서 자주 등장하는 문제입니다.
3NF
제3정규형: 이행 함수 종속 제거
기본키가 아닌 컬럼이 다른 일반 컬럼에 종속되어서는 안 됩니다. 일반적인 시스템은 보통 3NF까지 정규화합니다.
💡 실무 팁: 정규화와 반정규화

정규화는 데이터 무결성을 위한 것이지만, JOIN이 많아져 성능을 떨어뜨릴 수 있습니다. 그래서 실무에서는 의도적으로 중복을 허용하는 반정규화(Denormalization)를 쓰기도 합니다. 정답은 없으며, "정규화로 시작해서 필요할 때만 반정규화한다"가 일반적인 원칙입니다.

8. SQL vs NoSQL: 무엇을 언제 써야 할까

2010년대 이후 빅데이터와 클라우드의 흐름과 함께 NoSQL(Not Only SQL)이라는 새로운 패러다임이 등장했습니다. 정형화된 테이블이 아닌, 더 유연한 구조로 데이터를 저장하는 방식입니다.

비교 항목SQL (RDBMS)
데이터 구조고정된 스키마, 테이블 기반
대표 제품MySQL, PostgreSQL, Oracle, MS SQL
장점강력한 무결성, 복잡한 JOIN, ACID 보장
적합 영역금융, ERP, 회계 등 정확성이 중요한 시스템
비교 항목NoSQL
데이터 구조유연한 스키마 (Document, Key-Value, Graph 등)
대표 제품MongoDB, Redis, Cassandra, DynamoDB
장점수평 확장 용이, 대용량 처리, 빠른 개발
적합 영역로그, 실시간 분석, 소셜미디어, IoT 데이터
9. 한 단계 더: DB는 결국 디스크 위에 살아있습니다

여기까지가 일반적인 데이터베이스 입문서의 끝입니다. 그러나 한 단계 더 깊이 들어가면 흥미로운 진실을 마주합니다. 바로 DB의 모든 성능은 결국 그 아래 있는 스토리지(Storage)에 달려있다는 사실입니다.

데이터베이스가 행을 한 줄 INSERT 하는 순간, 실제로는 그 데이터가 메모리(Buffer Pool)에 쓰이고, 트랜잭션 로그(WAL, Write-Ahead Log)가 디스크에 기록되며, 최종적으로 페이지 단위로 데이터 파일이 갱신됩니다. 즉 "DB의 쓰기 속도는 곧 디스크의 fsync 속도"라고 해도 과언이 아닙니다.

🔍 NVMe와 데이터베이스

최근 몇 년 사이 NVMe SSD가 데이터센터의 표준이 되면서, 기존 SATA SSD나 HDD를 가정한 DB 엔진들의 설계가 도전받고 있습니다. FDP(Flexible Data Placement)처럼 호스트가 데이터의 배치를 직접 제어하는 기술이 등장하면서, DB와 스토리지가 더욱 긴밀하게 협업해 WAF(Write Amplification Factor)를 줄이고 수명과 성능을 동시에 끌어올리는 흐름이 만들어지고 있습니다. DB 엔지니어가 NVMe 명령어 수준까지 이해하면 보이는 풍경이 완전히 달라집니다.

10. 마치며: 기본기를 다지는 사람이 결국 멀리 갑니다
오늘 정리한 핵심 키워드 10가지
데이터베이스(DB)와 DBMS의 차이
관계형 데이터베이스(RDBMS)와 테이블 구조
Primary Key, Foreign Key의 의미와 역할
ACID 4대 속성 (Atomicity, Consistency, Isolation, Durability)
SQL의 3대 분류 (DDL, DML, DCL)
인덱스(Index)와 B-Tree 구조
트랜잭션(Transaction)과 락(Lock)
격리 수준(Isolation Level)
정규화(Normalization)와 반정규화
SQL과 NoSQL의 선택 기준
기본은 결코 낡지 않습니다

생성형 AI, 벡터 DB, 분산 트랜잭션 등 데이터베이스 분야에는 매년 새로운 기술이 쏟아집니다. 그러나 그 모든 신기술은 결국 오늘 정리한 ACID, 인덱스, 트랜잭션, 정규화라는 단단한 토대 위에 지어집니다. 화려한 신기술에 휩쓸리기 전에, 가끔은 이렇게 가장 기본으로 돌아가 보시기 바랍니다. 진짜 실력은 바로 그 자리에서 자랍니다.

#데이터베이스 #Database기초 #RDBMS #SQL입문 #ACID #트랜잭션 #인덱스 #정규화 #NoSQL #백투더베이직
반응형
LIST