Database System Foundation
이 페이지는 Database, DBMS, Database System 같은 기본 정의에서 시작해, 데이터베이스 접근 방식이 왜 단순 파일 저장과 다른지, 그리고 Transaction이 왜 all-or-nothing이어야 하는지를 다룬다. 후속 concept인 3-schema architecture와 ER model은 이 기초 위에 선다. DBMS 성능이 disk I/O에 좌우된다는 점에서 OS Memory Management와도 보조 기억장치 관점에서 맞닿아 있다.
기본 정의
| 용어 | 정의 |
|---|---|
| Data | 기록될 수 있고 암묵적 의미를 가지는 알려진 사실[1] |
| Information | Data + Value — 가치(의미)가 있는 데이터[1:1] |
| Database | 연관된 Data들의 모임[1:2] |
| Mini-world | 실세계의 일부를 표현. 데이터베이스가 모델링하는 현실의 부분 (예: 대학의 학생 성적)[2] |
| DBMS | 데이터베이스를 생성·관리하는 소프트웨어 시스템[1:3] |
| Database System | 데이터베이스와 DBMS에 대한 총칭[1:4]. 때로는 애플리케이션도 포함[3] |
| Database Catalog (Meta-data) | 데이터베이스에 대한 모든 설명을 담는 데이터 구조 (보통 테이블)[1:5] |
Mini-world의 변화도 데이터베이스에 반영된다.[4] Mini-world를 가져오는 이유는 현실 세계의 일부를 데이터로 사용함으로써 발생하는 문제를 해결하기 위해서다.[2:1]
DBMS 성능 결정 요소
Disk I/O가 DBMS 성능을 결정한다.[5] 방대한 양의 데이터를 제한된 메모리로 관리하므로, 보조 저장 매체(하드디스크)에서 데이터를 얼마나 효율적으로 가져오느냐가 핵심이다. 따라서 DBMS 설계는 disk I/O 패턴과 저장 구조(index 등)에 크게 좌우된다고 볼 수 있다.[6]
SQL 중첩이 가능한 이유는 닫힌 성질 — 연산 결과가 다시 relation이 되는 성질 — 때문이다.[7] ER model 페이지의 Relational Algebra 절에서 이 성질을 다시 참조한다.
Database system의 경계
flowchart TD
U[Users / Programmers] --> A[Application programs / queries]
A --> Q[DBMS: query and program processing]
Q --> X[DBMS: stored-data access]
X --> M[(Stored database definition / metadata)]
X --> D[(Stored database)]Database system은 저장 데이터만이 아니라 application/query, DBMS software, metadata를 함께 포함한다. metadata는 DBMS가 데이터 구조와 제약을 해석하는 근거이며, 사용자 프로그램과 저장 데이터를 직접 같은 것으로 보지 않게 한다고 볼 수 있다.[6:1]
데이터베이스 접근 방식의 핵심 특성
| 특성 | 설명 |
|---|---|
| 자기 기술성 (Self-describing) | DBMS 카탈로그(=메타데이터)에 데이터베이스 설명이 저장된다. 데이터 구조·유형·제약 조건을 catalog에 둬 DBMS가 서로 다른 응용을 처리할 수 있다.[8] |
| 프로그램-데이터 독립성 | 데이터 구조/저장 방식을 변경해도 DBMS 접근 프로그램을 변경할 필요가 없다. 원문 메모는 그 이유를 프로그램 내부 매핑 같은 것을 바꾸면 되기 때문이라고 적는다.[9] |
| 데이터 추상화 | 데이터 모델로 저장 세부 사항을 숨기고 사용자에게 개념적 뷰를 제공한다. 프로그램은 저장 세부 대신 데이터 모델 구성요소를 참조한다.[10] |
| 여러 데이터 뷰 지원 | 각 사용자는 자신에게 관심 있는 데이터만 볼 수 있다 (같은 데이터를 사용자별로 다르게 노출).[11] |
| 공유 데이터와 다중 사용자 트랜잭션 처리 | 동시 사용자 집합이 데이터를 검색·업데이트한다. 동시성 제어는 각 트랜잭션이 올바르게 실행되거나 중단되도록 보장하고, 복구 시스템은 완료된 트랜잭션 효과가 영구히 기록되도록 한다.[12] |
Transaction — All or Nothing
Transaction은 데이터베이스에서 일어나는 하나의 논리적 작업 단위다. Multi-user transaction은 하나의 operation 집합이며, all or nothing으로 처리된다.[13] Transaction의 모든 작업이 완료되지 않으면 수행한 모든 작업은 취소되어야 한다.[13:1] 즉 다 수행하거나 아무것도 수행하지 않아야 한다(atomic).[14] 또한 각 트랜잭션이 서로 고립되어 수행되는 것처럼 보장한다(고립성, isolation).[14:1]
OLTP(Online Transaction Processing)는 데이터베이스 응용의 주요 부분으로, 매초 수백 개의 동시 트랜잭션을 실행할 수 있다.[12:1]
데이터베이스 사용자 범주
데이터베이스 사용자는 "장면의 배우들"(데이터베이스 콘텐츠 사용/제어, 응용 설계/개발/유지)과 "장면 뒤의 노동자들"(DBMS 소프트웨어/도구 설계·개발·운영)로 나뉜다.[15]
장면의 배우들
| 사용자 유형 | 역할 |
|---|---|
| DBA (Database Administrator) | 접근 권한 관리, 사용 조정·모니터링, 소프트웨어/하드웨어 자원 확보[15:1] |
| Database 설계자 | 데이터베이스의 콘텐츠, 구조, 제약 조건, 기능/트랜잭션 정의[15:2] |
| 일반 최종 사용자 (Casual) | 필요할 때 가끔 접근[16] |
| 파라메트릭/초보 사용자 | 미리 정의된 "canned transactions" 사용. 은행 창구 직원, 예약 직원, 모바일 앱 사용자 등. 최종 사용자의 큰 부분[16:1] |
| 숙련 사용자 (Sophisticated) | 비즈니스 분석가, 과학자, 엔지니어. 시스템 기능에 익숙, 데이터베이스와 긴밀히 작동하는 도구 사용[16:2] |
| 독립 사용자 (Stand-alone) | 개인 데이터베이스 유지. 세금 프로그램 사용자, 개인 사진/영상 데이터베이스[16:3] |
| 시스템 분석가/애플리케이션 개발자 | 요구사항을 만족하는 canned transaction 포함 애플리케이션 설계·구현·테스트·디버그[16:4] |
장면 뒤의 노동자들
- 시스템 설계자 및 구현자 — DBMS 패키지 설계·구현. 애플리케이션/언어 컴파일러/운영체제와 인터페이스 테스트·디버그[17]
- 도구 개발자 — 모델링/설계, 성능 모니터링, 프로토타입, UI 생성 소프트웨어 개발[17:1]
- 운영자 및 유지보수 직원 — 하드웨어/소프트웨어 환경 운영·유지[17:2]
DBMS 접근 방식의 이점
- 중복 제어 — 데이터 저장/개발/유지보수 중복 제어 (정규화).[18][19]
- 불법적 접근 통제 — DBA 직원만 특권 명령·기능 사용 가능.[18:1]
- 영구 저장 제공 — 프로그램 객체에 대한 영구 저장.[18:2]
- 효율적 쿼리 처리 — 저장 구조(index 등) 제공.[18:3]
- 쿼리 최적화 — Relational Algebra 기반. A는 100번 실행하는 결과를 B는 10번 실행으로 같은 결과(동치)가 나오도록 변환.[18:4]
- 백업/복구 서비스.[18:5]
- 다양한 인터페이스 제공.[18:6]
- 복잡한 관계 표현.[18:7]
- 무결성 제약 조건 강제.[18:8]
- 규칙과 트리거로 추론·액션 도출.[18:9]
추가로 표준 준수 가능성, 애플리케이션 개발 시간 감소, 데이터 구조 변경 유연성, 최신 정보 가용성, 규모의 경제 같은 의미도 있다.[20]
데이터베이스를 사용하지 말아야 할 때
- 높은 초기 투자 비용과 추가 하드웨어 필요성
- 보안/동시성 제어/복구/무결성 기능 제공에 대한 오버헤드
- 데이터베이스와 응용이 간단·명확·변경 없으면 DBMS가 불필요할 수 있음
- 다중 사용자 접근이 필요하지 않으면 불필요할 수 있음[21]
데이터베이스 기술의 역사적 발전
| 시기 | 모델 | 특징 |
|---|---|---|
| 1960s 중반~1970s | 계층/네트워크 모델 (IBM IMS) | conceptual design과 physical design이 밀접하게 묶여 있음[22] |
| 1970 도입, 1980s 초 상용화 | 관계형 모델 (E.F. Codd, 집합 기반) | conceptual design과 physical design이 독립적[22:1] |
| 1980s 후반~1990s | 객체 지향 DBMS | 복잡한 데이터 처리 도입, 크게 확산되지는 않음[22:2] |
| 최근 | 빅데이터 저장/NoSQL/클라우드 | 대규모 분산 클러스터, Not Only SQL[23] |
종합
Database System Foundation의 핵심은, 관련된 데이터를 소프트웨어(DBMS)로 관리해 단순 파일 저장과 구분되는 자기 기술성·독립성·추상화·다중 뷰·동시성 제어를 제공하는 데 있다고 볼 수 있다. Transaction의 "all or nothing"은 단순한 실패 회피가 아니라 데이터 일관성의 기본 단위로 읽힌다. 성능의 핵심이 disk I/O이므로, DBMS 활용·설계는 저장 구조와 I/O 패턴 관점에서 접근해야 한다는 것이 이 페이지가 종합하는 지점이다.[6:2]
흔히 놓치는 지점
- Catalog(메타데이터)를 두지 않고 애플리케이션 코드에 데이터 구조를 하드코딩하면 독립성을 잃는다.
- 무분별한 데이터 중복을 허용하면 정규화 없이 저장 비용과 일관성 문제가 커진다.
- Transaction의 all-or-nothing을 무시하고 부분 실패를 허용하면 무결성이 깨진다.
- 다중 사용자 접근에 동시성 제어(Lock 등)를 빼먹으면 race condition으로 데이터가 훼손된다.
- Disk I/O 패턴을 무시하고 인덱스 없이 대량 데이터를 매번 full scan하는 경우가 있다.
- DBMS 오버헤드(보안·동시성·복구·무결성)가 필요 없는 단순·고정 응용에 무리해 DBMS를 도입하는 경우가 있다.
관련
- 3-schema architecture — 자기 기술성·독립성·추상화를 구체화하는 아키텍처.
- ER model — 개념적 데이터 모델의 대표 예.
- OS Memory Management — Disk I/O와 저장 매체 관점에서 DBMS와 맞닿아 있다.
- DB 조회 읽기 성능 최적화 — Disk I/O 감소를 위한 InnoDB Buffer Pool, RAID, Replication 패턴.
출처
테스트 질문
- Database, DBMS, Database System의 정의 차이는 무엇인가?
- DBMS 성능이 Disk I/O에 의해 결정되는 이유는 무엇인가?
- Transaction의 "all or nothing"이 왜 필요한가? 부분 완료를 허용하면 어떤 문제가 생기는가?
- Catalog(메타데이터)가 없는 데이터 저장 방식의 문제점은 무엇인가?
- 데이터베이스를 사용하지 말아야 할 때는 언제인가?
개념정리.md — L10-26: "Database ... 연관된 Data들의 모임", "Data ... 기록될 수 있고 암묵적 의미를 가지는 알려진 사실", "Infomation ... Data+Value ... 가치(의미)가 있는 데이터", "DBMS ... 데이터베이스를 생성, 관리 가능한 소프트웨어 시스템", "Database System ... 데이터베이스와 DBMS에 대한 총칭", "Database Catalog(=Meta-Data) ... 데이터베이스에 대한 모든 설명을 담고있는 데이터구조" ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "미니월드(mini-world): 데이터베이스에 저장된 현실 세계의 일부", "현실 세계의 일부를 가져와 데이터로 사용함으로써 발생하는 문제를 해결함" ↩︎ ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — L52: "데이터베이스 시스템: DBMS 소프트웨어와 데이터 자체. 때로는 애플리케이션도 포함" ↩︎
개념정리.md — L17-19: "Mini-world ... 실세계의 일부를 표현 ... Mini-world의 변화도 데이터베이스에 반영" ↩︎
출처 매핑 미확인 — "DBMS 설계가 disk I/O 패턴에 좌우된다", "metadata가 사용자 프로그램과 저장 데이터를 분리한다", "성능의 핵심이 disk I/O이므로 저장 구조·I/O 패턴 관점에서 접근해야 한다"는 종합 해석은 source 개별 사실을 엮은 Wiki 차원의 해석이며 source에 이 문장 그대로는 없다. ↩︎ ↩︎ ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "DBMS 카탈로그에 특정 데이터베이스의 설명이 저장됨 ... 이를 통해 DBMS 소프트웨어가 서로 다른 데이터베이스 응용 프로그램을 처리할 수 있음" ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — L139-141: "프로그램-데이터 독립성 ... 데이터 구조와 저장 방식을 변경해도 DBMS 접근 프로그램을 변경할 필요가 없음", "프로그램 내부 매핑같은걸 바꾸면 되는거니까." ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "데이터 모델을 사용하여 저장 세부 사항을 숨기고 사용자에게 개념적 뷰를 제공" ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "각 사용자는 자신에게 관심 있는 데이터만을 볼 수 있음" ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "동시성 제어는 각 트랜잭션이 올바르게 실행되거나 중단되도록 보장", "복구 시스템은 완료된 각 트랜잭션의 효과가 데이터베이스에 영구히 기록되도록 함", "OLTP ... 매초 수백 개의 동시 트랜잭션을 실행할 수 있음" ↩︎ ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "Transaction = 데이터베이스에서 일어나는 하나의 논리적 작업 단위", "multi-user transaction = a set of operation = all or nothing", "Transaction의 모든 작업이 완료되지 않으면 수행한 모든 작업은 취소되어야 함" ↩︎ ↩︎
개념정리.md — L42-46: "Multi-User Transaction ... 다 수행하거나 아무것도 수행하지 않음(=atomic) ... 각 트랜잭션이 서로 고립되어 수행되는 것처럼 보장(고립성)" ↩︎ ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "데이터베이스 사용자는 두 가지 ... 장면의 배우들 ... 장면 뒤의 노동자들", "데이터베이스 관리자 (DBA)", "데이터베이스 설계자" ↩︎ ↩︎ ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — 최종 사용자 카테고리: 일반 사용자, 초보자/파라메트릭 사용자, 숙련된 사용자, 독립 사용자, 시스템 분석가/애플리케이션 개발자 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "시스템 설계자 및 구현자", "도구 개발자", "운영자 및 유지보수 직원", "애플리케이션, 언어 컴파일러, 운영 체제와의 인터페이스를 테스트하고 디버그" (L226) ↩︎ ↩︎ ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — DBMS 접근 방식의 이점 목록: 중복 제어, 불법적 접근 제한, 영구 저장, 효율적 쿼리 처리, 쿼리 최적화, 백업/복구, 다중 인터페이스, 복잡한 관계 표현, 무결성 제약, 규칙과 트리거 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
개념정리.md — L50-52: "Controlling Redundancy(중복성 제어)⭐ ... 데이터 저장, 개발, 유지보수 ... 정규화" ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "데이터베이스 접근 방식 사용의 추가적인 의미": 표준 준수, 애플리케이션 개발 시간 감소, 데이터 구조 변경 유연성, 최신 정보 가용성, 규모의 경제 ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "데이터베이스를 사용하지 말아야 할 때": 높은 초기 투자 비용, 보안/동시성/복구/무결성 오버헤드, 단순·명확·불변 응용, 다중 사용자 불필요 ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "conceptual design과 physical desaign이 밀접하게 묶여있음 ... 계층 및 네트워크 모델", "관계형 모델 ... conceptual design과 physical desaign이 독립적", "객체 지향 DBMS가 복잡한 데이터를 처리하기 위해 도입되었으나, 크게 확산되지 않음" ↩︎ ↩︎ ↩︎
1장 데이터베이스 및 데이터베이스 사용자.md — "빅데이터 저장 시스템 (분산된 대규모 컴퓨터 클러스터 사용)", "NoSQL 시스템 (Not Only SQL)", "대량의 데이터는 현재 클라우드에 저장되고 있으며" ↩︎