DATABASE DESIGN

[데이터베이스 설계] 데이터베이스 설계란?

ch010104 2025. 9. 4. 15:55

🚀 데이터베이스는 왜 필요할까? (Purpose of Database Systems)

- 과거에는 모든 데이터를 파일 시스템 위에 직접 저장하고 관리

- 응용 프로그램을 만들 때마다 데이터 파일을 직접 다뤄야 했던 이 방식은 여러 심각한 문제!!

  • 데이터 중복과 불일치 (Data Redundancy and Inconsistency):
    - 같은 정보(e.g., 고객 주소)가 여러 파일에 중복 저장되어, 한 곳을 수정하면 다른 곳은 그대로 남아 데이터가 어긋나는 문제가 발생
  • 데이터 접근의 어려움 (Difficulty in Accessing Data):
    - 새로운 방식으로 데이터를 찾거나 가공하려면 매번 그 목적에 맞는 새로운 프로그램을 짜야 함
  • 데이터 고립 (Data Isolation):
    - 데이터가 여러 파일과 다른 형식으로 흩어져 있어 통합적인 활용이 매우 어려움
  • 무결성 문제 (Integrity Problems):
    - '계좌 잔고는 0 이상이어야 한다'와 같은 중요한 제약 조건이 프로그램 코드 속에 숨겨져 있어, 새로운 제약 조건을 추가하거나 기존의 것을 변경하기가 매우 까다로움

DBMS는 바로 이러한 문제들을 해결하고, 가치 있고, 방대하며, 여러 사용자가 동시에 접근하는 데이터를 안전하고 효율적으로 관리하기 위해 탄생


🔧 데이터베이스의 핵심 개념: 추상화와 독립성

- DBMS는 사용자에게 데이터의 복잡한 물리적 구조를 숨기고, 간결하고 일관된 뷰(View)를 제공하는 것

 

1. 데이터 추상화 (Data Abstraction)

데이터를 바라보는 관점을 3개의 단계로 나누어 복잡성을 숨김

  • 물리적 레벨 (Physical Level):
    - 데이터가 디스크에 '어떻게' 저장되는지에 대한 최하위 단계. (e.g., 레코드 구조, 파일 배치, 인덱스)
    - 일반 사용자는 전혀 신경 쓸 필요가 없음
  • 논리적 레벨 (Logical Level):
    - 데이터베이스에 '무엇'이 저장되는지와 데이터 간의 '관계'를 설명
    - 전체 데이터베이스의 구조를 정의하며
    - 개발자나 데이터베이스 관리자(DBA)가 주로 다루는 단계
    - 데이터베이스에 데이터가 저장되는 방식을 묘사
  • 뷰 레벨 (View Level):
    - 일반 사용자와 가장 가까운 단계
    - 전체 데이터베이스 중 허용된 특정 부분만을 보여줌
    - 보안을 위해 민감한 정보(e.g., 직원의 연봉)를 숨기는 용도로도 활발히 사용
    - 어떤 사람에게 데이터베이스의 어떤 면만 보여줄 것인가

2. 스키마와 인스턴스 (Schema and Instance)

프로그래밍 언어의 '타입(Type)'과 '변수(Variable)' 관계와 유사

  • 스키마 (Schema): 데이터베이스의 전체적인 뼈대나 설계도
    - 데이터가 어떻게 구성될지, 어떤 제약 조건을 가질지를 정의(e.g., instructor 테이블은 ID, name, salary 필드를 가진다)
  • 인스턴스 (Instance): 특정 시점에 데이터베이스에 실제로 저장된 내용(값)을 의미

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

  • 데이터 추상화의 가장 큰 장점 중 하나.
  • 이는 물리적 스키마를 변경하더라도, 논리적 스키마에 영향을 주지 않는 능력을 의미
  • ex) 데이터베이스의 성능을 높이기 위해 데이터 저장 방식을 바꾸거나 새로운 하드디스크로 교체하더라도, 기존에 만들어 둔 응용 프로그램(애플리케이션)은 코드를 수정할 필요 없이 그대로 작동
  • 애플리케이션은 논리적 스키마에만 의존하기 때문!!

4. 데이터 모델 (Data Models)

데이터, 데이터 관계, 제약 조건 등을 기술하기 위한 개념적인 도구 모음

  • 관계형 모델 (Relational Model): 현재 가장 널리 쓰이는 모델로, 모든 데이터를 테이블(Table) 형태로 저장
  • 개체-관계 모델 (E-R Model): 데이터베이스를 설계할 때 주로 사용하는 개념적 모델
  • 그 외에 네트워크 모델, 계층 모델, 객체 기반 모델 등이 있음

💻 데이터베이스와 소통하는 언어: DDL & DML

1. 데이터 정의 언어 (DDL - Data Definition Language)

- 데이터베이스 스키마를 정의하고 수정하는 데 사용되는 언어

- CREATE TABLE, ALTER, DROP 등의 명령어가 있으며, 테이블 구조, 데이터 타입, 제약 조건 등을 설정

  • SQL
-- 강사 정보를 담을 테이블을 정의하는 DDL 예시
CREATE TABLE instructor (
    ID          CHAR(5),
    name        VARCHAR(20),
    dept_name   VARCHAR(20),
    salary      NUMERIC(8,2)
);

 

2. 데이터 조작 언어 (DML - Data Manipulation Language)

- 데이터를 검색, 삽입, 수정, 삭제하는 데 사용되는 언어

