Chapter 1. Introduction to DBMS

핵심 요약: 데이터베이스 관리 시스템(DBMS)은 파일 시스템의 데이터 중복, 비일관성, 접근 어려움, 원자성·동시성·보안 문제를 해결하기 위해 등장했다. 데이터를 구조화된 모델(관계형, E-R, 객체기반 등)로 관리하며, DML/DDL을 통해 조작·정의하고, 트랜잭션 관리·동시성 제어·장애 복구를 통해 데이터의 정확성과 가용성을 보장한다.


1. 데이터베이스 시스템의 목적

데이터베이스 시스템은 초기 파일 처리 시스템(file-processing system)의 한계를 극복하기 위해 개발되었다. 파일 처리 시스템은 다음과 같은 문제를 가진다:

문제설명
데이터 중복(redundancy)과 비일관성(inconsistency)동일 데이터가 여러 파일에 중복 저장되어 불일치 발생
데이터 접근 어려움새로운 조회 요구마다 별도 프로그램 작성 필요
데이터 고립(isolation)데이터가 여러 파일·형식에 흩어져 검색이 어려움
무결성(integrity) 문제일관성 제약조건(예: 잔액 ≥ 0)의 추가·변경이 어려움
원자성 문제장애 시 부분 실행 상태가 남아 데이터 비일관성 유발
동시(concurrent) 접근 이상여러 사용자가 동시에 접근하면 비일관성 발생 가능
보안 문제세밀한 접근 제어가 어려움

파일 시스템의 구체적 예시:

  • 데이터 중복: Student_info.txtStudent_takes_classes.txt에 학생 이름·주소 등이 중복 저장됨 → 한쪽만 수정하면 불일치 발생
  • 원자성 문제: 계좌 A에서 B로 이체 시, A에서 차감 후 시스템 크래시가 발생하면 B에는 입금되지 않아 돈이 사라짐 → 완전히 수행되거나 전혀 수행되지 않아야 함
  • 동시 접근 이상: 잔액 100원인 계좌에서 두 사람이 동시에 50원 인출 → 둘 다 잔액 확인(100원) 후 인출하면 잔액이 50원(올바른 값: 0원)
  • 보안 문제: 급여 담당자에게는 급여 정보만, 일반 직원에게는 주소 정보만 공개하려 해도 파일 수준에서는 세밀한 접근 제어가 어려움

DBMS는 이러한 문제들을 체계적으로 해결하는 소프트웨어 시스템이다.

DBMS 적용 분야

분야관리 데이터 예시
대학학생 정보, 수강 신청, 성적, 시간표
은행고객 정보, 계좌, 대출, 거래 내역
항공사예약, 비행 스케줄, 좌석 배정
온라인 쇼핑판매 데이터, 주문 추적, 상품 카탈로그
통신통화 기록, 요금 청구, 네트워크 관리
인사 관리직원 정보, 급여, 세금 공제

2. 데이터 추상화 수준

데이터베이스 시스템은 복잡성을 숨기기 위해 세 가지 추상화 수준을 제공한다. 각 수준은 서로 다른 사용자 그룹을 대상으로 하며, 위로 갈수록 세부사항이 감추어진다.

물리적 수준 (Physical Level)

가장 낮은 수준의 추상화로, 데이터가 실제로 어떻게 저장되는지를 기술한다. 레코드가 디스크의 어느 블록에 배치되는지, 인덱스 구조는 B+트리인지 해시인지 등 저장 세부사항을 다룬다. 시스템 개발자나 DBA가 성능 튜닝 시 관여하는 수준이다.

예: instructor 레코드가 연속 블록에 dept_name 기준으로 클러스터링되어 저장됨

논리적 수준 (Logical Level)

어떤 데이터가 저장되어 있고, 데이터 간 관계가 무엇인지를 기술한다. 물리적 세부사항은 숨기면서, 전체 데이터베이스의 구조를 정의한다. DBA와 응용 프로그래머가 주로 사용하는 수준이다.

예: instructor 테이블에 ID, name, dept_name, salary 컬럼이 있고, dept_namedepartment 테이블을 참조함

CREATE TABLE instructor (
    ID        VARCHAR(5),
    name      VARCHAR(20),
    dept_name VARCHAR(20),
    salary    NUMERIC(8,2)
);

