개발놀이터

EC2 인스턴스 스토리지 (EBS, EFS) 본문

배포/AWS

EC2 인스턴스 스토리지 (EBS, EFS)

마늘냄새폴폴 2023. 10. 10. 18:25

이번 포스팅에선 EC2의 저장공간에 대해서 알아보도록 하겠습니다. 이번 포스팅은 실습보다는 이론 위주로 공부한 것을 정리해보도록 하겠습니다 (비용이 무서워서...)

 

AWS의 핵심 기능 중 하나인 EC2의 저장공간 역할을 하는 인스턴스 스토리지는 데스크탑으로 치면 하드디스크에 해당합니다. 

 

하지만 데스크탑과 다른 점은 클라우드 상에서 벌어지는 일인만큼 하드디스크에 접근하기 위해서는 네트워크 I/O가 있어야 한다는 점입니다. 그래서 실제 데스크탑에 물리적으로 연결되어 있는 하드디스크 (HDD, SSD, NVMe) 보다는 속도가 떨어집니다. 

 

하지만 유연하게 저장공간을 설정할 수도 있고 성능도 원한다면 얼마든지 커스텀할 수 있습니다. 이제 본격적으로 EC2 인스턴스 스토리지에 대해서 알아보도록 하죠!

 

EC2란?

우선 EC2에 대해서 간단하게 짚고 넘어가도록 하겠습니다. EC2는 기본적으로 AWS에게 컴퓨터 한대를 빌리는 것입니다. 가상 컴퓨터라고 해도 좋을 것 같습니다. 

 

우리가 AWS에서 EC2를 선택하고 만들면 선택할 수 있는 것들이 보통 우리가 데스크탑 견적을 짤 때 하는 행동과 비슷합니다. CPU 성능을 고르고 RAM을 고르고 하드디스크를 고르죠. 

 

EC2의 풀네임을 보면 Elastic Compute Cloud로 클라우드 상에서 유연하게 설정할 수 있는 컴퓨터 정도로 해석할 수 있습니다. 그런만큼 정말 유연하게 그때그때 필요할때마다 성능을 바꿀 수 있죠. 

 

나는 작은 프로젝트를 할거라 CPU도 작게 RAM도 작게 설정했다가 갑자기 인기폭발로 많은 사람이 몰리면 더 높은 CPU와 RAM을 설정할 수 있는 것입니다. 

 

EC2는 프리티어에서 제공해주는 micro부터 16xlarge까지 다양한 옵션이 있습니다. 보통 프로젝트를 진행하는 경우에는 medium 이상으로는 가지 않는 것 같지만 필요에 의해 xlarge를 여러개 만들어야 하는 경우 문제없이 컴퓨터를 늘릴 수 있습니다. 

 

EBS

EBS와 EFS는 EC2에 붙어있는 저장공간입니다. EC2에서 CPU와 RAM을 자유롭게 선택할 수 있었던 것 처럼 저장공간도 용량이라던가 IOPS (아이옵스라고 발음합니다. 초당 네트워크 I/O의 줄임말입니다) 를 자유롭게 선택할 수 있죠. 

 

EBS란?

EBS는 USB라고 봐도 무방합니다. EBS는 EC2에 달라붙어서 저장공간을 제공해주지만 필요에 의해 연결을 해제할 수 있습니다. 

 

EBS의 가장 눈에 띄는 특징이라고 한다면 역시 가용영역 (Availability Zone, AZ라고도 합니다) 에 종속되는 것인데요, 예를 들어서 ap-northeast-1에 할당된 EBS는 ap-northeast-2에서 사용할 수 없죠. 

 

그리고 USB처럼 하나의 EBS는 하나의 EC2에만 할당될 수 있습니다. USB도 하나의 USB는 하나의 컴퓨터에밖에 못꼽죠.하지만 반대는 가능하죠. USB도 하나의 컴퓨터에 여러개의 USB를 장착할 수 있듯이 말이죠. 

 

이를 조금 어려운 말로 "EBS는 CCP레벨로써 하나의 EBS는 하나의 EC2에만 연결이 가능하다" 라고 합니다. 

 

