블록 및 파일 스토리지 (EBS/EFS vs Persistent Disk/Filestore)

블록 및 파일 스토리지 (EBS/EFS vs Persistent Disk/Filestore)

1. 스토리지 유형 비교

1.1 블록 vs 파일 vs 객체 스토리지

유형 특징 사용 사례 AWS GCP
블록 저수준 디스크 접근 DB, OS 부팅 디스크 EBS Persistent Disk
파일 공유 파일시스템 공유 스토리지, CMS EFS Filestore
객체 HTTP 기반, 무제한 백업, 미디어, 로그 S3 Cloud Storage

1.2 서비스 매핑

기능 AWS GCP
블록 스토리지 EBS (Elastic Block Store) Persistent Disk (PD)
공유 파일 스토리지 EFS (Elastic File System) Filestore
로컬 SSD Instance Store Local SSD

2. 블록 스토리지

2.1 AWS EBS (Elastic Block Store)

EBS 볼륨 유형:

유형 용도 IOPS 처리량 비용
gp3 범용 SSD 최대 16,000 최대 1,000 MB/s 낮음
gp2 범용 SSD (이전) 최대 16,000 최대 250 MB/s 중간
io2 프로비저닝 IOPS 최대 64,000 최대 1,000 MB/s 높음
st1 처리량 최적화 HDD 최대 500 최대 500 MB/s 낮음
sc1 콜드 HDD 최대 250 최대 250 MB/s 매우 낮음
# EBS 볼륨 생성
aws ec2 create-volume \
    --availability-zone ap-northeast-2a \
    --size 100 \
    --volume-type gp3 \
    --iops 3000 \
    --throughput 125 \
    --tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=MyVolume}]'

# EC2에 볼륨 연결
aws ec2 attach-volume \
    --volume-id vol-1234567890abcdef0 \
    --instance-id i-1234567890abcdef0 \
    --device /dev/sdf

# 인스턴스 내에서 마운트
sudo mkfs -t xfs /dev/xvdf
sudo mkdir /data
sudo mount /dev/xvdf /data

# fstab에 추가 (영구 마운트)
echo '/dev/xvdf /data xfs defaults,nofail 0 2' | sudo tee -a /etc/fstab

2.2 GCP Persistent Disk

Persistent Disk 유형:

유형 용도 IOPS (읽기) 처리량 (읽기) 비용
pd-standard HDD 최대 7,500 최대 180 MB/s 낮음
pd-balanced SSD (균형) 최대 80,000 최대 1,200 MB/s 중간
pd-ssd SSD (고성능) 최대 100,000 최대 1,200 MB/s 높음
pd-extreme 고IOPS SSD 최대 120,000 최대 2,400 MB/s 매우 높음
# Persistent Disk 생성
gcloud compute disks create my-disk \
    --zone=asia-northeast3-a \
    --size=100GB \
    --type=pd-ssd

# VM에 디스크 연결
gcloud compute instances attach-disk my-instance \
    --disk=my-disk \
    --zone=asia-northeast3-a

# 인스턴스 내에서 마운트
sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
sudo mkdir /data
sudo mount -o discard,defaults /dev/sdb /data

# fstab에 추가
echo UUID=$(sudo blkid -s UUID -o value /dev/sdb) /data ext4 discard,defaults,nofail 0 2 | sudo tee -a /etc/fstab

3. 스냅샷

3.1 AWS EBS 스냅샷

# 스냅샷 생성
aws ec2 create-snapshot \
    --volume-id vol-1234567890abcdef0 \
    --description "My snapshot" \
    --tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=MySnapshot}]'

# 스냅샷 목록 조회
aws ec2 describe-snapshots \
    --owner-ids self \
    --query 'Snapshots[*].[SnapshotId,VolumeId,StartTime,State]'

# 스냅샷에서 볼륨 복원
aws ec2 create-volume \
    --availability-zone ap-northeast-2a \
    --snapshot-id snap-1234567890abcdef0 \
    --volume-type gp3

# 스냅샷 복사 (다른 리전)
aws ec2 copy-snapshot \
    --source-region ap-northeast-2 \
    --source-snapshot-id snap-1234567890abcdef0 \
    --destination-region us-east-1

# 스냅샷 삭제
aws ec2 delete-snapshot --snapshot-id snap-1234567890abcdef0

자동 스냅샷 (Data Lifecycle Manager):

# DLM 정책 생성 (매일 스냅샷, 7일 보관)
aws dlm create-lifecycle-policy \
    --description "Daily snapshots" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::123456789012:role/AWSDataLifecycleManagerDefaultRole \
    --policy-details '{
        "ResourceTypes": ["VOLUME"],
        "TargetTags": [{"Key": "Backup", "Value": "true"}],
        "Schedules": [{
            "Name": "DailySnapshots",
            "CreateRule": {"Interval": 24, "IntervalUnit": "HOURS", "Times": ["03:00"]},
            "RetainRule": {"Count": 7}
        }]
    }'

