현재 진행중인 프로젝트에는 사진을 업로드하는 기능이 포함되어 있고 이를 위해 사진을 저장할 저장소가 필요했습니다.
하지만 계속해서 쌓이는 사진을 저장할만한 용량을 개인이 감당하기에는 용량이나 비용, 보안 등 여러 문제가 있었기 때문에 이를 저장해줄만한 서비스를 찾다가 AWS의 S3 제품을 알게되었습니다.
이번 글은 S3에 대한 특징과 어떤 특징때문에 S3를 선택하였는지에 대한 이야기를 담고있습니다.
1. AWS S3?
S3는 Simple Storage Service의 약자로 이름 그대로 데이터를 저장하는 저장소입니다. 언제 어디서나 데이터를 저장할 수 있도록 해주는 AWS의 제품 중 하나 입니다.
마치 네이버의 MyBox나 구글 드라이브처럼 사용할 수 있는데, 데이터 관리가 간단하고, 보안에도 뛰어나기 때문에 여러 회사에서도 이미 사용중인 서비스입니다.
S3에서 사용하는 용어가 있는데 S3를 사용하게 된다면 먼저 알고있어야 하는 내용이므로 먼저 용어에 대해 알아본 후 특징을 알아보도록 합시다.
- 버킷 : S3에 저장된 객체에 대한 컨테이너로, 데이터들을 담아둡니다. 버킷의 이름은 도메인이 되므로, 고유한 이름을 지어야 합니다.
- 객체 : 버킷에 저장되는 것으로 저장하는 파일을 생각하면 됩니다. 하나의 객체 데이터와, 해당 객체를 설명하는 메타데이터로 이루어져 있습니다.
- 키 : 객체의 고유 식별자로, 버킷의 객체들을 구분짓는데 사용합니다.
- 리전(Regions) : 사용자가 만드는 버킷의 지역
2. AWS S3의 특징
S3에는 아래에 있는 특징들 외에도 다양한 특징들이 있습니다. 아래에서는 왜 현재 서비스에 S3를 선택하였는지에 대한 이유가 되는 특징들을 정리해 보았습니다.
비용
모든 AWS의 서비스가 그러하듯 S3 또한 내가 사용한 만큼만 지불하도록 되어있습니다.
사용하는 버킷의 크기, 저장한 시간, 스토리지 클래스 등 사용하는 서비스에 따라 요금이 다르게 정해집니다.유연성
S3에 저장할 수 있는 데이터 형식이 지정되어있지 않고, 원하는 형식의 데이터를 원하는 만큼 저장할 수 있습니다.
현재 진행중인 festa의 경우 만약 우리가 직접 저장소를 만들었다면 사용자가 늘어났을 때 사진을 저장할 수 있는 용량이 부족할때가 올것이고, 아무리 서버를 확장하더라도 개인이 관리하기는 어려울 것이라 판단하였습니다. 또, 현재는 사진만을 저장중에 있으나 서비스가 확장함에 따라 다른 종류의 파일들도 저장하게 될 수 있기 때문에 S3의 유연성은 꽤 매력적이었습니다.- 데이터의 일관성
S3의 모든 버킷은 PUT이나 DELETE에 대해 ‘Read-after-Write’ 쓰기 후 읽기를 통해 일관성 있는 데이터를 제공합니다.
어떤 작업을 저장하는 중 읽기 작업이 들어온다고해서 아직 저장 중인 데이터를 함께 보여주지 않고 안전하게 모두 저장된 파일들만 제공하는 것입니다.만약 쓰기와 읽기 요청이 동시에 들어와 두 스레드가 동시에 작동할 경우라면 먼저 완료되는 것에 따라 결과가 다르다고 합니다.
복제
AWS의 경우 여러 지역에 서버가 있습니다. 현재 우리가 살고있는 한국 외에도 일본, 홍콩, 미국, 유럽 등등 여러 나라에 서버가 있으며 여러 지역 중 내가 원하는 지역을 선택하여 서버를 사용할 수 있습니다. 그리고 여러 지역에 있는 서버들은 장애를 처리하는데 사용되기도 합니다.
AWS에서는 내가 지정한 지역 외에도 다른 지역에 복제를 해두어, 나의 원본 지역에 장애가 일어날 경우 다른 지역의 복제본을 이용하여 서비스를 제공해줍니다.
그리고 이후에 문제가 해결될 경우 로그를 이용하여 동기화 합니다. 이 방법 외에도 여러 리전에 서버를 만들어 두어 Primary, Secondary 역할을 지역별로 나눠가진 후 Primary에 문제가 생기면 자동으로 Secondary가 Primary로 승격하여 서비스를 제공하기도 합니다.- 지역
만약 한국 뿐만 아니라 다른 나라에 서비스 제공을 하고싶은데 서버가 한국에만 있다면 다른 나라에서는 서비스를 이용하는데 느리기 때문에 사용자들이 불편을 느낄것입니다.
그러나 AWS는 여러 나라에 서버를 두고있기 때문에 다른 지역에도 서버를 만들어두면 다른 나라 사람들은 본인에게 가장 가까운 서버에서 데이터를 가져오기 때문에 이런 속도에 대한 불편함을 조금이나마 해소할 수 있을것입니다.
위의 특징들 외에도 S3에는 다양한 특징들이 있습니다. AWS S3 공식 문서
3. 결론
현재 진행 중인 프로젝트는 서버에 장애가 일어나더라도 사용자에게 불편함 없이 서비스를 제공해주는 것을 목표로 하고 있는데, 그런점에서 장애가 일어났을 때 복제서버에서의 데이터 제공 등의 기능은 꽤 매력적이었습니다.
그 외에도 이미지 서버의 용량이 부족하면 서버를 추가하거나 부품을 바꿔주어야 하는 Scale Out, Scale Up의 방식을 개발자가 직접 하지 않아도 되는 S3의 유연성 또한 S3를 선택하는데 도움이 되었습니다.
그러면 다음에는 실제로 코드를 작성해보고, 어떻게 동작하는지에 대한 글로 찾아오겠습니다.
참고
관련 프로젝트
- event-recommender-festa (2020-09 ~)