뷰 수준 (View Level)

가장 높은 수준의 추상화로, 전체 데이터베이스의 일부만 선택적으로 보여준다. 일반 사용자(end user)가 접하는 수준이며, 동일한 데이터베이스에 대해 여러 개의 뷰가 존재할 수 있다. 보안과 편의성을 동시에 제공한다.

예: 학생은 자신의 수강 내역만, 교수는 담당 과목의 수강생 목록만 볼 수 있음

세 수준의 관계

수준기술 대상주요 사용자예시
뷰 수준데이터의 일부일반 사용자”내 수강 과목 목록”
논리적 수준전체 데이터 구조와 관계DBA, 응용 프로그래머CREATE TABLE instructor(...)
물리적 수준저장 방식, 인덱스, 파일 구조시스템 개발자B+트리 인덱스, 클러스터링

스키마(Schema)란?

스키마는 데이터베이스의 전체적인 **설계(구조)**를 의미한다. 프로그래밍 언어에서 변수의 타입 선언에 해당하며, 실제 저장된 데이터(인스턴스)와 구분된다.

각 추상화 수준마다 대응하는 스키마가 존재한다:

  • 물리적 스키마 (Physical Schema): 물리적 수준에서의 데이터베이스 설계. 파일 구조, 인덱스, 저장 방식을 정의한다.
  • 논리적 스키마 (Logical Schema): 논리적 수준에서의 데이터베이스 설계. 테이블, 컬럼, 관계, 제약조건을 정의한다. 프로그램에 가장 큰 영향을 미치는 스키마다.
  • 서브스키마 / 뷰 스키마 (Subschema): 뷰 수준에서의 설계. 특정 사용자 그룹에게 보여줄 데이터의 범위를 정의한다.
비유스키마인스턴스
프로그래밍int x; (타입 선언)x = 5 (실제 값)
데이터베이스테이블 구조 정의테이블에 저장된 실제 행들

스키마는 자주 변경되지 않지만, 인스턴스는 데이터가 삽입·수정·삭제될 때마다 바뀐다.

물리적 데이터 독립성 (Physical Data Independence)

논리적 스키마를 변경하지 않고도 물리적 스키마를 수정할 수 있는 능력이다. 예를 들어, 인덱스를 B+트리에서 해시로 바꾸거나 저장 장치를 HDD에서 SSD로 교체하더라도 SELECT * FROM instructor 같은 SQL 쿼리는 수정 없이 동일하게 동작한다. 이것이 추상화 수준을 나누는 핵심적인 이유다.


3. 데이터 모델

데이터 모델은 데이터, 데이터 간 관계, 데이터 의미, 일관성 제약조건을 기술하기 위한 개념적 도구의 모음이다.

  • 관계형 모델 (Relational Model): 테이블(릴레이션)의 집합으로 데이터를 표현한다. 가장 널리 사용되는 모델이다.
  • 개체-관계 모델 (Entity-Relationship Model): 개체(entity)와 개체 간 관계(relationship)의 집합으로 표현한다. 주로 데이터베이스 설계에 사용된다.
  • 객체 기반 데이터 모델 (Object-Based Data Models): 객체 지향 개념을 활용한다 (Object-Relational 등).
  • 반구조화 데이터 모델 (Semistructured Data Model): XML 등 스키마가 유연한 데이터를 표현한다. 각 데이터 항목이 자체 속성 집합을 가질 수 있다.

4. 데이터베이스 언어

DML (Data Manipulation Language)

데이터를 접근하고 조작하기 위한 언어다. 두 가지 유형이 있다:

  • 절차적 DML (Procedural): 어떤 데이터가 필요하고, 그 데이터를 어떻게 가져올지를 명시한다.
  • 선언적 DML (Declarative / Nonprocedural): 어떤 데이터가 필요한지만 명시하고, 어떻게 가져올지는 시스템에 맡긴다. SQL이 대표적이다.

쿼리(Query): 정보 검색을 요청하는 문장이다. DML의 쿼리 관련 부분을 **쿼리 언어(Query Language)**라 한다.

DDL (Data Definition Language)

