💾 RAM은 어떻게 동작할까?
— DRAM과 SRAM 완전 정복
핵심 요약: 우리가 부르는 "RAM"은 사실 두 종류다.
빠르지만 비싼 SRAM은 캐시에, 느리지만 저렴한 DRAM은 메인 메모리에 사용된다.
1️⃣ DRAM — 우리가 아는 그 "RAM"
DRAM(Dynamic RAM) 은 현대 컴퓨터의 주기억장치(Main Memory) 로 사용되는 가장 일반적인 RAM이다.
구조: 1T1C (트랜지스터 1개 + 캐패시터 1개)
왜 "Dynamic(동적)"인가?
캐패시터에 담긴 전하는 시간이 지나면 자연적으로 누설(Leak) 된다.
데이터가 사라지기 전에 주기적으로 전기를 다시 채워야 하는데, 이 작업을 리프레시(Refresh) 라고 한다.
⚠️ 리프레시 중에는 메모리 접근이 잠시 차단된다. 이것이 DRAM 속도 저하의 원인 중 하나다.
2️⃣ SRAM — CPU 캐시 안의 RAM
SRAM(Static RAM) 은 주로 CPU 내부 캐시 메모리(L1, L2, L3) 로 사용되는 고속 메모리다.
구조: 6T (트랜지스터 6개, Flip-Flop 방식)
왜 "Static(정적)"인가?
캐패시터 없이 트랜지스터 회로의 On/Off 상태 자체로 데이터를 유지한다.
전원이 공급되는 한 데이터가 변하지 않으므로 리프레시가 전혀 필요 없다.
3️⃣ DRAM vs SRAM — 한눈에 비교
| 구분 | DRAM | SRAM |
|---|---|---|
| 구조 | 트랜지스터 1개 + 캐패시터 1개 (1T1C) | 트랜지스터 6개 (6T, Flip-Flop) |
| 리프레시 | 필요 (약 64ms마다) | 불필요 |
| 속도 | 느림 (~100ns) | 매우 빠름 (~1ns) |
| 집적도 | 높음 (소형화 유리) | 낮음 (부피 큼) |
| 가격 | 저렴 | 매우 비쌈 (DRAM의 수십 배) |
| 전력 소모 | 적음 | 많음 (대기 전력 소모) |
| 주요 용도 | 메인 메모리 (PC RAM) | CPU 캐시 (L1/L2/L3) |
4️⃣ 왜 두 가지를 섞어 사용할까?
만약 메인 메모리(16GB)를 전부 SRAM으로 만든다면?
16GB SRAM의 현실
├── 가격: 수천만 원 이상 (현재 SRAM은 GB당 수천 달러)
├── 크기: 메인보드보다 커질 수 있음
└── 전력: 발열로 인한 냉각 시스템 필요
그래서 역할에 맞게 나눠 쓰는 계층 구조가 탄생했다.
속도 (빠름 ──────────────────── 느림)
용량 (작음 ──────────────────── 큼)
비용 (비쌈 ──────────────────── 저렴)
레지스터 → L1(SRAM) → L2(SRAM) → L3(SRAM) → RAM(DRAM) → SSD/HDD
수십B 수백KB 수MB 수십MB 수십GB 수TB
| 계층 | 메모리 종류 | 전략 |
|---|---|---|
| CPU 레지스터 | — | 극소량, 극고속 |
| L1/L2/L3 캐시 | SRAM | 비싸지만 소량만 사용, 자주 쓰는 데이터 보관 |
| 메인 메모리 | DRAM | 저렴하게 대용량 구성, 전체 프로그램 데이터 보관 |
| 영구 저장소 | NAND Flash / HDD | 매우 저렴, 전원 꺼져도 데이터 유지 |
💡 핵심 원리: 자주 쓰는 데이터는 소량의 비싼 SRAM(캐시)에, 전체 데이터는 대용량의 저렴한 DRAM(메인 메모리)에 보관한다.
5️⃣ Java 개발자 관점 — DRAM이 성능에 미치는 영향
DRAM의 느린 속도는 Java 애플리케이션 성능에 직접 영향을 준다.
// ❌ DRAM 접근이 잦은 패턴 — 캐시 미스, Heap 객체 무작위 접근
List<Person> persons = new ArrayList<>();
for (Person p : persons) {
// 각 Person 객체가 Heap(DRAM) 여기저기 산재 → 매번 DRAM 접근
process(p);
}
// ✅ DRAM 접근을 줄이는 패턴 — 연속 메모리 배치
int[] ids = new int[10000];
for (int id : ids) {
// 연속 배열 → 캐시 라인에 한번에 적재 → SRAM 캐시 활용
process(id);
}
GC(Garbage Collector)와 DRAM
GC Full GC 발생 시:
Heap(DRAM) 전체 스캔 → 대량 DRAM 접근 → 애플리케이션 Pause
→ Stop-The-World 현상의 하드웨어적 원인
GC 튜닝(-Xmx, -Xms, GC 알고리즘 선택)이 중요한 이유 중 하나가
DRAM 접근 횟수를 줄이는 것과 직결되기 때문이다.
6️⃣ 핵심 정리
| 개념 | 한 줄 요약 |
|---|---|
| DRAM | 캐패시터 기반, 리프레시 필요, 느리지만 저렴 → 메인 메모리 |
| SRAM | Flip-Flop 기반, 리프레시 불필요, 빠르지만 고가 → CPU 캐시 |
| 리프레시 | DRAM이 데이터 유지를 위해 주기적으로 전하를 재충전하는 작업 |
| 계층 구조 | 비용/속도 트레이드오프로 SRAM(소량·고속)과 DRAM(대량·저속)을 혼용 |
| Java 관점 | Heap 객체의 분산 배치 → DRAM 접근 증가 → 캐시 미스 → 성능 저하 |