Logo

Amazon EC2의 스토리지 옵션

Amazon EC2(Elastic Cloud Compute)를 사용할 때 순수하게 계산만 하는 경우가 아라면 데이터를 저장할 파일 시스템이 필요하기 마련인데요. 이번 포스팅에서는 Amazon EC2에서 제공하는 다양한 블록 수준(block-level) 스토리지 옵션에 대해서 알아보겠습니다.

aws-ec2-storage

이미지 출처: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Storage.html

Amazon EBS (Elastic Block Storage)

Amazon Elastic Block Storage, 줄여서 EBS는 가장 흔하게 사용하게 되는 EC2의 스토리지입니다. 우리가 흔히 가정용 PC에서 사용하는 하드 드라이브(hard drive)를 생각하면 이해가 쉬울 것 같은데요.

하나의 PC에 여러 개의 하드 드라이브를 연결할 수 있는 것처럼 하나의 EC2 인스턴스(instance)에도 여러 개의 EBS 볼륨(volume)을 연결할 수 있습니다. 보통 이 연결 과정을 마운트(mount)라고 부르죠. 또한 보통 하나의 하드 드라이브를 여러 PC에 동시에 연결할 수 없는 것처럼 기본적으로 EBS 볼륨도 동시에 2개 이상의 EC2 인스턴스에 마운트를 할 수 없습니다.

PC의 전원을 내리거나 다른 컴퓨터로 바꾸더라도 하드 드라이브에 저장된 데이터는 그대로 보존되는 것처럼 EBS 볼륨에 저장된 데이터는 EC2 인스턴스(instance)가 정지/소멸되거나 다른 EC2 인스턴스에 마운트된다고 해서 유실되지 않습니다.

EBS의 또 다른 한계점은 하나의 가용 영역(availability zone) 범위 내에서만 유효하며 다른 가용 영역에서 필요하다면 스냅샷(snapshot)을 떠서 이전을 해줘야하는 불편함이 있습니다.

Amazon EFS (Elastic File System)

여러 EC2 인스턴스가 공유할 수 있는 파일 시스템이 필요할 때는 어떻게 해야할까요? EBS는 동시에 하나의 EC2 인스턴스에만 마운트를 할 수 있기 때문에 대안이 필요한데요.

Amazon Elastic File System, 줄여서 EFS는 마치 윈도우즈 운영체제의 공유 폴더나 구글 드라이브처럼 여러 컴퓨터가 동시에 접근할 수 있는 스토리지입니다.

EFS 볼륨은 AWS의 한 지역(region) 내에서 여러 가용 영역에 걸쳐서 사용이 가능하기 때문에, 고 가용성을 보장하면서 수평 확장하기에 용이한 아키텍쳐를 구성할 때 합리적인 옵션이 될 수 있습니다.

더 강력한 기능을 제공하는 만큼 EFS는 EBS 대비 상대적으로 비싸지만 자동 규모조정(Auto Scaling)을 활용하여 용량 최적화가 가능하며, 자주 접근되지 않는 데이터는 좀 더 저렴한 EFS IA (Infrequent Access)로 옮겨서 요금을 절약할 수도 있습니다.

EC2 Instance Store

EBS와 EFS는 둘 다 네트워크 기반 스토리지이기 때문에 물리적으로 연결되는 하드 드라이브만큼 입출력(I/O) 속도가 나오지는 않죠. 매우 빠른 입출력 속도가 필요하다면 EC2 인스턴스 스토어(Instance Store)를 고려할 수 있습니다.

ES2 인스턴스 스토어는 EC2 인스턴스와 직접 물리적으로 연결된 디스크이기 때문에 네트워크 지연이 발생하지 않습니다. 단, ES2 인스턴스 스토어에 저장된 데이터는 연결된 EC2 인스턴스가 중단되면 유실된다는 치명적인 단점도 있습니다.

EC2 인스턴스 스토어는 i3 인스턴스 타입처럼 특정 EC2 인스턴스 타입에서만 제공되며 따라서 가격도 비싼 편입니다. 그러므로 보통 버퍼(buffer)나 캐시(cache)와 같이 많은 저장 공간이 필요하지는 않지만 고성능 입출력이 필요한 경우에 제한적으로 사용됩니다.

마치면서

지금까지 EC2 인스턴스의 블록 수준(block-level) 스토리지로 많이 사용되는 3가지 옵션에 대해서 간단하게 정리해보았습니다. 이 밖에도 써드파티(3rd-party) 파일 시스템과 연결을 도와주는 Amazon FSx와 같은 옵션도 있으니 추가적으로 검색해보시면 좋을 것 같습니다.

본 포스팅에서는 파일 저장을 위한 블록 수준(block-level) 스토리지에 대해서만 다뤘으며, Amazon S3와 같은 객체 스토리지나 Amazon Aurora와 같은 관계형 데이터베이스, Dynamo DB와 같은 비관계형 데이터베이스에 대해서는 추후 기회가 되면 다른 포스팅에서 다뤄보도록 하겠습니다.