- **쿼리 언어(Query Language)**라고도 부릅니다. DML은 크게 두 가지로 나뉨

  • 절차적 DML (Procedural DML):
    - 사용자가 '무엇을(What)' 원하는지와 함께 그 데이터를 '어떻게(How)' 가져올지 접근 절차까지 명시
  • 선언적 DML (Declarative DML):
    - 사용자가 '어떻게' 가져올지는 명시하지 않고, '무엇을(What)' 원하는지만을 명시
    - DBMS의 질의 처리기가 가장 효율적인 방법을 알아서 찾아줌

오늘날 가장 널리 쓰이는 **SQL(Structured Query Language)**은 대표적인 선언적(비절차적) DML!!

  • SQL
-- 컴퓨터 공학과 소속 강사의 이름을 찾는 DML(SQL) 예시
SELECT name
FROM instructor
WHERE dept_name = 'Comp. Sci.';

🏛️ 데이터베이스의 내부 구조와 아키텍처

1. 데이터베이스 엔진 (Database Engine)

- 데이터베이스 시스템의 핵심 두뇌로, 여러 기능 모듈로 구성

 

저장 관리자 (Storage Manager):

- 데이터베이스의 가장 낮은 수준에서 일하며, 응용 프로그램과 물리적인 데이터 파일 사이의 다리 역할
- 단순히 데이터를 디스크에 읽고 쓰는 것 이상의 복잡하고 중요한 임무를 수행

  • 주요 역할: 데이터의 효율적인 **저장(Storing), 검색(Retrieving), 수정(Updating)**을 책임짐
  • 핵심 목표: 디스크 I/O(입출력)는 컴퓨터에서 가장 느린 작업 중 하나이므로, 디스크 접근을 최소화하고 메모리를 최대한 효율적으로 사용하여 시스템 전체의 성능을 극대화하는 것이 목표

질의 처리기 (Query Processor):

- 쿼리를 해석하고(Parsing), 가장 효율적인 실행 계획을 수립하여(최적화, Optimization), 실행하는(Evaluation) 역할

 

질의 처리 과정 3단계

  1. 파싱 및 번역 (Parsing and Translation)
    • 사용자의 쿼리문이 문법적으로 올바른지 먼저 검사
    • 문법에 문제가 없다면, 시스템이 이해할 수 있는 내부 표현 방식(e.g., 관계 대수)으로 쿼리를 번역
  2. 최적화 (Optimization)
    • 질의 처리기의 가장 핵심적인 부분
    • **옵티마이저(Optimizer)**는 데이터 딕셔너리의 통계 정보(테이블 크기, 데이터 분포 등)를 바탕으로 여러 가능한 **실행 계획(Execution Plan)**들의 비용(소요 시간, 디스크 I/O 횟수 등)을 예측
    • 그 후, 가장 비용이 적게 드는 최적의 실행 계획을 단 하나 선택
  3. 실행 (Evaluation)
    • 쿼리 실행 엔진이 옵티마이저가 선택한 실행 계획을 그대로 따라서 실행
    • 이 과정에서 저장 관리자에게 데이터(파일, 인덱스)를 요청하여 필요한 데이터를 가져오고, 가공하여 최종 결과를 사용자에게 반환

트랜잭션 관리자 (Transaction Manager):

  • 일관성 유지 (Consistency Assurance)
    • 트랜잭션이 성공적으로 완료되면 데이터베이스는 항상 일관된(정상적인) 상태를 유지
    • 시스템 장애가 발생했을 경우, 완료되지 않은 트랜잭션의 작업은 모두 원상 복구(롤백, Rollback)하고, 이미 완료된 트랜잭션의 결과는 장애 이후에도 그대로 보존되도록(복구, Recovery)
    • 이를 통해 데이터의 **원자성(Atomicity)**과 **지속성(Durability)**을 보장
  • 동시성 제어 (Concurrency Control)
    • 여러 사용자가 동시에 같은 데이터에 접근하여 수정하려고 할 때 발생할 수 있는 문제(e.g., 데이터가 덮어쓰이거나 잘못 읽히는 문제) 방지
    • **락(Lock)**과 같은 메커니즘을 사용하여, 한 트랜잭션이 특정 데이터를 수정하는 동안에는 다른 트랜잭션이 해당 데이터를 수정할 수 없도록 제어
    • 이를 통해 각 트랜잭션이 마치 혼자 실행되는 것처럼 보이는 **고립성(Isolation)**을 보장

 

2. 시스템 아키텍처 (System Architecture)

  • 중앙 집중형: 하나의 고성능 시스템에서 모든 것을 처리
  • 클라이언트-서버: 클라이언트가 요청하면 서버가 처리하여 결과를 반환하는 구조
  • 2계층/3계층 아키텍처:
    - 오늘날 웹 서비스에서 흔히 볼 수 있는 구조
  • 3계층 구조는 클라이언트(웹 브라우저)
    - 애플리케이션 서버(비즈니스 로직 처리) - 데이터베이스 서버로 역할을 명확히 분리, 유연성과 확장성을 크게 높임


👥 데이터베이스를 사용하는 사람들과 관리자

  • 데이터베이스 관리자 (DBA, Database Administrator):
    - 스키마 정의, 저장 구조 및 접근 방법 설정, 권한 부여, 정기적인 백업 및 유지보수 등 데이터베이스 시스템을 총괄하는 막중한 책임자
  • 응용 프로그래머 (Application Programmer):
    - 데이터베이스에 접근하는 프로그램을 개발
  • 일반 사용자 (End User):
    - 완성된 응용 프로그램을 통해 데이터베이스를 간접적으로 사용