학습 목표

EBS는 네트워크 너머에 있는 디스크다

Amazon EBS 볼륨은 인스턴스에 물리적으로 꽂혀 있지 않습니다. 네트워크로 연결된 블록 디바이스이고, 인스턴스와는 별개의 수명을 가집니다. 이 한 가지 사실에서 실무와 시험의 결론이 대부분 따라 나옵니다.

EBS · 인스턴스 스토어 · EFS의 물리 배치 세 가지 스토리지가 인스턴스에 어떻게 붙는지를 연결 위치로 구분한 그림입니다. 인스턴스 스토어는 인스턴스가 실행 중인 호스트 서버 안에 물리적으로 들어 있는 디스크이므로 가장 빠르지만 인스턴스를 중지하거나 최대 절전 모드로 두거나 하드웨어 장애로 호스트가 교체되면 데이터가 사라집니다. 그 지점을 가위표로 표시했습니다. EBS 볼륨은 호스트 밖 네트워크 너머에 있는 블록 스토리지이며 같은 가용 영역 안에서 인스턴스에 연결됩니다. 인스턴스를 중지했다 다시 시작해도 데이터가 남고, 기본적으로 한 번에 하나의 인스턴스에 연결됩니다. EFS 는 여러 가용 영역에 마운트 대상을 두고 여러 인스턴스가 NFS 로 동시에 같은 파일 시스템을 공유합니다. "공유"와 "영속"이라는 두 요구가 각각 어디로 가는지가 이 그림의 결론입니다. 가용 영역 a 호스트 서버 EC2 인스턴스 A 인스턴스 스토어 호스트에 물리적으로 부착 EBS 볼륨 네트워크 너머 EFS 마운트 대상 (AZ a) 가용 영역 b 호스트 서버 EC2 인스턴스 B 인스턴스 스토어 호스트에 물리적으로 부착 EBS 볼륨 같은 AZ 안에서 EFS 마운트 대상 (AZ b) 하나의 EFS 파일 시스템 — 여러 AZ 의 여러 인스턴스가 동시에 공유 인스턴스 스토어가 사라지는 순간 인스턴스 중지 · 최대 절전 · 종료 하드웨어 장애로 호스트가 교체될 때 남는 쪽 EBS — 인스턴스를 중지했다 켜도 그대로 EFS — 여러 인스턴스가 동시에 읽고 씀
인스턴스 스토어 · Amazon EBS · Amazon EFS의 연결 위치 비교 — 인스턴스 스토어는 호스트에 물리적으로 붙어 있고, EBS는 네트워크 너머의 블록 볼륨이며, EFS는 여러 가용 영역의 여러 인스턴스가 동시에 공유하는 파일 시스템입니다

EBS와 인스턴스 스토어 — 무엇을 잃는가 SAA 빈출

인스턴스 스토어(instance store)는 호스트 컴퓨터에 물리적으로 붙어 있는 디스크입니다. 네트워크를 거치지 않으므로 지연이 매우 낮지만, 그 대가로 데이터가 인스턴스의 수명 동안만 유지됩니다.

Amazon EBS와 인스턴스 스토어 비교
항목 Amazon EBS 인스턴스 스토어
연결 방식 네트워크로 연결된 블록 디바이스 호스트에 물리적으로 부착된 디스크
인스턴스 재부팅 데이터 유지 데이터 유지
인스턴스 중지 · 최대 절전 데이터 유지 데이터 소실
인스턴스 종료 기본 동작은 루트 볼륨 삭제이며 설정으로 보존 가능 데이터 소실
기반 디스크 장애 인스턴스 수명과 독립적으로 유지되도록 설계되었고, 스냅샷으로 추가 보호한다 데이터 소실 — 문서가 명시하는 소실 조건이다
분리 후 재연결 가능 — 같은 가용 영역 안에서 불가 — 시작 시에만 지정할 수 있다
스냅샷 가능 불가 — AMI에도 보존되지 않는다
적합한 데이터 운영체제, 데이터베이스 파일, 유지해야 하는 애플리케이션 데이터 버퍼, 캐시, 스크래치 데이터, 여러 인스턴스에 복제해 둔 임시 데이터

