데이터베이스, 어떻게 설계하고 관리할까?

 

1. 데이터 추상화와 데이터 모델

 

데이터 추상화

데이터 추상화는 데이터를 관리할 때 사용자가 복잡한 물리적 세부 사항을 몰라도 되게 만드는 과정이다. 사용자는 데이터의 핵심 정보만 볼 수 있고, 데이터가 컴퓨터에 어떻게 저장되는지는 숨겨진다.

 

 

 

데이터 추상화의 주요 개념:

  • 억제(Suppression):
    • 데이터가 물리적으로 어떻게 저장되는지(디스크에 파일이 어떻게 배치되는지 등) 사용자는 알 필요가 없다.
  • 강조(Highlighting):
    • 사용자가 데이터를 이해하는 데 필요한 핵심 정보만 노출한다.
      예를 들어, 사용자는 학생의 이름과 학번만 볼 수 있고, 저장 위치나 세부 구조는 신경 쓰지 않아도 된다.
  • 사용자 맞춤 뷰 제공:
    • 각 사용자가 자신의 필요에 맞게 데이터를 볼 수 있다.
      예를 들어, 재무팀은 결제 정보만 보고, 마케팅팀은 고객의 구매 이력을 볼 수 있다.

 

 

 

 

 

데이터 모델

데이터 모델은 데이터베이스 구조를 정의하고 데이터를 다루는 규칙과 관계를 명확하게 기술한다.
쉽게 말하면 데이터베이스가 어떤 방식으로 데이터를 저장하고 표현할지 결정하는 틀이다.

데이터 모델의 분류:

  1. 개념적 데이터 모델
    • 현실 세계의 개념과 객체를 이해하기 쉽게 표현한다.
    • 예: 학생(Student)이라는 객체와 학생의 학번, 이름 같은 속성을 포함.
  2. 물리적 데이터 모델
    • 데이터가 실제로 (물리적으로) 저장되는 방법을 설명한다.
    • 예: 디스크에 데이터를 저장하는 방식, 데이터 인덱스 생성, 데이터 접근 경로.
  3. 표현적 데이터 모델
    • 사용자가 이해할 수 있는 수준에서 데이터를 표현한다.
    • 예: 관계형 모델에서 데이터를 테이블 형식(행과 열)으로 제공.

 

 

 

 

 

 

 

2. 스키마와 인스턴스

 

스키마(Schema)

  • 스키마는 데이터베이스의 구조와 틀을 정의한다. 위에서 설명했던 모델 역시 구조, 설계와 관련이 있지만 적용되는 범위가 다르다.
    모델은 데이터를 어떻게 구조화하고 다룰지에 대한 설계 철학과 틀이고,
    스키마는 실제로 이미 데이터베이스에 구현된 구체적인 설계이다.
  • 잘 바뀌지 않는 고정된 설계 데이터 구조이다.
  • 예: 학생 테이블에 이름, 학번, 전공 등의 컬럼이 있다고 정의하는 것.

 

 

밑의 sql 코드예시가 학생 테이블 스키마

CREATE TABLE STUDENT (
    student_id INT PRIMARY KEY,
    name VARCHAR(50),
    major VARCHAR(50),
    year INT
);

이렇게 STUDENT 테이블에 대한 구체적인 구조(컬럼, 데이터 타입 등)를 스키마라고 한다.

 

 

 

Schema Diagram (스키마 다이어그램)

  •  레코드 유형의 구조를 시각적으로 표시.

 

 

 

더보기

모델 vs. 스키마


구분 데이터 모델 스키마
정의 데이터베이스 설계를 위한 개념적 틀 특정 데이터베이스의 구체적인 구조
목적 데이터 구조를 정의하는 철학적 접근법 제공 데이터베이스의 테이블과 컬럼을 명확하게 정의
종류 개념적, 물리적, 표현적 모델 외부, 개념, 내부 스키마
예시 관계형 모델: 데이터를 테이블로 표현 STUDENT 테이블 설계도
변경 빈도 데이터베이스 설계 전반에 적용 (잘 변하지 않음) 데이터 추가 및 설계 변경 시 수정 가능
범위 데이터의 구조와 관계를 정의하는 틀 특정 데이터베이스에 적용된 세부 설계

 

 

 

 

 

