NAND Flash 내부 동작: 메모리 카드는 왜 데이터를 단순히 덮어쓸 수 없을까?
- scarlettkim7
- 6월 17일
- 2분 분량

NAND Flash 내부 동작
NAND Flash가 데이터를 다루는 방식에는 다음과 같은 세 가지 기본 전제가 있습니다.
1. NAND Flash는 Page 단위로만 데이터를 읽고 쓸 수 있습니다.
o Page 크기: 일반적으로 4KB ~ 16KB
2. 한 번 데이터를 쓴 영역은, 반드시 지워야 다시 쓸 수 있습니다.
o 덮어쓰기가 불가능합니다.
3. 지우기(Erase)는 Block 단위로만 가능합니다.
o Block 크기: 일반적으로 수 MB
최신 64GB SD 카드의 예
SD 카드마다 차이는 있지만, 최신 64GB SD 카드를 예로 들면 내부 구조는 대략 다음과 같습니다.

NAND Flash의 근본적인 문제: 덮어쓰기 불가
문제의 핵심은 NAND Flash는 이미 기록된 데이터를 덮어쓸 수 없다는 점입니다.
예를 들어, 위 그림에서 Block b2 안의 Page p3에 저장된 데이터 중 단 1 byte만 수정해야 하는 상황을 생각해 보겠습니다.
비록 변경된 데이터는 1 byte에 불과하지만, NAND Flash에서는 다음과 같은 이유로 큰 작업이 필요합니다.
NAND Flash의 최소 쓰기 단위는 Page (16KB)
NAND Flash의 최소 지우기 단위는 Block (4MB)
따라서 Controller는 내부적으로 다음 작업을 수행해야 합니다.
1. Block b2 전체(4MB)를 읽고
2. Block b2 전체를 지운 뒤
3. Page p3만 수정된 데이터로 반영하고
4. Block b2 전체(4MB)를 다시 기록
즉, 1 byte를 수정하기 위해 4MB를 읽고, 지우고, 다시 써야 하는 구조입니다.
실제로 2010년대 초반, UHS-I SD 카드가 등장하기 이전의 SD 카드들은 이와 유사한 방식으로 동작했습니다.
그 결과:
작은 데이터 변경에도 대규모 내부 작업이 필요했고
연속 쓰기 성능이 매우 낮았으며
Class 10 (10MB/s)조차 안정적으로 달성하기 어려웠습니다.
현대 SD 카드가 빨라진 이유
2010년대 초반을 기점으로 다음과 같은 기술들이 본격적으로 도입되었습니다.
Dynamic Mapping
Over-Provisioning
Garbage Collection (GC)
이 기술들의 핵심은 사용자 주소와 실제 물리 주소를 분리하는 것입니다. 이제는,
“b2의 p3에 써라”라는 요청이 들어오면
실제로는 이미 지워져 있는 다른 Page에 데이터를 기록한 뒤
그 Page를 마치 b2의 p3인 것처럼 연결(Mapping) 해 줍니다.
이 방식 덕분에:
지우기 작업이 즉시 발생하지 않고
쓰기 지연이 제거되며
연속 쓰기 속도가 비약적으로 향상되었습니다.
이러한 내부 관리 기술에 대한 자세한 내용은 이전 포스팅, "메모리 카드는 왜 불안정해질까: 오버프로비저닝, FTL, 가비지 컬렉션"을 참고해 주세요.


댓글