우리는 EC2를 만들때마다 스토리지를 구성하게 됩니다. 

 

이렇게 만들어진 볼륨은 루트볼륨이라고 합니다. EC2에서 다운받는 모든 소프트웨어의 저장을 담당합니다. 

 

루트볼륨의 특징은 인스턴스가 사라질때 자동으로 사라진다는 특징이 있습니다. 하지만 이 설정은 종료시 해제 옵션을 비활성화 함으로써 커스텀하게 설정할 수 있습니다. 

 

테스트삼아 루트볼륨과 EBS를 하나 설정했습니다. EC2 인스턴스와 연결된 스토리지들 설정 오른쪽에 보면?

 

이렇게 종료 시 삭제 옵션이 루트볼륨은 "예" EBS는 "아니요" 로 되어있습니다. 

 

이 옵션은 역시 AWS 콘솔이나 AWS CLI를 이용해 자유롭게 설정할 수 있으며 EBS 또한 EC2 인스턴스가 종료 시 삭제시킬 수도 있습니다. 

 

EBS의 볼륨 유형

EBS는 볼륨 유형이 여섯가지 있습니다. gp2/gp3, io1/io2, st1, sc1 이렇게 여섯가지죠. 각각에 대한 특징을 짚고 넘어가도록 하겠습니다. 

 

gp2/gp3

gp2와 gp3는 일반적인 SSD 성능을 가지고 넓은 범위의 워크로드와 적절한 성능을 보여줍니다. 그리고 가격도 합리적이죠. 이 둘의 차이는 gp2는 스토리지 용량에 따라 IOPS가 오토스케일링 되는 반면 gp3는 용량과 무관하게 커스텀하게 IOPS를 설정할 수 있습니다. 

 

gp2와 gp3의 기본 IOPS는 3천으로 최대 1만6천까지 증가시킬 수 있습니다. 

 

gp3는 커스텀하게 설정할 수 있지만 gp2의 경우 용량에 따라 IOPS가 결정되는 케이스이기 때문에 약 5300GB가 되어야 1만6천까지 성능이 올라갑니다. 

 

io1/io2

io1과 io2는 높은 성능의 SSD 성능을 가지고 있고 높은 수준의 워크로드와 낮은 레이턴시를 위해서 사용하는 SSD 볼륨입니다. 가격은 gp2/gp3와 비교해서 비싼 편이구요. 성능은 당연히 더 좋습니다. io1/io2를 프로비저닝된 SSD 라고도 부릅니다. 

 

만약 IOPS를 1만6천 이상 요구하는 EC2 인스턴스인 경우 고려하면 좋은 볼륨이고 AWS에선 데이터베이스를 위한 볼륨으로 적절한 볼륨이라고 소개하고 있습니다. 

 

왜냐하면 io1과 io2는 민감한 데이터에 적합하고 데이터 일관성에 초점을 맞춘 볼륨이기 때문인데요. 제 생각엔 그냥 대놓고 데이터베이스 서버에 쓰라고 만든 볼륨인 것 같네요. 

 

io1과 io2의 IOPS는 최대 3만2천까지 높일 수 있습니다. 하지만 여기서 EC2 인스턴스의 종류를 Nitro로 설정한다면 최대 6만4천까지 올라가는 것이 특징입니다. 

 

io2 중에서도 Block Express라는 단위의 볼륨이 있는데 이는 최고 IOPS가 25만6천까지 올라가는 최고 성능의 EBS 볼륨입니다. 

 

st1

st1은 낮은 HDD 볼륨으로 디자인 되어있고 자주 접근하거나 높은 수준의 워크로드를 위해 사용하는 볼륨입니다. 즉, 네트워크 I/O는 적지만 많은 용량이 필요한 경우 사용하는 볼륨이라고 생각하시면 됩니다. 

 

sc1

sc1은 가장 적은 비용으로 생성할 수 있는 EBS 볼륨입니다. 비용이 부담되는 경우 선택할 수 있는 볼륨입니다. 

 

하지만 EC2 인스턴스에선 기본적으로 st1과 sc1에 호환되지 않습니다. 때문에 기본적으로 EC2를 생성한다면 gp2로 설정되고 원한다면 gp3, io1/io2로 설정할 수 있습니다. 

 

