하드웨어 기초 #4 스토리지 ① 장치 — HDD / SSD / NVMe와 IOPS / 처리량 / 지연시간

6 분 소요

#3에서 메모리가 부족할 때 시스템이 빠지는 느린 곳이 디스크라고 했습니다. 그 디스크가 이번 글의 주제입니다. 데이터베이스 파일, 로그, 업로드된 이미지가 모두 스토리지 위에 살고, 종류와 성능 지표에 따라 서비스 속도가 크게 갈립니다. 디스크 한 장을 먼저 정리하고, 여러 장을 묶고 연결하는 내용은 #5에서 이어가겠습니다.

하드웨어 기초 시리즈에서 이번 글의 위치입니다.

스토리지의 기본 #

스토리지는 #3의 메모리와 두 가지가 다릅니다. 전원이 꺼져도 내용이 남는 비휘발성이고, RAM보다 훨씬 느립니다. 그 대신 용량이 크고 값이 쌉니다. 그래서 영구 보관은 스토리지가 맡고, 지금 쓰는 데이터만 메모리로 올립니다.

디스크는 데이터를 **블록(block)**이라는 일정한 크기 단위로 읽고 씁니다. 파일 하나를 바꿔도 그 파일이 걸친 블록 단위로 읽고 쓴다는 점이 뒤에서 성능 지표를 이해하는 바탕이 됩니다.

HDD — 회전하는 자기 디스크 #

**HDD(Hard Disk Drive)**는 자기를 입힌 원판을 빠르게 돌리고, 그 위를 헤드가 움직이며 데이터를 읽고 씁니다. 물리적으로 움직이는 부품이 있다는 점이 성능의 모든 것을 설명합니다.

원하는 데이터를 읽으려면 헤드가 그 위치로 이동하고(탐색), 원판이 그 지점까지 돌아와야(회전) 합니다. 이 기다림 때문에 흩어진 데이터를 읽는 임의 접근이 특히 느립니다. 반대로 한곳에 이어진 데이터를 읽는 순차 접근은 비교적 빠릅니다. 값이 싸고 용량이 커서 백업이나 대용량 보관에는 여전히 쓰입니다.

SSD — 움직이는 부품이 없다 #

**SSD(Solid State Drive)**는 플래시 메모리에 데이터를 전자적으로 저장합니다. 움직이는 부품이 없어 헤드 이동도 회전 대기도 없습니다. 그래서 임의 접근이 HDD보다 수백 배 빠르고, 위치에 따른 속도 차도 거의 없습니다.

오늘날 서버와 데이터베이스의 기본 선택지입니다. 값은 HDD보다 비싸지만 속도 차가 워낙 커서, 응답 속도가 중요한 워크로드는 사실상 SSD를 전제합니다.

NVMe — SSD를 더 빠른 통로로 #

SSD가 빨라지자 이번에는 SSD를 연결하는 통로가 병목이 됐습니다. 초기 SSD는 HDD 시절의 SATA 통로를 그대로 썼는데, 이 통로의 한계가 SSD의 속도를 눌렀습니다.

**NVMe(Non-Volatile Memory express)**는 SSD를 CPU와 가까운 고속 통로(PCIe)에 직접 연결하는 방식입니다. 같은 플래시라도 NVMe로 연결하면 SATA SSD보다 몇 배 빠릅니다. 요즘 고성능 인스턴스의 로컬 디스크는 대부분 NVMe입니다.

세 종류를 한 줄로
HDD        : 회전 원판 + 헤드      느림, 쌈, 큼
SATA SSD   : 플래시 + 옛 통로      빠름
NVMe SSD   : 플래시 + 고속 통로    가장 빠름

세 가지를 가르는 성능 지표 #

용량이 같아도 디스크 성능은 천차만별입니다. 세 지표로 갈립니다.

IOPS — 초당 입출력 횟수 #

**IOPS(Input/Output Operations Per Second)**는 1초에 읽기,쓰기 요청을 몇 번 처리하는지입니다. 작은 데이터를 여기저기서 자주 읽고 쓰는 워크로드, 예를 들어 데이터베이스가 여기에 민감합니다. 잘게 흩어진 요청이 많을수록 IOPS가 중요합니다.

처리량 — 초당 데이터 양 #

**처리량(Throughput)**은 1초에 옮기는 데이터의 양(MB/s)입니다. 큰 파일 하나를 통째로 읽거나 쓰는 워크로드, 예를 들어 동영상 파일이나 백업이 여기에 민감합니다.