표에서 가장 자주 출제되는 줄은 인스턴스 중지입니다. 중지했다 시작하면 인스턴스가 다른 호스트로 옮겨질 수 있고, 그 순간 이전 호스트의 인스턴스 스토어 데이터는 접근할 수 없게 됩니다. 재부팅은 다릅니다 — 인스턴스는 계속 같은 호스트에서 running 상태이므로 데이터가 남습니다 (5장 인스턴스 수명주기).

인스턴스 스토어를 포함하는 인스턴스 타입은 이름에 d가 붙습니다. 인스턴스 스토어가 정답이 되는 경우는 "매우 낮은 지연이 필요하고, 데이터가 사라져도 되거나 다른 곳에 복제본이 있다"는 조건이 모두 성립할 때입니다.

볼륨 타입 — SSD 넷과 HDD 둘

EBS 볼륨 타입은 API 열거값 기준으로 gp3 · gp2 · io1 · io2 · st1 · sc1 · standard입니다. 앞의 넷이 SSD, 다음 둘이 HDD이고, standard는 구세대 마그네틱 볼륨입니다. 볼륨 타입을 지정하지 않으면 기본값은 gp2입니다.

EBS 볼륨 타입별 분류 · 크기 범위 · 프로비저닝 가능한 성능
타입 분류 크기 범위 IOPS 처리량 부트 볼륨
gp3 범용 SSD 1 – 65,536 GiB (64 TiB) 3,000(기본) – 80,000 125(기본) – 2,000 MiB/s 가능
gp2 범용 SSD 1 – 16,384 GiB (16 TiB) 별도로 지정할 수 없음 — 크기가 성능을 결정 별도로 지정할 수 없음 가능
io1 프로비저닝된 IOPS SSD 4 – 16,384 GiB (16 TiB) 100 – 64,000 지정 파라미터 없음 가능
io2 프로비저닝된 IOPS SSD 4 – 65,536 GiB (64 TiB) 100 – 256,000 지정 파라미터 없음 가능
st1 처리량 최적화 HDD 125 – 16,384 GiB 지정 파라미터 없음 지정 파라미터 없음 불가
sc1 콜드 HDD 125 – 16,384 GiB 지정 파라미터 없음 지정 파라미터 없음 불가
standard 마그네틱(구세대) 1 – 1,024 GiB 지정 파라미터 없음 지정 파라미터 없음 구세대이므로 새로 쓰지 않는다
프로비저닝할 수 있는 최대 IOPS 비교. io2가 압도적으로 높고, gp3가 io1보다 높다는 것이 이 그림의 결론입니다 — "IOPS가 필요하면 무조건 프로비저닝된 IOPS 타입"이라는 옛 상식이 더 이상 성립하지 않습니다. gp2는 확인된 값이 없어 제외했습니다
볼륨 타입별 크기 범위. gp3와 io2만 64 TiB까지 올라가고, HDD 두 타입은 125 GiB부터 시작한다는 점이 선택을 가릅니다

gp3 상한은 2025년 9월에 올라갔다 SAA 빈출

gp3의 옛 값과 현행 값 비교. 세 항목이 모두 상향되었고 기준값만 그대로입니다. 이 차이를 모르면 볼륨 타입 선택 문항에서 불필요하게 비싼 답을 고르게 됩니다

SSD와 HDD — IOPS인가 처리량인가

SSD 계열은 작은 I/O가 자주 일어나는 트랜잭션 워크로드에, HDD 계열은 큰 블록을 순차적으로 읽고 쓰는 스트리밍 워크로드에 맞습니다. 판단 기준은 "빠른가"가 아니라 지배적인 성능 지표가 IOPS인가 처리량인가입니다.

HDD 두 타입에는 결정적인 제약이 하나 더 있습니다 — st1과 sc1은 부트 볼륨으로 쓸 수 없습니다. "운영체제를 sc1에 올려 비용을 줄인다"는 선택지는 그 자리에서 소거됩니다.

볼륨 타입 선택 기준