EBS 인스턴스 스토어

EBS 볼륨에서 선택할 수 있는 IOPS중 가장 높은 수치인 25만6천보다 더 높은 IOPS를 요구하는 인스턴스인 경우엔 어떡할까요? 

 

그 땐 EBS 인스턴스 스토어를 이용하면 됩니다. 인스턴스 스토어는 엄청나게 높은 IOPS를 제공하는데 최대 330만까지 성능을 끌어올릴 수 있습니다. 

 

하지만 데이터 유실의 가능성이 있고 인스턴스가 없어지면 데이터도 같이 사라진다는 특징이 있습니다. 

 

개인적으로 인스턴스 스토어는 좋긴 하지만 이정도로 빠른 IOPS를 원한다면 차라리 ElasticCache를 이용하는게 낫지않나... 하는 생각이 들긴 합니다. 

 

EBS 스냅샷과 다중연결

EBS는 앞서 설명했듯이 다른 가용영역에 있는 EC2 인스턴스에선 사용할 수 없습니다. 하지만 같은 볼륨을 다른 가용영역에서 사용하고 싶은 경우엔 어떻게 할까요? 

 

그 땐 EBS 스냅샷을 이용하면 됩니다. EBS 스냅샷은 말그대로 그 순간 찰나의 순간을 찍어 따로 저장해두는 형태입니다. 이 스냅샷을 이용해 언제든지 EBS 볼륨을 복제할 수 있습니다. 

 

근데 그럴거면 왜 복제하는거지? 그냥 같은 EBS를 여러개의 EC2에서 사용할 수 있게 하면 안되나? 

 

AWS를 만든 개발자들도 그런 니즈를 느꼈는지 EBS를 다중연결할 수 있는 기능을 제공합니다. EBS 다중연결은 기존 CCP레벨에서 하나의 EBS는 하나의 EC2에만 연결 가능하다는 제한조건을 무시할 수 있는 설정으로서 io1/io2에서만 가능한 설정입니다. 

 

하나의 EBS 볼륨을 여러 EC2에 연결해서 사용할 수 있으며 이렇게 하면 EC2의 가용성이 올라가는 효과를 볼 수 있습니다. EBS 다중 연결은 최대 16개의 EC2에 연결해서 사용할 수 있습니다. 

 

 

이렇게 연결된 EBS 볼륨은 동시 쓰기와 동시 읽기가 가능해 마치 데이터베이스의 클러스터링처럼 사용할 수 있습니다. 데이터베이스 클러스터링과 레플리케이션에 대해서 궁금하신 분은 아래의 링크를 확인해주세요!

 

https://coding-review.tistory.com/309

 

데이터베이스 튜닝 방법 (Clustering, Replication, Sharding)

오늘 포스팅에서는 데이터베이스 튜닝 방법인 Clustering, Replication, Sharding에 대해서 알아보도록 하겠습니다. 제가 설명할 이 세가지는 바로 분산시스템을 구현하는 방법들입니다. 분산시스템 혹

coding-review.tistory.com

 

물론 이렇게 설정한 EBS 다중 연결은 가용영역에 국한되어있다는 EBS만의 특징을 해결할 순 없었습니다. 

 

EFS

EFS는 EBS와 다른 특징을 가지고 있습니다. EBS는 다양한 소프트웨어나 데이터를 저장할 수 있었다면 EFS는 파일을 저장할 수 있습니다. 워드프레스같은 파일을 여러 EC2에서 접근하고 싶을 때 사용할 수 있습니다. 

 

EBS는 가용영역에 국한되어 있고 다른 가용영역에서 동일한 EBS를 사용하고 싶다면 스냅샷을 이용해야 했습니다. 하지만 EFS는 여러 가용영역의 EC2에서 접근이 가능하고 그 숫자도 수백개나 연결할 수 있습니다. 

 

하나의 가용영역 한해서이긴 하지만 최대 16개의 EC2와 연결할 수 있었던 EBS와 차원이 다른 확장성을 보여줍니다. 

 