지연시간 — 한 번에 걸리는 시간 #

**지연시간(Latency)**은 요청 하나를 처리하는 데 걸리는 시간입니다. 지연이 낮을수록 응답이 즉각적입니다. HDD는 ms 단위, SSD와 NVMe는 μs 단위입니다.

워크로드중요한 지표
데이터베이스IOPS, 지연작고 잦은 임의 접근
로그,백업처리량큰 데이터를 순차로
미디어 스트리밍처리량큰 파일을 이어서
캐시,세션 저장지연즉각적인 응답

요점은 용량과 속도는 다른 축이라는 것입니다. 1TB 디스크가 100GB 디스크보다 반드시 빠르지 않습니다. 빠르기는 종류와 IOPS,처리량,지연이 결정합니다.

클라우드에서 — 용량과 성능을 따로 산다 #

클라우드 디스크의 핵심은 용량과 성능을 따로 고른다는 점입니다. AWS의 EBS를 예로 들면 다음과 같이 갈립니다.

볼륨 타입성격쓰는 곳
gp3 (범용 SSD)용량과 IOPS,처리량을 따로 지정대부분의 일반 워크로드
io2 (프로비저닝 IOPS SSD)높은 IOPS를 보장IOPS에 민감한 데이터베이스
st1 (처리량 최적 HDD)순차 처리량 위주, 저렴로그,빅데이터

gp3io2가 갈리는 이유가 여기서 보입니다. 같은 SSD라도 보장하는 IOPS 수준과 가격이 다릅니다. 데이터베이스가 IOPS 한계에 부딪히면 용량이 아니라 IOPS를 올리거나 io2로 바꾸는 것이 답입니다. 인스턴스에 직접 붙은 NVMe인 인스턴스 스토어는 매우 빠르지만 인스턴스를 멈추면 데이터가 사라집니다. 이 차이는 #5에서 정리하겠습니다.

자주 만나는 함정 #

“디스크가 가득 차서 느리니 용량을 늘리자” #

용량 부족과 속도 부족은 다른 문제입니다. IOPS가 한계라면 용량을 키워도 느린 그대로입니다. 디스크 알람은 용량인지 IOPS인지부터 구분합니다.

“SSD니까 무조건 빠르다” #

같은 SSD도 SATA냐 NVMe냐, 보장 IOPS가 얼마냐에 따라 몇 배씩 차이가 납니다. “SSD"라는 한마디로는 속도를 알 수 없습니다.

“벤치마크 순차 속도를 보고 골랐다” #

제품 표기의 순차 읽기,쓰기 속도는 큰 파일 기준입니다. 데이터베이스처럼 임의 접근이 많은 워크로드는 그 숫자와 무관하게 IOPS와 지연이 좌우합니다.

“인스턴스 스토어에 중요한 데이터를 뒀다” #

인스턴스에 직접 붙은 로컬 디스크는 빠르지만, 인스턴스를 멈추거나 교체하면 사라지는 임시 저장소입니다. 영구 보관이 필요하면 EBS나 별도 스토리지를 써야 합니다.

정리 #

이번 글에서 잡은 그림입니다.

  • 스토리지는 비휘발성이고 메모리보다 느립니다. 데이터를 블록 단위로 읽고 씁니다.
  • HDD는 움직이는 부품 때문에 임의 접근이 느리고, SSD는 전자식이라 빠르며, NVMe는 SSD를 고속 통로에 직접 연결해 더 빠릅니다.
  • 성능은 IOPS(초당 횟수), 처리량(초당 양), 지연시간(한 번에 걸리는 시간)으로 갈립니다.
  • 용량과 속도는 다른 축입니다. 큰 디스크가 반드시 빠른 것은 아닙니다.
  • 클라우드는 용량과 성능을 따로 삽니다. gp3io2의 차이가 그 예입니다.

다음 — 스토리지 구성과 연결 #

디스크 한 장은 용량과 속도, 그리고 고장이라는 한계가 있습니다. 그래서 운영에서는 여러 장을 묶고 네트워크로 연결합니다. #5 스토리지 ② 구성과 연결 — RAID와 DAS / NAS / SAN에서는 디스크를 묶어 속도와 안전성을 얻는 RAID, 그리고 디스크를 서버에 붙이는 세 방식인 DAS,NAS,SAN을 정리하고, 그것이 클라우드 스토리지로 어떻게 재포장됐는지까지 보겠습니다.

X