요구사항에 따른 EBS 볼륨 타입 배정
요구사항 선택 근거
대부분의 범용 워크로드, 부트 볼륨 gp3 기준 성능이 크기와 무관하고, 필요한 만큼만 성능을 따로 올릴 수 있다
매우 높은 IOPS가 지속적으로 필요한 데이터베이스 io2 프로비저닝 가능한 IOPS 상한이 가장 높다
여러 인스턴스가 한 볼륨을 동시에 붙여야 함 io1 또는 io2 멀티 어태치는 이 두 타입에서만 지원된다
큰 파일을 순차적으로 읽는 빅데이터 · 로그 처리 st1 처리량 중심 워크로드에 맞고 SSD보다 저렴하다. 단 부트 볼륨 불가
접근 빈도가 매우 낮은 아카이브성 데이터 sc1 EBS 계열에서 가장 저렴하다. 단 부트 볼륨 불가
지연이 극도로 낮아야 하고 데이터는 휘발성이어도 됨 인스턴스 스토어 네트워크를 거치지 않는다. 대신 중지·종료 시 소실된다

비용 관점의 기본 판단은 gp2를 쓰고 있다면 gp3로 옮기는 것입니다. gp2는 성능이 크기에 묶여 있어서, 성능이 필요하면 필요 없는 용량까지 사야 합니다. gp3는 용량과 성능을 따로 정하므로 같은 성능을 더 작은 용량으로 얻을 수 있습니다.

인스턴스 쪽 한계도 함께 본다

볼륨에 IOPS를 아무리 프로비저닝해도 인스턴스가 받아 주지 못하면 소용이 없습니다. API 문서는 Nitro 시스템 기반 인스턴스는 최대 256,000 IOPS를, 그 외 인스턴스는 최대 32,000 IOPS를 지원한다고 명시합니다. 또한 인스턴스에 붙일 수 있는 EBS 볼륨 개수는 인스턴스 타입에 따라 다르고, 한도를 넘기면 연결 요청이 실패합니다. 스토리지 성능은 볼륨과 인스턴스 두 쪽의 최솟값이라는 점을 기억합니다.

볼륨 변경 — 대체로 무중단

현재 세대 인스턴스에 붙어 있는 볼륨이라면 크기 · 볼륨 타입 · IOPS를 인스턴스를 멈추지 않고 변경할 수 있습니다. 변경이 끝난 뒤에는 운영체제에서 파일 시스템을 확장해야 늘어난 공간을 쓸 수 있습니다. 하나의 볼륨은 24시간 이동 구간 안에서 최대 4회까지 변경할 수 있고, 이전 변경이 완료되기 전에는 다음 변경을 시작할 수 없습니다.

modify-volume.sh — gp2 볼륨을 gp3로 전환하며 성능을 지정 (리소스 ID는 예시입니다)
aws ec2 modify-volume \
  --volume-id vol-0123456789abcdef0 \
  --volume-type gp3 \
  --iops 6000 \
  --throughput 250

# 변경 진행 상황 확인
aws ec2 describe-volumes-modifications \
  --volume-ids vol-0123456789abcdef0 \
  --query 'VolumesModifications[].[ModificationState,Progress,TargetVolumeType]' \
  --output table

스냅샷 — 증분으로 저장되고 복원은 즉시 시작된다

EBS 스냅샷은 볼륨의 데이터를 Amazon S3에 백업하는 시점 복사본입니다. 여기서 "S3에 저장된다"는 것은 AWS가 관리하는 영역이라는 뜻이고, 우리 계정의 S3 버킷에 객체로 보이지는 않습니다.

증분 스냅샷의 실제 동작

볼륨의 첫 스냅샷은 전체 스냅샷이고, 이후 스냅샷은 직전 스냅샷 이후 변경되거나 추가된 블록만 담습니다. 전체 스냅샷의 크기도 볼륨 크기가 아니라 실제로 쓰인 데이터 크기로 정해집니다. 200 GiB 볼륨에 50 GiB만 쓰여 있다면 첫 스냅샷은 50 GiB입니다.