인스턴스(Instance)

  • 인스턴스는 특정 시점에 데이터베이스에 저장된 실제 데이터다.
  • 시간에 따라 자주 바뀐다.
    예를 들어, 학생 테이블에 “김철수”라는 새로운 데이터를 추가하면 인스턴스가 변경된다.

스키마와 인스턴스의 차이점:

  • 스키마는 테이블의 구조를 정의하는 설계도와 같다.
  • 인스턴스는 그 설계도에 따라 저장된 현재 데이터이다.
  • 스키마는 잘 변하지 않지만, 인스턴스는 데이터를 삽입, 수정, 삭제할 때마다 변경된다.
  • 즉, 스키마 다이어그램은 구조를 보여주는 것이며, 실제 레코드 데이터를 나타내지는 않는다.

 

 

 

 

 

 

 

 

 

3. 스키마 아키텍처

 

 

 

스키마 아키텍처는 데이터를 외부, 개념, 내부 3가지 수준으로 나눠서 관리한다.
사용자는 각 수준에서 자신이 필요한 정보만 볼 수 있다.

 

사용자 애플리케이션과 물리적 데이터베이스를 분리하기 위해서 사용한다.

 

 

스키마의 각 수준

  1. 외부 수준(External Level)
    • 사용자가 보는 맞춤형 데이터 뷰다.
    • 예: 학생 서비스 담당자는 학생의 학번과 이름만 보고, 재무 부서는 학생의 수업료 정보만 본다.
    • 여러 사용자가 자신만의 외부 뷰를 가질 수 있다.
  2. 개념 수준(Conceptual Level)
    • 데이터베이스 전체의 논리적 구조제약조건을 정의한다.
    • 표현적 데이터 모델을 통해 엔터티, 관계, 데이터 유형, 제약 조건 등을 설명하며, 외부 및 내부 수준과의 매핑을 통해 데이터 흐름을 조정한다.
    • 예: 학생 엔터티와 강의 엔터티 사이의 ‘수강(take_course)’ 관계를 정의한다.
  3. 내부 수준(Internal Level)
    • 데이터가 컴퓨터에 실제로 저장되는 방식을 설명한다.
    • 데이터 저장 위치접근 경로 등 세부적인 사항을 다룬다.
    • 부 수준에서는 데이터가 효율적으로 저장되고 검색될 수 있도록 저장 최적화 및 접근 경로를 정의하는 것이 중요하다.

 

 

 

각 수준들은 매핑 과정을 통해 서로 다른 수준 간의 요청과 데이터 결과 흐름을 조정하여 변환시켜준다.

예를들면, 사용자 요청(쿼리)를 외부 스키마에서 개념적 스키마에 대한 요청으로 변환한 후, 개념적 요청을 내부 스키마에 대한 요청으로 변환하여 저장된 데이터베이스에서 처리한다.

 

 

매핑을 통해 사용자는 데이터의 물리적 저장 방식에 대해 알 필요 없이 자신이 원하는 데이터에만 접근할 수 있고,

DBMS는 각 수준 간의 매핑을 통해 데이터 요청과 결과를 효율적으로 처리한다.

 

 

 

매핑 과정

  1. 외부/개념 매핑:
    • 사용자가 외부 뷰를 통해 입력한 쿼리를 개념적 스키마에 맞는 형태로 변환한다.(연결한다)
    • 각 사용자 그룹은 자신이 속한 외부 스키마에 따라 접근할 수 있는 데이터가 다르므로, 나머지 데이터는 사용자 그룹에게 숨겨진다. 
      • 예: 사용자가 필요한 데이터(고객 이름)를 요청하면, 해당 요청이 개념적 수준 스키마에서 적절한 테이블과 관계로 변환(매핑)됨.
  2. 개념/내부 매핑:
    • 개념적 스키마에서의 요청을 내부 스키마에 맞게 변환하여 물리적 데이터베이스에서 실행(저장소에서 데이터를 검색)한다.
    • 엔터티, 데이터 유형, 관계, 사용자 작업, 제약 조건 등을 포함하여 모든 부서에서 공통으로 사용하는 데이터 구조를 설명한다. 
      • 예: 요청된 데이터를 디스크에서 어떻게 검색할지 정의하는 과정 포함.
  3. 결과 반환:
    • 저장된 데이터베이스에서 얻은 결과를 다시 외부 뷰에 맞게 변환한다.
      • 내부 스키마 → 개념 스키마 → 외부 뷰 순서로 변환되어 사용자가 요청한 형태로 데이터를 제공.

 

 

 

 

