Zettelkasten

디스크는 블록 단위로 데이터를 읽고 쓴다

·수정 2026.04.23·수정 3

요약

  • 디스크는 1바이트만 읽는 것이 불가능하고, 무조건 블록 단위(보통 4KB~16KB)로 읽어야 한다
  • 디스크 헤드 이동(seek time) 비용이 크기 때문에, 한 번 움직이면 뭉텅이로 읽는 것이 효율적

본문

왜 블록 단위인가?

디스크(HDD/SSD)의 물리적 특성 때문:

  • HDD: 디스크 헤드를 원하는 트랙으로 이동시키는 시간(seek time)이 ms 단위로 느림
  • 한 번 헤드를 움직였으면 주변 데이터까지 한꺼번에 읽는 게 효율적
디스크 요청: "100번 주소의 1바이트 읽어줘"
실제 동작: "100번 주소가 포함된 4KB 블록 전체를 읽음"

블록 크기

  • OS/파일시스템 레벨: 보통 4KB
  • 데이터베이스 페이지: 8KB (PostgreSQL), 16KB (MySQL InnoDB)

설계에 미치는 영향

B-Tree 노드 크기를 블록 크기에 맞춤

  • 노드 1개 = 블록 1개가 되도록 설계
  • 노드가 블록 경계를 넘으면(예: 8KB 블록인데 9KB 노드) → 2번의 I/O 발생

Trade-off

장점 단점
Spatial locality 활용 작은 데이터도 전체 블록 I/O
인접 데이터 prefetch 효과 I/O amplification 발생 가능

참고