여기서 자주 놓치는 지점이 삭제 동작입니다. 스냅샷을 지우면 그 스냅샷만 참조하던 데이터만 제거되고, 다른 스냅샷도 참조하는 블록은 남습니다. 그래서 스냅샷을 하나 지웠다고 저장 비용이 그만큼 줄지 않습니다.

복원은 반대 방향입니다. 스냅샷으로 볼륨을 만들면 데이터가 백그라운드에서 로드되는 동안에도 볼륨을 바로 쓸 수 있고, 아직 로드되지 않은 블록에 접근하면 그 블록을 즉시 내려받습니다. "복원이 끝날 때까지 기다려야 한다"는 서술은 사실이 아닙니다.

사용 중인 볼륨의 스냅샷도 찍을 수 있지만, 스냅샷은 명령을 낸 시점까지 볼륨에 기록된 데이터만 담습니다. 애플리케이션이나 운영체제가 캐시에 들고 있던 데이터는 빠질 수 있으므로, 일관성이 중요하면 파일 시스템 쓰기를 잠깐 멈추거나 볼륨을 언마운트한 뒤 찍습니다. 여러 볼륨에 걸친 다중 볼륨 스냅샷을 쓰면 인스턴스에 붙은 볼륨들의 시점을 맞춰 한 번에 찍을 수 있습니다.

스냅샷 · AMI · 볼륨의 관계

스냅샷 · AMI · 볼륨의 관계 EBS 볼륨에서 출발해 스냅샷과 AMI 가 만들어지고 다시 볼륨으로 돌아오는 관계도입니다. 첫 스냅샷은 볼륨의 모든 블록을 담고, 이후 스냅샷은 직전 스냅샷 이후 바뀐 블록만 담는 증분입니다. 다만 증분이라는 것은 저장 방식일 뿐이어서 어떤 스냅샷 하나로도 볼륨 전체를 복원할 수 있습니다. AMI 는 스냅샷 하나 이상에 인스턴스를 시작하는 데 필요한 메타데이터, 즉 블록 디바이스 매핑과 아키텍처, 커널 정보를 더한 것입니다. 리전 사이의 이동은 스냅샷 단위로 일어나며, 복사된 스냅샷은 대상 리전에서 독립된 스냅샷이 됩니다. AMI 를 등록 취소해도 그 AMI 가 참조하던 스냅샷은 자동으로 지워지지 않으므로 따로 지워야 합니다. EBS 볼륨 인스턴스에 연결 스냅샷 1 전체 블록 스냅샷 2 바뀐 블록만 (증분) 스냅샷 3 바뀐 블록만 (증분) 시작 메타데이터 블록 매핑 · 아키텍처 AMI 스냅샷 + 메타데이터 다른 리전으로 복사 스냅샷 단위로만 새 볼륨 생성 다른 AZ 에도 가능 EBS 볼륨 복원 완료 증분은 저장 방식일 뿐입니다 — 어느 스냅샷 하나로도 볼륨 전체를 복원할 수 있습니다 AMI 를 등록 취소해도 스냅샷은 지워지지 않습니다 AMI 등록 취소(deregister)와 스냅샷 삭제는 별개의 동작이므로 스냅샷을 따로 지워야 저장 공간이 회수됩니다 리전 간 이동은 항상 스냅샷 복사로 일어나며, 복사본은 대상 리전의 독립된 스냅샷이 됩니다
볼륨에서 스냅샷으로, 스냅샷에서 AMI와 새 볼륨으로 이어지는 관계 — AMI는 스냅샷에 시작 메타데이터와 블록 디바이스 매핑을 더한 것이고, 리전 간 이동은 스냅샷 또는 AMI 복사로 일어납니다

AMI는 스냅샷 + 시작 메타데이터라고 이해하면 관계가 정리됩니다. EBS 기반 인스턴스에서 AMI를 만들면 연결된 볼륨의 스냅샷이 함께 생성되고, AMI에는 그 스냅샷을 어떤 디바이스에 붙일지 적은 블록 디바이스 매핑이 들어갑니다. 루트 볼륨 스냅샷 하나만 가지고 RegisterImage로 AMI를 만들 수도 있습니다.

