당신이 AWS EC2 서비스를 통해 클라우드 서버를 사용하기로 결정한다면, 간단한 개인 프로젝트 정도의 규모라면 대부분의 경우 프리 티어를 사용할 것이다.
아시다시피 프리 티어를 완전히 '무료'로 사용하기 위해서는 스토리지 용량을 30GB로 제한해야 하는데, 말이 30기가지 모듈 업데이트 하고 라이브러리 깔고 프로젝트 파일 옮기고 나면 금세 동난다.
이 때, 당신의 프로젝트가 동영상을 공유할 수 있는 플랫폼이라고 가정하자. 사용자가 업로드 한 영상을 당신의 EC2 서버에 직접 저장한다고 하면 어떻게 되겠는가? 프로젝트 설정 후에 쥐꼬리만큼 남은 당신의 서버 스토리지 잔량으로는 영상을 100개도 채 저장하지 못할 것이다.
또한, 유저 정보를 MySQL 데이터베이스를 통해 관리하는데 EC2 상에 MySQL을 깔아놓고 유저 정보 10만개를 관리한다면? 아무리 텍스트로 이루어진 유저 정보 데이터라고 할지라도 서버의 스토리지 용량을 차지할 것이고 MySQL 자체로도 용량을 차지하게 될 것이다.
우리는 이 문제들을 추가 과금을 통해 해결하고 싶지 않다. 우리의 주머니 사정은 가볍고, 아마존의 주머니 사정을 무겁다 못해 터질 지경이다. 물론 서비스를 이용하는데 비용을 지불하는 것은 당연하지만, AWS에서 제공하는 '합법적인 공짜'를 최대한 누리고 싶다. 어떻게 하면 좋을까?
이 문제를 해결하기 위해서 사용하는 AWS 서비스가 바로 S3와 RDS이다. S3는 위에서 언급한 첫 번째 문제인 'EC2에서 영상 등의 파일들을 관리하는데 생기는 한계'를 해결해 줄 것이고, RDS는 'EC2에서 데이터베이스를 사용하는데 생기는 한계'를 해결해 줄 것이다.
그러면, 이제부터 S3와 RDS가 무엇인지 하나씩 알아보자.
AWS 공식 문서에서는 S3를 다음과 같이 설명한다.
Amazon Simple Storage Service는 인터넷용 스토리지 서비스입니다. 이 서비스는 개발자가 더 쉽게 웹 규모 컴퓨팅 작업을 수행할 수 있도록 설계되었습니다.
Amazon Simple Storage Service에 S가 3개 들어가서 S3라고 부른다. 맨 앞에 A도 포함해서 ASSS라고 불렀으면 어땠을까...
S3는 쉽게 생각해서 우리가 노트북에 연결해서 사용하는 외장 하드라고 생각하면 된다. 보통 중저가 노트북을 구매하면, 아니면 맥북을 사는데 고용량을 사기엔 지갑 사정이 여유롭지 않아 저용량 맥북을 구매하면 시간이 지날수록 만성적인 용량 부족에 시달리게 된다.
이 때부터 우리는 노트북에서 지금 당장 필요하지 않거나 자주 사용하지 않는 파일들을 외장 하드로 빼내게 되는데, 주로 영상이나 음악과 같이 용량이 큰 파일들을 위주로 외장하드에 옮긴다. 'BTS 직캠 콘서트.mp4' 파일을 굳이 내 노트북의 내장 SSD에 저장할 필요는 없지 않는가?
S3는 우리가 노트북에서 사용하는 외장하드인데, 단지 '클라우드'에 존재하는 외장하드라고 생각하면 된다. 위에서 설명했듯이 EC2 내장 스토리지에 영상 파일을 저장할 필요는 없지 않는가? 따라서 이 영상들을 외장 하드에 저장하고 싶은데, EC2는 우리가 실제로 가지고 있는 PC가 아니기 때문에 외장 하드를 USB로 연결할 수 없다.
클라우드 서버인 EC2에 외장 하드를 연결하기 위한 가장 좋은 방법은, 외장 하드도 클라우드 상에 존재해 EC2에서 원격으로 접근할 수 있도록 하는 것이다. 이를 제공하는 것이 바로 AWS S3이다. 우리가 S3에 어떤 파일을 업로드하면, S3 서비스는 해당 파일을 원격으로 접근할 수 있는 URL을 제공한다. 이 URL에 접속하여 우리가 업로드 한 파일을 다운로드 받을 수 있다.
참고로 프리 티어로 S3를 사용할 수 있는 제한은 5GB다. S3를 사용함으로써, 기본 제공되는 EC2의 30GB 스토리지에 추가로 5GB를 쓸 수 있게 되었다!
( 5GB가 별거 아닌것 같지만 서버 용량이 부족할 때에는 가뭄의 단비처럼 느껴질 것이다 )
아마존에서 제공하는 대표 서비스 중 하나 답게, S3는 단순히 '외장 하드'로써의 기능만을 제공하는 것이 아니라 암호화를 자체적으로 지원하거나 업로드 한 파일의 버전 관리도 해주며, 프로젝트의 클라이언트 코드를 업로드 하여 정적 웹 사이트 호스팅도 가능하게 한다.
이 포스팅은 S3의 세부 기능들을 상세히 살펴보는 포스팅은 아니기 때문에, S3에 대한 설명은 여기에서 마치도록 하겠다.
S3 로고때부터 느꼈지만 아마존은 로고를 참 형이상학적으로 만드는 것 같다.
우리는 S3를 통해 이미지나 동영상과 같이 용량이 많이 나가는 파일들을 EC2 서버로부터 분리할 수 있었다.
그런데, DB로 관리하고 싶은 유저 정보는 S3에 저장하여 관리하기 곤란하다. S3는 단순히 파일만을 저장하고 접근할 수 있는 외장 하드이기 때문에, S3에 MySQL을 설치한 후 데이터베이스에 유저 정보를 저장할 수는 없기 때문이다. 억지로라도 S3 상에서 구현하려고 한다면 유저 정보를 csv 형식의 텍스트 파일로 저장할 수는 있겠으나, 유저 정보 수정에 어려움을 겪을 것이다.
그럼 DB는 서버로부터 분리할 수 없는가? 그건 아니다. AWS는 우리의 EC2 서버로부터 데이터베이스를 분리할 수 있는 방법을 제시해주는데, 그것이 바로 AWS RDS이다.
AWS 공식 문서에서는 RDS를 다음과 같이 설명한다.
Amazon Relational Database Service(Amazon RDS)는 AWS 클라우드에서 관계형 데이터베이스를 더 쉽게 설치, 운영 및 확장할 수 있는 웹 서비스입니다.
RDS는 쉽게 생각해서 별도의 EC2 서버라고 생각하면 된다. 하지만, 일반적인 EC2 서버가 아니라 DBMS, 즉 MySQL과 같은 데이터베이스를 원격으로 접근 및 제어할 수 있는 역할에 특화되어 있는 서버라고 할 수 있다.
RDS 서버가 MySQL을 사용하도록 구축한 후, 우리의 EC2 서버에서 유저 데이터 관련 작업을 할 때 해당 요청을 RDS 서버로 전송해주기만 한다면, 우리가 EC2 서버에 자체적으로 MySQL 데이터베이스를 관리할 필요가 없어진다.
본 포스팅에서는 MySQL을 기반으로 RDS 서버를 설명했으나, RDS는 MySQL, PostgreSQL, Oracle과 같은 현존하는 다양한 데이터베이스 제품들을 지원한다. 또한 S3와 같이 자동 백업과 같은 유용한 서비스들을 제공해주기도 한다.
가장 중요한 프리 티어 제한인데, RDS는 단순히 데이터베이스가 아니라 EC2와 동일한 '서버'라는 것을 기억해야 한다. RDS는 EC2와 같이 최대 월 750시간 동안 사용할 수 있으며, 20GB의 SSD 스토리지를 사용할 수 있다.
즉, 우리가 EC2로부터 데이터베이스를 분리해 RDS에서 관리함으로써, 기본 제공되는 EC2의 30GB 스토리지 + S3의 5GB 스토리지에 추가로 20GB를 사용할 수 있게 되었다! 55GB면 개인 프로젝트를 구현하는 데에는 충분한 용량 아닐까?
S3와 RDS를 본인의 프로젝트에서 적절히 사용하면 돈 한푼 안들이고 스토리지 걱정 없이 클라우드 상에 배포할 수 있을 것이다. 참고로 AWS에서는 DynamoDB라는 NoSQL 데이터베이스도 제공하는데, 이 데이터베이스도 25GB를 무료로 사용할 수 있다.
AWS가 지원하는 서비스를 이것 저것 뒤져보면 무료로 사용할 수 있는 서비스들이 아주 많으니, 프로젝트 시작 전에 참고하기를 권장한다.