3.2 GCP 스냅샷

# 스냅샷 생성
gcloud compute snapshots create my-snapshot \
    --source-disk=my-disk \
    --source-disk-zone=asia-northeast3-a

# 스냅샷 목록 조회
gcloud compute snapshots list

# 스냅샷에서 디스크 복원
gcloud compute disks create restored-disk \
    --source-snapshot=my-snapshot \
    --zone=asia-northeast3-a

# 스냅샷 삭제
gcloud compute snapshots delete my-snapshot

스냅샷 스케줄:

# 스케줄 정책 생성 (매일, 7일 보관)
gcloud compute resource-policies create snapshot-schedule daily-snapshot \
    --region=asia-northeast3 \
    --max-retention-days=7 \
    --start-time=04:00 \
    --daily-schedule

# 디스크에 스케줄 연결
gcloud compute disks add-resource-policies my-disk \
    --resource-policies=daily-snapshot \
    --zone=asia-northeast3-a

4. 볼륨 확장

4.1 AWS EBS 볼륨 확장

# 1. 볼륨 크기 수정 (온라인 가능)
aws ec2 modify-volume \
    --volume-id vol-1234567890abcdef0 \
    --size 200

# 2. 수정 상태 확인
aws ec2 describe-volumes-modifications \
    --volume-id vol-1234567890abcdef0

# 3. 인스턴스 내에서 파일시스템 확장
# XFS
sudo xfs_growfs -d /data

# ext4
sudo resize2fs /dev/xvdf

4.2 GCP Persistent Disk 확장

# 1. 디스크 크기 확장 (온라인 가능)
gcloud compute disks resize my-disk \
    --size=200GB \
    --zone=asia-northeast3-a

# 2. 인스턴스 내에서 파일시스템 확장
# ext4
sudo resize2fs /dev/sdb

# XFS
sudo xfs_growfs /data

5. 파일 스토리지

5.1 AWS EFS (Elastic File System)

특징: - NFS v4.1 프로토콜 - 자동 확장/축소 - 멀티 AZ 지원 - 최대 수천 개 EC2 동시 연결

# 1. EFS 파일 시스템 생성
aws efs create-file-system \
    --performance-mode generalPurpose \
    --throughput-mode bursting \
    --encrypted \
    --tags Key=Name,Value=my-efs

# 2. 마운트 타겟 생성 (각 서브넷)
aws efs create-mount-target \
    --file-system-id fs-12345678 \
    --subnet-id subnet-12345678 \
    --security-groups sg-12345678

# 3. EC2에서 마운트
sudo yum install -y amazon-efs-utils
sudo mkdir /efs
sudo mount -t efs fs-12345678:/ /efs

# 또는 NFS로 마운트
sudo mount -t nfs4 -o nfsvers=4.1 \
    fs-12345678.efs.ap-northeast-2.amazonaws.com:/ /efs

# fstab에 추가
echo 'fs-12345678:/ /efs efs defaults,_netdev 0 0' | sudo tee -a /etc/fstab

EFS 스토리지 클래스: | 클래스 | 용도 | 비용 | |--------|------|------| | Standard | 자주 액세스 | 높음 | | Infrequent Access (IA) | 드문 액세스 | 낮음 | | Archive | 장기 보관 | 매우 낮음 |

# 수명 주기 정책 설정 (30일 후 IA로 이동)
aws efs put-lifecycle-configuration \
    --file-system-id fs-12345678 \
    --lifecycle-policies '[{"TransitionToIA":"AFTER_30_DAYS"}]'

5.2 GCP Filestore

특징: - NFS v3 프로토콜 - 사전 프로비저닝된 용량 - 고성능 옵션 제공

Filestore 티어: | 티어 | 용량 | 성능 | 용도 | |------|------|------|------| | Basic HDD | 1TB-63.9TB | 100 MB/s | 파일 공유 | | Basic SSD | 2.5TB-63.9TB | 1,200 MB/s | 고성능 | | Zonal | 1TB-100TB | 최대 2,560 MB/s | 고성능 워크로드 | | Enterprise | 1TB-10TB | 최대 1,200 MB/s | 미션 크리티컬 |

# 1. Filestore 인스턴스 생성
gcloud filestore instances create my-filestore \
    --zone=asia-northeast3-a \
    --tier=BASIC_SSD \
    --file-share=name=vol1,capacity=2.5TB \
    --network=name=default

# 2. Filestore 정보 조회
gcloud filestore instances describe my-filestore \
    --zone=asia-northeast3-a

# 3. VM에서 마운트
sudo apt-get install -y nfs-common
sudo mkdir /filestore
sudo mount 10.0.0.2:/vol1 /filestore

# fstab에 추가
echo '10.0.0.2:/vol1 /filestore nfs defaults,_netdev 0 0' | sudo tee -a /etc/fstab

6. 로컬 SSD

6.1 AWS Instance Store

