Ryu's Tech

AWS SAA 자격증 공부-3. S3

Ryusstory 2018. 11. 19. 21:10

S3란?

S3는 Simple Storage Service로 간단한 저장소 서비스를 제공한다.

저장소는 블록 스토리지와 오브젝트 스토리지로 나뉠 수 있는데, S3는 오브젝트 기반 스토리지이다.

블록 스토리지는 일반 하드디스크 처럼 읽고 쓰기가 잦은 시스템에 적합하고, 오브젝트 스토리지는 적게 쓰고 많이 읽는 시스템에 적합하다.

예를들면 웹서비스의 앞단(front-end)은 S3와 같은 오브젝트 스토리지가 적합하고, 뒷단(back-end)의 시스템이 돌아가는 서버의 저장소는 블록 스토리지(ebs)가 적합하다.

기본지식 및 특징

기본적인 스펙

1. S3는 오브젝트 스토리지(업로드/다운로드 형태)

2. 5테라까지 지원

3. 무제한 용량

4. 버킷(Bucket)에 저장됨

5. 버킷 이름은 유일해야함

6. 주소 구성 s3.[리전].amazonaws.com/[버킷명] >> https://s3.ap-northeast-2.amazonaws.com/ryustory

7. 업로드 성공시 200을 반환

일관성

시험 단골 문제라고 한다.

S3의 일관성 모델에 대한 이야기인데, 이해에 도움이 될만한 글을 봐도 도움이 될 것 같다.

혹은 AWS 공식 문서에 나와있는 일관성 모델을 보는 것이 더 좋을 것 같다. 하지만 늘상 그렇듯 aws 문서는 친절하지만 어렵기도 하다.

게다가 문제는 한글 번역은 "읽기 후 쓰기" 영어 원문은 "read-after-write"이다. 오해하기 딱 좋다.

아무튼 정리하면 아마존 S3에서 제대로된 응답을 얻기 위해서는 쓰고나서 한번 읽어줘야한다.

말 그대로 어떤 파일을 PUT 한뒤 GET으로 받아줘야 한다는 이야기이다.

윗글에 소개한 것처럼 해당 내용을 읽어보면 PUT/GET 순서가 아니라 GET/PUT/GET 순서라던가 PUT/PUT/GET 의 순서로 테스트하면 잘못된(이전의) 결과가 반환될 수 있다.

이는 업로드 이후 고가용성을 위해 데이터를 전파하기 때문에 발생할 수 있다.

공식 AWS 문서에 이에 대한 부분을 이미지로 잘 설명해놨다. 동시에 두 클라이언트가 쓰기 읽기를 할 경우 어떤 응답이 발생할 수 있는지 표현해놨다. Eventual Consistent Read의 경우도 중요하다.

Eventual Consistency는 데이터의 가용성 보장을 높이기 위해, 완벽히 전파 되기 전에는 이전 데이터를 보낼 수 있다는 것인데, 이렇게 처리해서 Consistency는 좀 약하게 보장하지만 이전의 결과 까지도 응답으로 처리 할 수 있기 때문에 Availability의 기준을 낮추게 되므로 더 보장 할 수 있다.

Key-Value Store

S3는 아래와 같은 오브젝트로 구성되어 있다.

Key - 오브젝트 이름, 파일명.

Value - 실제 데이터

Version ID - 파일 업데이트 시의 버전관리. 히스토리 관리

Metadata - 메타 데이터

Sub resources, Access Control List - 파일의 통제 가능

Sub resources, Torrent - 토렌트 (시험범위 아님)

가용성 및 관리 기능

99.99% - S3 플랫폼의 가용성

99.9% - 아마존 보장

99.999999999% - S3 내구성 (9가 11개임. 중요함.) > 100,000,000,000개의 파일을 업로드하면 1개는 실패할 수 있다는 정도를 의미

Tiered-Storage - 스토리지 내 다른 스토리지 클래스 제공

Life Cycle - 라이프 사이클 관리(30일 지난 파일ㅇ르 이동 가능)

Encryption - 암호화 지원

ACL, Bucket Policy - 파일 접근 제어

티어와 클래스

파일을 업로드할때 스토리지 클래스를 선택할 수 있는데, 해당 내용은 aws 공식 페이지에 표로 잘 비교해놨다.

가용 영역이 3개 이상인 클래스는 두 곳의 가용영역에 문제가 생겨도 서비스에 이상이 없으며, Glacier의 경우 cold storage로 처음 요청시 꽤 많은 시간이 걸리게 된다.

S3 파일 업로드시 aws에서는 위 서비스 들을 아래와 같이 특징 지었다.

S3 Standard : 자주 액세스 하는 데이터

S3 - IA : 수명이 길고 자주 액세스 하지 않는 데이터

S3 One Zone - IA : 수명이 길고 자주 액세스 하지 않으며 중요하지 않은 데이터

Glacier : 데이터 아카이빙, 액세스에 3~5시간 걸려도 괜찮은 경우

요금

스토리지

요청

스토리지 관리 비용 (태그/메타데이터)

데이터 전송 비용

Transfer Accelation 요금

Transfer Accelation

AWS 공식 문서 링크

좀 더 요약하면 전세계에서 S3로 데이터 업로드 하는 구성일 경우에 CloudFront 엣지 로케이션을 통해 데이터를 전달받고 이를 aws내 인프라를 통해서 S3로 전송되게 된다.

즉, S3는 특정 리전에 생성되고 전세계에서 해당 버킷에 큰 데이터를 자주 전송하게 될 경우 고객은 고객 위치와 가까운 아마존 엣지 로케이션을 통해서 전송되므로 훨씬 속도가 향상 될 수 있다.

속도 차이가 어느 정도인지는 아마존에서 직접 만들어놓은 비교 툴이 있다. 실제 업로드 속도보다 아마 latency를 비교하는 것이 아닌가 싶다.