Chapter 12. Physical Storage Systems

한 줄 핵심: 모든 데이터는 결국 물리 매체 위에 놓이며, 매체는 속도·비용·신뢰성의 트레이드오프로 **계층(hierarchy)**을 이룬다. 디스크 성능은 access time = seek time + rotational latency로 결정되고, 순차 접근(첫 블록만 seek)무작위 접근(매번 seek) 의 격차가 DB 물리 설계의 출발점이다.

이 챕터가 답하는 핵심 질문

  • Q1. 저장 매체는 무엇을 기준으로 나뉘고, 어떻게 고르는가?
  • Q2. 저장 계층(storage hierarchy)은 왜 생기며 어떻게 구성되는가?
  • Q3. 자기 디스크(HDD)는 물리적으로 어떻게 생겼는가?
  • Q4. 디스크 성능은 무엇으로 측정하며, 왜 순차 접근이 빠른가?

Q1. 저장 매체는 무엇을 기준으로 나뉘고, 어떻게 고르는가? ✅

A. 가장 근본적인 구분은 전원이 꺼졌을 때 데이터가 살아남는가이고, 매체 선택은 속도·비용·신뢰성 3가지로 결정한다.

분류정의예시
휘발성 (volatile storage)전원이 꺼지면 내용이 사라짐cache, main memory
비휘발성 (non-volatile storage)전원이 꺼져도 내용이 유지됨secondary·tertiary storage, 배터리 백업 main memory

비유

휘발성은 칠판(수업=전원이 끝나면 지워짐), 비휘발성은 공책(덮어도 남음). DB는 절대 잃으면 안 되는 데이터를 다루므로 최종적으로는 반드시 비휘발성 매체에 기록한다.

  • 비휘발성에는 secondary·tertiary storage뿐 아니라 배터리로 백업된 main memory도 포함된다 (배터리가 내용을 지켜주므로).

매체 선택의 3가지 기준:

  1. 속도 (Speed) — 데이터에 얼마나 빨리 접근하는가
  2. 비용 (Cost) — 단위 용량당 매체 구입 비용
  3. 신뢰성 (Reliability) — 데이터를 얼마나 안전하게 보존하는가

→ 세 마리 토끼를 동시에 잡는 매체는 없다. 그래서 계층 구조(Q2) 가 등장한다.


Q2. 저장 계층(storage hierarchy)은 왜 생기며 어떻게 구성되는가? ✅

A. 어떤 매체도 빠름·쌈·대용량을 모두 만족하지 못하므로, 위로 갈수록 빠르고 비싸며, 아래로 갈수록 느리지만 싸고 용량이 큰 피라미드형 계층을 쌓는다.

계층 (위 → 아래)용량 예시
cache25 MB
main memory16 GB
flash memory512 GB, solid state drive (SSD)
magnetic disk4 TB, hard disk drive (HDD)
optical disk
magnetic tapes

비유 — 책상, 책장, 도서관 창고

  • cache/main memory = 책상 위 펼친 책: 손만 뻗으면 되지만 좁다.
  • SSD/HDD = 방 안의 책장: 일어나 가져와야 하지만 훨씬 많다.
  • tape/optical = 도서관 지하 서고: 꺼내는 데 오래 걸리지만 거의 무한 보관.

primary / secondary / tertiary 3단계 구분:

구분위치휘발성속도별칭예시
primary최상위휘발성가장 빠름cache, main memory
secondary중간비휘발성중간 (moderately fast)on-line storageflash memory, magnetic disk
tertiary최하위비휘발성느림off-line storagemagnetic tape, optical storage
  • secondary: 비휘발성+적당히 빠름 → DB 본체가 상주. 항상 연결되어 즉시 접근 가능해 on-line.
  • tertiary: 평소 분리되어 off-line, 백업·보관용인 archival storage로 쓰임.