때문에 EFS는 높은 확장성과 높은 가용성이 필요한 경우에 사용할 수 있습니다. 하지만 그렇기 때문에 가격이 정말 무시무시한데 gp2의 약 세배정도 되는 가격을 자랑합니다. 

 

또한 EFS는 리눅스 기반 AMI에만 호환이 가능하여 windows인 경우엔 사용할 수 없는 기능이기도 합니다. 

 

비즈니스상 중요한 워드프레스를 저장하기 위해 EBS에서도 제공하는 KMS를 이용한 암호화를 제공해줍니다. 

 

이렇게 가격이 살벌한 EFS를 아무도 사용 안할것 같았는지 AWS 개발자들은 EFS에 EFS-IA라는 스토리지를 추가적으로 제공해줍니다. EFS-IA를 이용하면 파일의 생명주기를 관리해주고 가격을 절감해주는 효과를 가지고 있습니다. 

 

예를 들어 60일동안 접근하지 않은 데이터를 EFS-IA로 이동시켜 비용을 절감하는 효과를 줍니다. 

 

정리

EBS는 네트워크 볼륨을 한번에 하나의 인스턴스에 연결하고 특정 AZ에 국한되어 있는 경우에 사용하면 좋습니다. 또한, 다양한 볼륨 유형으로 애플리케이션 서버를 위한 gp2/gp3, 데이터베이스를 위한 io1/io2 등 다양한 유형을 제공해줍니다. 

 

EFS는 다수의 인스턴스에 걸쳐 연결해야하는 네트워크 파일 시스템에 적합하고 EBS와는 비교도 안될만큼의 높은 확장성과 높은 가용성을 보여주지만 그만큼 가격이 부담된다는 특징이 있습니다. 

 

EBS의 인스턴스 스토어는 기존 EBS 볼륨 유형 중 가장 높은 IOPS 수치인 25만6천보다 더 높은 IOPS를 원하는 경우 사용할 수 있지만 데이터가 유실될 수 있고 인스턴스가 종료되면 데이터가 같이 날아간다는 위험성이 있습니다. 

 

마치며

요즘 클라우드를 공부하면서 가장 기본이 되는 EC2부터 다시 공부해보자는 생각으로 EC2에 대한 기본적인 개념과 EBS, EFS에 대해서 알아봤습니다. 

 

사실 EC2라는 것은 단순히 가상 컴퓨터만을 의미하는 것은 아닙니다. AWS EC2에 들어가서 왼쪽 카테고리를 잘 보시면 다양한 기능들을 선택하고 커스텀하게 설정할 수 있습니다. ①인스턴스, ②이미지 (AMI), ③EBS, ④보안그룹 (방화벽), ⑤로드밸런서, ⑥오토 스케일링 그룹 (ASG) 

 

이렇게 여섯가지를 모두 아우르는 것이 바로 EC2입니다. 하지만 보통 EC2라고 하면 인스턴스를 말하는 것이기 때문에 EC2를 가상 컴퓨터 그 자체로 초점을 맞췄습니다. 

 

사실 인스턴스와 이미지는 딱히 설명할 것도 없고 너무 쉬운 내용이라 따로 포스팅하진 않았습니다. 때문에, 이번 기회에 EC2를 공부하면서 처음으로 EBS에 대해 공부하게 되었습니다. 

 

보안 그룹도 별거 없어서 아마 다음은 로드밸런서, 오토 스케일링 그룹을 차례대로 공부해볼 것 같습니다. 

 

로드밸런서는 몇번 만져봐서 어떤 느낌인지 알지만 오토 스케일링 그룹은 처음이라 어떤 내용이 저를 기다리고 있을지 기대됩니다. 

 

그럼 여기서 긴 글 마쳐보도록 하겠습니다. 오늘도 즐거운 하루 되세요~

'배포 > AWS' 카테고리의 다른 글

Elastic Load Balancer (ELB) : (2)  (0) 2023.10.13
Elastic Load Balancer (ELB) : (1)  (1) 2023.10.13
AWS S3  (0) 2023.08.14
AWS IAM  (0) 2023.08.14
AWS EC2 용량 부족할 때 대처법  (0) 2023.06.16