Instance Store는 EC2 인스턴스에 물리적으로 연결된 임시 스토리지입니다.

특징: - 인스턴스 중지/종료 시 데이터 손실 - 매우 높은 IOPS - 추가 비용 없음 (인스턴스 가격에 포함)

# Instance Store가 있는 인스턴스 유형 확인
aws ec2 describe-instance-types \
    --filters "Name=instance-storage-supported,Values=true" \
    --query 'InstanceTypes[*].[InstanceType,InstanceStorageInfo.TotalSizeInGB]'

# 예: i3.large, d2.xlarge 등

# 인스턴스 내에서 마운트
sudo mkfs.xfs /dev/nvme1n1
sudo mkdir /local-ssd
sudo mount /dev/nvme1n1 /local-ssd

6.2 GCP Local SSD

# Local SSD가 있는 인스턴스 생성
gcloud compute instances create my-instance \
    --zone=asia-northeast3-a \
    --machine-type=n2-standard-4 \
    --local-ssd=interface=NVME \
    --local-ssd=interface=NVME

# 인스턴스 내에서 마운트
sudo mkfs.ext4 /dev/nvme0n1
sudo mkdir /local-ssd
sudo mount /dev/nvme0n1 /local-ssd

Local SSD 특징: - 375GB 단위로 추가 - 최대 24개 (9TB) - 인스턴스 중지 시 데이터 손실 - Live Migration 불가 (일부)


7. 성능 최적화

7.1 IOPS vs 처리량

IOPS (Input/Output Per Second):
- 초당 읽기/쓰기 작업 수
- 작은 랜덤 I/O에 중요
- 데이터베이스, 트랜잭션 처리

처리량 (Throughput):
- 초당 전송 데이터량 (MB/s)
- 큰 순차 I/O에 중요
- 비디오 스트리밍, 빅데이터

7.2 최적화 팁

AWS EBS:

# gp3 IOPS/처리량 조정
aws ec2 modify-volume \
    --volume-id vol-xxx \
    --iops 10000 \
    --throughput 500

# EBS 최적화 인스턴스 사용
aws ec2 run-instances \
    --instance-type m5.large \
    --ebs-optimized \
    ...

GCP Persistent Disk:

# 더 큰 디스크 = 더 높은 성능
# pd-ssd 100GB: 최대 3,000 IOPS
# pd-ssd 500GB: 최대 15,000 IOPS
# pd-ssd 1TB: 최대 30,000 IOPS

# 성능을 위해 디스크 크기 증가
gcloud compute disks resize my-disk --size=500GB

8. 비용 비교

8.1 블록 스토리지 비용 (서울 리전)

유형 AWS EBS GCP PD
범용 SSD $0.114/GB (gp3) | $0.102/GB (pd-balanced)
고성능 SSD $0.138/GB (io1) | $0.180/GB (pd-ssd)
HDD $0.054/GB (st1) | $0.044/GB (pd-standard)

8.2 파일 스토리지 비용

서비스 비용
AWS EFS Standard ~$0.33/GB/월
AWS EFS IA ~$0.025/GB/월
GCP Filestore Basic SSD ~$0.24/GB/월
GCP Filestore Basic HDD ~$0.12/GB/월

9. 실습: 공유 스토리지 설정

9.1 AWS EFS 멀티 인스턴스 마운트

# 1. 두 개의 서브넷에 마운트 타겟 생성
aws efs create-mount-target --file-system-id fs-xxx --subnet-id subnet-1 --security-groups sg-xxx
aws efs create-mount-target --file-system-id fs-xxx --subnet-id subnet-2 --security-groups sg-xxx

# 2. 보안 그룹에 NFS 규칙 추가
aws ec2 authorize-security-group-ingress \
    --group-id sg-xxx \
    --protocol tcp \
    --port 2049 \
    --source-group sg-instance

# 3. 각 인스턴스에서 마운트
# Instance 1
sudo mkdir /shared && sudo mount -t efs fs-xxx:/ /shared
echo "Hello from Instance 1" | sudo tee /shared/test.txt

# Instance 2
sudo mkdir /shared && sudo mount -t efs fs-xxx:/ /shared
cat /shared/test.txt  # "Hello from Instance 1" 출력

9.2 GCP Filestore 멀티 인스턴스 마운트

# 1. 방화벽 규칙 추가
gcloud compute firewall-rules create allow-nfs \
    --allow tcp:2049,tcp:111,udp:2049,udp:111 \
    --source-ranges 10.0.0.0/8

# 2. 각 인스턴스에서 마운트
# Instance 1
sudo mkdir /shared && sudo mount 10.0.0.2:/vol1 /shared
echo "Hello from Instance 1" | sudo tee /shared/test.txt

# Instance 2
sudo mkdir /shared && sudo mount 10.0.0.2:/vol1 /shared
cat /shared/test.txt  # "Hello from Instance 1" 출력

10. 다음 단계


참고 자료

to navigate between lessons