스키마 아키텍쳐는 사용자 프로그램과 데이터의 독립성을 보장하여,

이를 통해 사용자는 데이터 저장 방식에 신경 쓰지 않고, 자신의 작업에 맞는 데이터 뷰만 사용할 수 있다.

또한 독립성으로 인해 데이터 구조 변경 시 프로그램을 수정할 필요가 없어 유지 관리 비용을 절감할 수 있다.

 

데이터 독립성

  • 논리적 독립성: 개념적 스키마를 수정해도 외부 수준(사용자 뷰)에 영향이 없다.
  • 물리적 독립성: 내부 스키마를 변경해도 개념적 및 외부 수준에 영향을 주지 않는다.

 

즉, 한 단계의 스키마가 변경되어도 상위 단계의 스키마를 수정할 필요가 없는 성질을 말한다.

예) 새로운 레코드를 추가하거나 제약 조건을 변경해도 애플리케이션에 영향이 없음.

 

 

 

 

스키마 예시

 

 

 

 

 

 

 

 

4. DBMS Languages 

 

DBMS는 다양한 사용자를 지원하기 위해 여러 종류의 언어를 제공한다.

  • 데이터베이스 설계자는 개념 스키마와 내부 스키마를 명시해야 함.
  • 데이터베이스 관리자는 인덱스 선택과 데이터 매핑을 제어해야 함.

 

 

데이터베이스 설계가 완료되고 DBMS가 선택되면, 다음 단계는 3개의 스키마(외부, 개념, 내부 스키마)와 매핑을 정의하는 것이다.

 

 

 

DBMS 언어의 종류

 

1. Data Definition Language (DDL)

  • 외부 및 개념 스키마 정의( 데이터베이스 구조(테이블, 관계 등) )에 사용된다.
    • 데이터베이스 설계자와 관리자(DBA)가 사용.
    • 예: 테이블 생성 명령인 CREATE TABLE.

2. Storage Definition Language (SDL)

  • 내부 스키마를 정의한다. 즉, 데이터가 물리적으로 어떻게 저장될지를 결정한다.
    • DBA가 인덱스 선택 및 데이터 매핑을 제어할 수 있다.
    • 예: 인덱스를 생성해 검색 속도를 높임.

3. View Definition Language (VDL)

  • 사용자 뷰와 개념 스키마 간 매핑을 정의한다.

4. Data Manipulation Language (DML)

  • 스키마가 컴파일되고 데이터베이스가 데이터로 채워진 후, 데이터를 조작하기 위한 도구가 필요하다.
    DML은 사용자가 데이터 검색, 삽입, 삭제, 수정을 수행할 수 있게 한다.
  • DML의 두 종류
    1. Non-procedural (High-level) DML: 선언형 DML
      • 예: SQL
      • 어떤 데이터를 검색할지 명시하지만, 어떻게 검색할지는 명시하지 않는다.
      • 복잡한 작업을 간결하게 수행하며, 단일 문장으로 여러 레코드를 검색할 수 있다.
    2. Procedural (Low-level) DML: 절차적 DML
      • 데이터 검색의 상세한 단계를 명시해야 한다.
      • 개별 레코드를 순차적으로 검색하고 처리한다.

 

 

 

이러한 언어들은 효율적인 데이터베이스 설계와 관리를 도와준다.

 

 

 

 

 

 

 

5. DBMS 인터페이스 종류

 