Magnetic tape (tertiary 대표):

  • 순차 접근(sequential access)만 가능 (카세트테이프처럼 감아야 함)
  • 용량 1 ~ 12 TB
  • 운영: 소수 드라이브 + 다수 테이프 (테이프는 싸고 드라이브는 비쌈)
  • Juke box: 테이프를 자동 교체해 페타바이트(수천 TB) 규모 저장

Q3. 자기 디스크(HDD)는 물리적으로 어떻게 생겼는가? ✅

A. HDD 성능은 전부 기계 부품의 물리적 움직임에서 나오므로, platter–track–sector–cylinder 구조를 알아야 성능을 이해할 수 있다. (LP판 플레이어: 도는 판 위에서 바늘이 위치를 찾아감)

부품설명
Platter데이터가 기록되는 원형 금속판 (LP판)
Spindleplatter들을 꽂아 회전시키는 중심축
Trackplatter 표면의 동심원 데이터 띠. platter당 5만~10만(50K–100K) 이상
Sectortrack을 부채꼴로 자른 조각. 읽기/쓰기 가능한 최소 데이터 단위. 보통 512 bytes
Read-write head데이터를 읽고 쓰는 헤드 (바늘)
Arm헤드를 원하는 track 위로 이동시키는 팔
Cylindercylinder = 모든 platter의 번째 track의 집합 (세로로 관통하는 원통)

위에서 본 platter 한 장 (ASCII 그림)

           track (동심원 띠)
         ┌───────────────┐
       ╱   ┌─────────┐    ╲
      │   ╱  ┌───┐    ╲   │   ← 바깥 track: 둘레가 길어
      │  │  │ ● │ ←spindle│      sector를 더 많이 담음
      │  │   └───┘    │   │      (1000~2000개)
      │   ╲  sector  ╱    │
       ╲    └───┬───┘    ╱   ← 안쪽 track: 짧아서
         └──────┼───────┘       sector 적음 (500~1000개)
                │
           한 sector = 부채꼴 한 조각 = 512 B
                      = 읽기/쓰기 최소 단위

헤드(바늘)는 arm을 따라 **반지름 방향(안↔밖)**으로 움직여 원하는 track을 고르고, platter가 회전하면서 원하는 sector가 헤드 밑으로 지나가는 순간 읽는다.

옆에서 본 cylinder (platter 여러 장 + 공통 arm)

  ═══════════  platter 0 ── head 0  ┐
  ═══════════  platter 1 ── head 1  │  모든 head가
  ═══════════  platter 2 ── head 2  ├─ 하나의 arm에 붙어
  ═══════════  platter 3 ── head 3  ┘  동시에 같은 번호 track 위에 있음
             ↑
    같은 번호 track들을 세로로 묶은 것 = 'cylinder'

→ arm을 한 번 움직이면 모든 head가 같은 cylinder에 도달하므로, 한 cylinder 안의 데이터는 seek 없이 읽을 수 있다. 그래서 DB는 관련 데이터를 같은 cylinder에 모으면 빠르다.

  • track당 sector 수: 안쪽 500~1000개, 바깥쪽 1000~2000개 (바깥 원이 더 길어서)
  • Head-disk assembly: 하나의 spindle에 보통 1~5장 platter, platter마다 헤드 1개, 모든 헤드가 하나의 공통 arm에 장착 → 모든 헤드가 동시에 같은 track 번호 위에 위치 (cylinder 개념이 유용한 이유)

Sector 읽기/쓰기 과정:

  1. Disk arm이 회전(swing) 하여 헤드를 올바른 track에 위치시킨다.
  2. Platter는 계속 회전하므로, 목표 sector가 헤드 아래를 지나는 순간 읽거나 쓴다.

→ 모든 접근에 “팔 이동”+“판 도는 대기”라는 두 기계적 지연이 따른다 → Q4의 성능 지표로 직결.


Q4. 디스크 성능은 무엇으로 측정하며, 왜 순차 접근이 빠른가? ✅

A. 핵심 공식은 access time = seek time + rotational latency이고, 순차 접근은 첫 블록에만 seek하지만 무작위 접근은 매번 seek하기 때문에 격차가 크다.

