6. 데이터베이스의 물리 구조

박은서's avatar
Apr 24, 2026
6. 데이터베이스의 물리 구조

1. DB 물리구조

1️⃣ 저장 구조의 핵심 개념

1) 디스크 기반 저장

  • DB는 메모리가 아니라 디스크(HDD/SSD)에 데이터를 저장
  • 성능의 핵심은 CPU가 아니라 디스크 I/O
➡️ 결론
  • 디스크 접근 횟수 = 성능
  • 따라서 물리구조 이해는 곧 성능 이해

2) 블록 단위 I/O

  • DB는 데이터를 행(Row)이 아니라 블록(Block) 단위로 읽고 쓴다
  • 블록 = DB I/O의 최소 단위 (보통 4KB ~ 16KB)
➡️ 중요한 착각 깨기
  • ❌ “행 하나 조회하면 행만 읽는다”
  • ✅ “행이 포함된 블록 전체를 읽는다”

2️⃣ 저장 계층 구조

1) 전체 계층 구조

디스크 → 테이블스페이스 → 세그먼트 → 익스텐트 → 블록 → 행(Row)

2) 블록 (Block)

  • 실제 데이터가 저장되는 최소 물리 단위
  • 여러 개의 행이 하나의 블록에 들어감
  • 특징
    • 하나의 블록을 읽으면 여러 행을 같이 가져옴
    • 그래서 공간 배치가 중요

3) 익스텐트 (Extent)

  • 연속된 블록 묶음
  • 일정 크기로 할당됨
  • 이유
    • 블록을 하나씩 할당하면 비효율적 → 여러 개를 묶어서 관리

4) 세그먼트 (Segment)

  • 테이블이나 인덱스 같은 객체가 사용하는 공간
  • 여러 익스텐트로 구성됨
  • 예시
    • 테이블 세그먼트
    • 인덱스 세그먼트

5) 테이블 (Table)

  • 행(Row)의 집합
  • 물리적으로는 세그먼트 단위로 디스크에 존재

3️⃣ RowID (물리 주소 개념)

1) RowID란?

  • 행의 물리적 위치 정보
  • DB 내부에서 특정 행을 빠르게 찾기 위한 주소

2) 구성 개념

  • 파일 번호
  • 블록 번호
  • 행 번호
RowID = (파일 + 블록 + 행 위치)

3) 왜 중요한가?

  • 인덱스는 실제 데이터를 저장하지 않고 RowID를 저장해서 빠르게 접근

4️⃣ 데이터 저장 방식 (Heap 구조)

1) 기본 저장 방식

  • 테이블은 기본적으로 순서 없이 저장 (Heap 구조)
  • 특징
    • INSERT 순서대로 쌓임
    • 정렬 보장 없음

2) 문제점

  • 특정 데이터를 찾을 때 전체 스캔 (Full Scan) 발생

5️⃣ 인덱스(Index)의 필요성

1) 인덱스 역할

  • 데이터를 빠르게 찾기 위한 구조
  • 일종의 정렬된 탐색용 자료구조

2) 동작 방식

  1. 인덱스에서 값 찾음
  1. RowID 확인
  1. 실제 데이터 블록 접근

3) 핵심 효과

  • Full Scan → Index Scan으로 변경
  • 디스크 I/O 횟수 감소

6️⃣ 디스크 I/O와 성능

1) HDD 기준 병목

  • Seek Time (헤드 이동) ← 가장 느림
  • Rotation Delay
  • Transfer Time

2) 성능 핵심

  • 랜덤 접근 많을수록 느림
  • 블록 접근 횟수 줄이는 것이 핵심

7️⃣ 필기

notion image

8️⃣ 필기 내용에서 반드시 교정해야 할 포인트

1) “행 단위 I/O”라고 생각하면 틀림

  • 반드시 블록 단위 I/O

2) “정렬 안 되어 있으면 인덱스 필요”

  • 맞지만 불완전한 이해
👉 정확한 표현
  • Heap 구조는 탐색이 느리기 때문에 인덱스가 필요

3) “인덱스 = 데이터 저장”

  • ❌ 틀림
  • ✅ 인덱스는 RowID(주소)를 저장

9️⃣ 한 줄 정리 (시험용 핵심)

  • DB는 블록 단위로 디스크에 저장
  • 테이블은 Heap 구조로 비정렬 저장
  • 인덱스는 RowID를 이용해 탐색 성능을 개선
  • 결국 성능은 디스크 I/O 횟수에 의해 결정됨

🔟 그림으로 이해하기

notion image
Share article