데이터베이스 스키마를 정의하기 위한 언어다. DDL 컴파일러는 **데이터 사전(Data Dictionary)**에 메타데이터를 저장한다. 데이터 사전은 다음을 포함한다:

  • 데이터베이스 스키마
  • 무결성 제약조건 (도메인 제약, 참조 무결성, 단언, 권한)
  • 저장 구조와 접근 방법에 대한 정보

데이터베이스 접근 API (미리보기)

응용 프로그램은 DML 문을 프로그래밍 언어 내에서 실행할 수 있다. 대표적으로 Java의 JDBC가 있다:

// JDBC를 이용한 데이터베이스 접근 예시
public static void JDBCexample(String dbid, String userid, String passwd) {
    try (Connection conn = DriverManager.getConnection(
            "jdbc:oracle:thin:@db.yale.edu:2000:univdb", userid, passwd);
         Statement stmt = conn.createStatement()) {
 
        ResultSet rset = stmt.executeQuery(
            "select dept_name, avg(salary) " +
            "from instructor group by dept_name");
 
        while (rset.next()) {
            System.out.println(rset.getString("dept_name") + " " +
                             rset.getFloat(2));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

ODBC(C/C++/C#), JDBC(Java) 등 다양한 API가 존재하며, 자세한 내용은 Ch5에서 다룬다.


5. 대학 데이터베이스 예시 (University Database Example)

대학 데이터베이스의 전형적인 응용 프로그램:

  • 학적 관리: 학생·교수·과목 정보 추가/수정/삭제
  • 수강 신청: 학생의 수강 등록, 시간표 자동 생성, 선수과목 확인
  • 성적 처리: 성적 부여, 학점(GPA) 자동 계산
  • 과목 관리: 강좌 개설, 분반 배정, 강의실·시간 배정

이 예시는 이후 장에서 지속적으로 사용되는 핵심 스키마다.


6. 데이터베이스 설계

데이터베이스 설계의 주요 과제는 스키마 설계, 물리적 스키마 설계, 그리고 논리적 설계다. 두 가지 주요 접근법이 있다:

  • 개체-관계(E-R) 모델 (Ch6): 그래픽 표기법으로 요구사항을 모델링
  • 정규화 이론 (Ch7): 함수 종속성 등 형식적 알고리즘으로 스키마 정제

E-R 모델을 이용한 설계

  • 개체(Entity): 다른 객체와 구별 가능한 사물이나 객체. 속성(attribute)의 집합으로 기술된다.
  • 관계(Relationship): 여러 개체 간의 연관.
  • 대학 데이터베이스 예시: instructor, student, department 등의 개체 집합과 이들 간의 관계(member, advisor, takes 등)를 정의한다.
  • E-R 다이어그램 예시: instructor ◇─member─▷ department (교수가 학과에 소속)

정규화 (Normalization)

잘못된 릴레이션 설계의 중복을 체계적으로 제거하는 이론이다.

잘못된 설계 예시: instructor와 department를 하나의 테이블로 합치는 경우:

IDnamedept_namesalarybuildingbudget
10101SrinivasanComp. Sci.65000Taylor100000
12121WuFinance90000Painter120000
15151MozartMusic40000Packard80000
22222EinsteinPhysics95000Watson70000
33456GoldPhysics87000Watson70000

→ Physics 학과의 building(Watson)과 budget(70000)이 중복 저장됨. 만약 budget을 변경하면 모든 Physics 교수 행을 수정해야 하며, 하나라도 빠뜨리면 비일관성이 발생한다.

정규화는 이를 instructor와 department 두 개의 릴레이션으로 분리하여 중복과 비일관성을 방지한다.


7. 저장 관리자 (Storage Manager)

저장 관리자는 데이터베이스에 저장된 하위 수준 데이터와 응용 프로그램/쿼리 사이의 인터페이스를 제공한다. 구성 요소는 다음과 같다:

  • 권한 및 무결성 관리자: 접근 권한과 제약조건 확인
  • 트랜잭션 관리자: 시스템 장애에도 일관성 유지
  • 파일 관리자: 디스크 저장 공간 할당 관리
  • 버퍼 관리자: 디스크 ↔ 메인 메모리 간 데이터 캐싱

저장 관리자의 주요 과제 (Issues):

  • Storage access: 디스크와 메모리 간 효율적 데이터 전송
  • File organization: 레코드를 디스크에 효율적으로 배치
  • Indexing and hashing: 빠른 데이터 검색을 위한 인덱스 구조

저장 관리자가 다루는 데이터 구조: 데이터 파일, 데이터 사전, 인덱스.


8. 쿼리 처리

쿼리 처리 과정은 다음과 같다:

  1. 파싱 및 변환: SQL 쿼리를 관계 대수 표현으로 변환
  2. 최적화: 가장 비용이 낮은 실행 계획(evaluation plan) 선택
  3. 평가(Evaluation): 선택된 계획에 따라 쿼리 실행

쿼리 최적화는 동일한 결과를 내는 여러 실행 방법 중 가장 효율적인 것을 찾는 과정이다.


9. 트랜잭션 관리

**트랜잭션(Transaction)**이란 데이터베이스 응용에서 하나의 논리적 기능을 수행하는 연산의 집합이다.

트랜잭션 관리의 핵심 요구사항:

  • 원자성 (Atomicity): 트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 한다.
  • 일관성 (Consistency): 트랜잭션 실행 전후 데이터의 일관성이 유지되어야 한다.
  • 지속성 (Durability): 완료된 트랜잭션의 결과는 장애가 발생해도 유지되어야 한다.

동시성 제어 (Concurrency Control)

여러 트랜잭션이 동시에 실행될 때 데이터 일관성을 보장하기 위한 메커니즘이다. 동시 실행이 필요한 이유는 처리량(throughput)과 응답 시간(response time) 향상이다.

Lock 기반 제어 예시:

  • User1이 데이터 항목 A에 lock을 획득 → 읽기/쓰기 수행
  • User2가 동일한 A에 접근 시도 → lock이 해제될 때까지 wait
  • User1이 작업 완료 후 unlock → User2가 lock을 획득하여 작업 수행

예: 판매 데이터베이스에서 동일 상품의 재고를 두 트랜잭션이 동시에 수정하려 할 때, lock이 없으면 재고 수량이 잘못될 수 있다.

장애 복구 (Recovery)

시스템 장애(전원 차단, 디스크 충돌 등) 발생 시 장애 이전의 일관된 상태로 데이터베이스를 복구하는 메커니즘이다. 복구 관리자(Recovery Manager)가 이를 담당한다.

메모리 vs 안정 저장소 (Stable Storage):

  • 메인 메모리: 빠르지만 휘발성 — 크래시 시 데이터 손실
  • 안정 저장소 (디스크): 느리지만 비휘발성 — 크래시에도 데이터 유지

크래시가 발생하면 메모리에만 있던 변경사항이 디스크에 반영되지 않을 수 있다. 이를 해결하기 위해 로그(log) 기반 복구를 사용한다:

  1. 모든 변경 연산을 로그에 먼저 기록 (write-ahead logging)
  2. 크래시 발생 시, 로그를 읽어 완료된 트랜잭션은 재수행(redo), 미완료 트랜잭션은 취소(undo)

10. 데이터베이스 아키텍처

데이터베이스 시스템의 구조는 다음으로 구성된다:

  • 2-Tier 아키텍처: 응용 프로그램이 클라이언트에서 직접 DB 서버와 통신
  • 3-Tier 아키텍처: 클라이언트 → 응용 서버 → 데이터베이스 서버

데이터베이스 관련 역할:

  • 데이터베이스 관리자 (DBA): 스키마 정의, 저장 구조·접근 방법 정의, 권한 부여, 무결성 제약 설정, 백업·복구 등을 담당한다.

11. 데이터베이스 시스템의 역사

시대주요 발전
1950s~초 1960s자기 테이프, 순차 접근
후 1960s~1970s하드디스크, 네트워크/계층형 모델
1970s~초 1980s관계형 모델 등장 (E.F. Codd), IBM System R, UC Berkeley Ingres
1980sSQL 표준화, 병렬/분산 DB, 객체지향 DB
1990s웹 기반 DB 응용 폭발적 성장
2000sXML, 자동 DB 관리
2010s빅데이터, NoSQL, 클라우드 DB, 메인 메모리 DB

출처: Database System Concepts, 7th Edition (Silberschatz, Korth, Sudarshan)