구성 요소정의일반적 값
Seek timearm을 올바른 track으로 재배치하는 시간4 to 10 ms
Rotational latency접근할 sector가 헤드 아래로 회전해 올 때까지 대기4 to 11 ms (5400~15000 r.p.m.)
  • 평균 rotational latency = 1회전 시간의 1/2 (운 좋으면 0, 최악이면 한 바퀴 → 평균 반 바퀴)
  • 전체 access time = 5 ~ 20 msec (모델에 따라)
  • Data-transfer rate: 디스크에서 읽거나 쓰는 속도, 최대 25 ~ 200 MB/s

비유

seek time = 도서관에서 원하는 책장(track)까지 걸어가는 시간, rotational latency = 책장이 회전식이라 원하는 칸(sector)이 앞으로 돌아올 때까지 기다리는 시간. 둘 다 끝나야 데이터 전송이 시작된다.

실제 숫자로 access time 계산해 보기

디스크가 10,000 r.p.m.(분당 1만 회전), seek time 5 ms, data-transfer rate 100 MB/s, 블록 크기 4 KB라고 하자.

① 평균 rotational latency = 1회전 시간의 절반

  • 1회전 시간 =
  • 평균 latency =

② 한 블록 전송 시간(transfer time)

  • (거의 무시할 수준!)

③ 블록 1개를 무작위로 읽는 총 시간

핵심 깨달음: 실제 데이터를 옮기는 시간(0.04 ms)은 거의 공짜고, 시간의 99%는 **헤드를 움직이고(seek) 판이 돌기를 기다리는(rotation) “준비 시간”**이다. → 그래서 “준비 시간을 몇 번 치르느냐”가 곧 성능이다 = 순차 접근이 빠른 이유.

순차 vs 무작위 — 100개 블록 읽기 시간 비교

같은 디스크로 연속된 블록 100개를 읽는다고 하자.

무작위(Random)순차(Sequential)
seek블록마다 1번 → 100 × 5 ms = 500 ms첫 블록만 1번 → 5 ms
rotation블록마다 → 100 × 3 ms = 300 ms첫 블록만 ≈ 3 ms (이후는 헤드 밑으로 줄줄이 지나감)
transfer100 × 0.04 ms = 4 ms100 × 0.04 ms = 4 ms
총합≈ 804 ms≈ 12 ms

→ 같은 양의 데이터인데 약 67배 차이! 무작위는 매 블록마다 “준비 시간(seek+rotation = 8 ms)“을 100번 치르지만, 순차는 단 한 번만 치르고 나머지는 판이 도는 대로 받아먹는다. DBMS가 관련 데이터를 인접 블록에 모으려고 애쓰는 이유가 바로 이 67배다.

Disk block — 저장 할당의 논리적 단위:

  • Disk block = 저장 공간 할당(allocation)·검색(retrieval)의 논리적 단위, 보통 4 ~ 16 KB. (sector가 하드웨어 최소 단위면, block은 OS/DB가 다루는 논리적 묶음)
블록 크기단점
작은 블록전송 횟수가 많아짐 (조금씩만 가져옴)
큰 블록부분만 채워져 공간 낭비

→ 택배 상자 크기: 너무 작으면 여러 번 배송, 너무 크면 안이 비어 낭비.

Sequential vs Random Access — 시험 포인트:

항목SequentialRandom
연속 요청 대상연속된(successive) block디스크 어디에나 있는 block
Seek 횟수첫 블록만매 접근마다
실효 전송률높음낮음 (seek에 시간 낭비)

왜 중요한가

seek time(4~10ms)은 가장 비싼 비용. 순차 접근은 이를 단 한 번만 치르고 platter가 도는 대로 줄줄이 읽지만, 무작위 접근은 블록마다 arm을 움직인다. 책을 1쪽부터 읽는 것 vs 매번 아무 쪽이나 펴서 한 줄씩 읽는 것의 차이. 그래서 DBMS는 관련 데이터를 인접 블록에 배치해 순차 접근을 유도한다.