DBMS는 다양한 사용자를 지원하기 위해 여러 종류의 사용자 친화적 인터페이스를 제공한다.

각 인터페이스는 특정 사용자 그룹을 대상으로 설계된다.

 

 

  1. 메뉴 기반 인터페이스
    • 메뉴를 통해 데이터를 쉽게 조회한다.
    • 예: ATM에서 메뉴를 선택해 잔액 조회.
  2. 폼 기반 인터페이스
    • 미리 정의된 양식에 데이터를 입력해 관리한다.
    • 예: 도서관 대출 양식을 통한 데이터 입력.
    • 메뉴 기반과 비슷하지만, 메뉴 기반은 간단한 조회와 탐색에 적합하고, 폼 기반은 데이터 입력과 수정 작업에 적합하다. 상황에 따라 둘 다 보완적으로 사용되기도 한다.
  3. GUI(그래픽 사용자 인터페이스)
    • 시각적인 도구로 데이터베이스를 조작한다.
    • 예: 다이어그램을 사용해 테이블 간 관계를 정의.
  4. 자연어 인터페이스
    • 사용자가 영어와 같은 자연어로 질의한다.
    • 예: “고객 이름이 김씨인 데이터를 보여줘.”
  5. DBA(데이터베이스 관리자) 인터페이스
    • 데이터베이스 관리자가 사용하는 고급 명령어이다.
    • 예: 시스템 백업, 사용자 계정 생성 등.

 

 

이렇게 DBMS는 다양한 사용자 요구를 충족하기 위해 초보 사용자부터 숙련된 DBA까지 모두를 지원할 수 있도록 설계되었다.

 

 

 

 

 

 

 

 

6. DBMS 구성 모듈

 

각각 upper와 lower part

 

 

DBMS는 여러 소프트웨어 모듈로 구성되어 있으며, 각 모듈은 데이터베이스 관리와 작업에 중요한 역할을 한다.

  • 상위 부분(The Upper Part):
    • 데이터베이스의 다양한 사용자와 인터페이스로 구성.
  • 하위 부분(The Lower Part):
    • DBMS의 내부 모듈로, 데이터 저장과 트랜잭션 처리를 담당.

 

 

 

  1. 저장 데이터 관리자
    • 데이터와 메타데이터(데이터 구조 정보)에 접근을 관리한다.
  2. DDL 컴파일러
    • DBA가 정의한 스키마 정의를 처리하고 시스템에 저장한다.
      (스키마와 관련된 메타데이터를 시스템 카탈로그에 저장)
      • 예: 파일 이름, 데이터 항목 유형, 스키마 간 매핑 정보.
  3. 쿼리 컴파일러와 최적화기
    • 사용자가 입력한 쿼리를 최적화해 빠르게 처리한다.
      • 고수준 DBMS 쿼리를 구문 분석(Parsing).
      • 내부 형식으로 컴파일하고 최적화하여 성능을 높인다.
        • 불필요한 연산을 제거하거나 쿼리 순서를 조정.
      • 런타임 데이터베이스 프로세서에 호출을 전달해 작업 수행.
    • Precompiler & DML Compiler (프리컴파일러와 DML 컴파일러)
      • 애플리케이션 프로그램에서 SQL과 같은 DML 명령을 추출.
      • 추출된 DML 명령을 오브젝트 코드로 컴파일하여 데이터베이스에 접근.
      • 명령어 코드를 다른 프로그램 코드와 링크하여 거래 처리 프로그램(Canned Transactions)으로 만듦.
  4. 실시간 데이터베이스 프로세서
    • 사용자 요청(쿼리)를 처리하고 트랜잭션(명령)을 수행한다.
    • 예: 특권 명령, 쿼리 계획, 거래 처리 프로그램 실행.
    • 시스템 카탈로그 저장 데이터 관리자와 협력해 데이터 접근을 최적화.
  5. 동시성 제어 및 백업 시스템
    • 여러 사용자가 동시에 작업할 때 데이터의 무결성(일관성)을 유지한다.
    • 백업과 복구 기능도 제공해 시스템 장애에 대비한다.