스냅샷 · AMI · 볼륨의 범위와 이동 방법
리소스 범위 다른 위치로 옮기는 방법
EBS 볼륨 가용 영역 단위 스냅샷을 찍고 다른 가용 영역에서 볼륨을 새로 만든다
스냅샷 리전 단위 CopySnapshot으로 다른 리전에 복사한다
AMI 리전 단위 CopyImage로 복사하며, 복사는 대상 리전에서 시작한다

재해 복구 설계에서 이 표가 그대로 쓰입니다. 다른 리전으로 워크로드를 옮길 수 있게 하려면 스냅샷이나 AMI를 미리 복사해 두어야 하고, 그 복사 작업 자체를 자동화하는 것이 Amazon Data Lifecycle Manager나 AWS Backup의 역할입니다 (18장 비용 최적화·마이그레이션·재해 복구).

snapshot-and-copy.sh — 스냅샷 생성과 리전 간 복사 (리소스 ID와 리전은 예시입니다)
SNAP_ID=$(aws ec2 create-snapshot \
  --volume-id vol-0123456789abcdef0 \
  --description "nightly backup" \
  --query 'SnapshotId' --output text)

aws ec2 wait snapshot-completed --snapshot-ids "$SNAP_ID"

# 복사 명령은 대상 리전에서 실행합니다.
aws ec2 copy-snapshot \
  --source-region ap-northeast-2 \
  --source-snapshot-id "$SNAP_ID" \
  --description "DR copy" \
  --encrypted \
  --region us-west-2

암호화 — 한 번 켜지면 따라다닌다

EBS 암호화는 AWS KMS 키를 써서 봉투 암호화(envelope encryption) 방식으로 동작합니다. KMS가 데이터 키를 만들고 그 데이터 키를 우리가 지정한 KMS 키로 암호화해서 볼륨 메타데이터와 함께 저장합니다. 실제 디스크 I/O는 AES-256 데이터 키로 하이퍼바이저에서 암호화되며, 평문 데이터 키는 볼륨이 인스턴스에 붙어 있는 동안 메모리에만 존재합니다.

암호화된 볼륨을 쓰면 다음 네 가지가 함께 암호화됩니다.

암호화와 복호화는 투명하게 처리되어 애플리케이션이 따로 할 일이 없고, 모든 볼륨 타입에서 암호화를 지원하며 IOPS 성능도 사실상 동일합니다. "암호화하면 느려지니 성능이 중요한 볼륨은 끈다"는 판단은 근거가 없습니다.

EBS 암호화의 전파 경로 위쪽은 암호화가 그대로 상속되는 경로입니다. KMS 키로 암호화해 만든 볼륨에서 뜬 스냅샷은 암호화 상태이고, 그 스냅샷을 복사해도, AMI 로 만들어도, 다시 볼륨으로 복원해도 암호화 상태가 유지됩니다. 한 번 암호화된 것은 스스로 풀리지 않습니다. 아래쪽은 암호화되지 않은 볼륨을 암호화 상태로 바꾸는 우회 경로입니다. 볼륨의 암호화 설정을 직접 켜는 방법은 없으므로, 먼저 스냅샷을 뜨고 그 스냅샷을 복사할 때 암호화를 지정해 암호화된 스냅샷을 만든 다음, 그 스냅샷에서 새 볼륨을 만들어 인스턴스에 다시 연결합니다. 핵심은 반드시 스냅샷 복사 단계를 거쳐야 한다는 것입니다. 암호화는 상속됩니다 암호화 볼륨 KMS 키 지정 스냅샷 암호화 유지 스냅샷 복사본 키 교체 가능 AMI 암호화 유지 새 볼륨 암호화 한 번 암호화된 것은 이 경로 어디에서도 저절로 풀리지 않습니다 미암호화 볼륨을 암호화로 바꾸는 우회 경로 미암호화 볼륨 직접 켤 수 없음 스냅샷 여전히 미암호화 복사하며 암호화 지정 이 단계가 반드시 필요 암호화 볼륨 다시 연결 볼륨을 바로 암호화로 전환하는 길은 없습니다 암호화를 나중에 켜려면 스냅샷 복사 단계를 반드시 거칩니다 스냅샷 → 암호화 지정 복사 → 새 볼륨 생성 → 인스턴스에 다시 연결 계정·리전 단위로 기본 암호화를 켜 두면 새로 만드는 볼륨이 처음부터 암호화됩니다
EBS 암호화의 전파 경로 — KMS 키로 만든 볼륨에서 나온 스냅샷과 그 스냅샷에서 만든 볼륨·AMI가 암호화를 상속하며, 미암호화 볼륨을 암호화하려면 스냅샷을 암호화 옵션으로 복사하는 단계를 거쳐야 합니다

계정 수준 기본 암호화

계정과 리전 단위로 EBS 기본 암호화를 켤 수 있습니다. 켜면 그 이후에 만드는 볼륨이 항상 암호화되며, 키를 따로 지정하지 않으면 EBS용 기본 KMS 키가 쓰입니다. 중요한 제약이 둘 있습니다.

이미 만든 미암호화 볼륨을 암호화하려면

볼륨의 암호화 상태는 제자리에서 바꿀 수 없습니다. 스냅샷을 거치는 우회 경로를 써야 합니다.

  1. 미암호화 볼륨의 스냅샷을 만듭니다.
  2. 그 스냅샷을 암호화 옵션을 켜서 복사합니다.
  3. 복사된 암호화 스냅샷에서 새 볼륨을 만듭니다.
  4. 인스턴스를 중지하고 기존 볼륨을 떼어 낸 뒤 새 볼륨을 붙입니다.

같은 이유로 암호화된 AMI를 만들려면 스냅샷 복사 단계에서 암호화를 지정하고 그 스냅샷으로 AMI를 등록합니다. 암호화된 스냅샷에서 만든 볼륨은 자동으로 암호화됩니다.

encrypt-existing-volume.sh — 미암호화 볼륨을 암호화 볼륨으로 전환 (리소스 ID는 예시입니다)
SNAP_ID=$(aws ec2 create-snapshot \
  --volume-id vol-0123456789abcdef0 \
  --query 'SnapshotId' --output text)
aws ec2 wait snapshot-completed --snapshot-ids "$SNAP_ID"

# 복사 단계에서 암호화를 켭니다. 고객 관리형 키를 지정할 수 있습니다.
ENC_SNAP=$(aws ec2 copy-snapshot \
  --source-region ap-northeast-2 \
  --source-snapshot-id "$SNAP_ID" \
  --encrypted \
  --kms-key-id alias/ebs-app-key \
  --query 'SnapshotId' --output text)

aws ec2 create-volume \
  --snapshot-id "$ENC_SNAP" \
  --availability-zone ap-northeast-2a \
  --volume-type gp3

멀티 어태치 — 공유 파일 시스템이 아니다

EBS 멀티 어태치(Multi-Attach)는 볼륨 하나를 여러 인스턴스에 동시에 붙이는 기능입니다. 조건이 상당히 엄격합니다.

멀티 어태치의 조건과 제약
항목 내용
지원 볼륨 타입 io1과 io2만 지원한다
연결 가능 인스턴스 같은 가용 영역의 Nitro 시스템 기반 인스턴스 최대 16대
기본값 비활성. 볼륨 생성 시 명시적으로 켜야 한다
부트 볼륨 불가
파일 시스템 XFS·EXT4 같은 일반 파일 시스템은 쓸 수 없다. 클러스터 파일 시스템이 필요하다
I/O 펜싱 지원하지 않는다. 쓰기 순서 제어는 애플리케이션의 책임이다
성능 연결된 인스턴스들의 합산 성능이 볼륨의 프로비저닝된 성능을 넘지 못한다

흔한 오해

시험 포인트 정리

확인 문제

이 장의 핵심을 확인하는 10문항입니다. 키보드만으로 완주할 수 있습니다 — 숫자키 1~5로 선택지를 고르고 Enter로 제출합니다.

이어서 볼 곳

공식 문서 출처

이 장의 수치 · 기본값 · 동작은 모두 아래 문서에서 확인했습니다.