AWS S3 (Simple Storage Service)
하나의 저장 공간을 구성하고 그 공간에 데이터를 업로드하면 인터넷을 통해 해당 파일을 자유롭게 다운로드할 수 있는 인터넷 스토리지 서비스이다.
객체 스토리지 (Object Storage)
일반적인 스토리지를 보면 예를들어 시간이 지나 수명을 다했거나, 물리적인 손상으로 데이터가 있는 영역이 손상되면 데이터의 내구성이 손상되고, 더이상 사용할 수 없게되어 가용성 또한 훼손될 수 있다.
즉, 물리장비의 한계상 언젠가는 데이터의 내구성과 가용성에 문제가 생길 수 밖에 없는데 이러한 물리적인 한계를 논리적인 방식으로 극복하고자 한 것이 객체스토리지이다.
객체스토리지는 기본적으로 내부 복제를 전제로 한다.
하나의 단위 객체가 업로드되면 자동적으로 내부의 여러 위치에 복제본을 생성한다. 이렇게 되면 어느 한 객체가 손상을 입더라도 복제본이 있기때문에 내구성이 비약적으로 상승한다. 또한 복제본도 원본과 동일하게 다운로드 요청에 사용되므로 가용성 또한 향상될 수 있다.
하지만 내부 복제에는 일정한 시간이 걸리기 때문에 내부 복제가 완료되기 전에는 각기 다른 객체의 위치에서 응답하므로 사용자 별로 응답이 다를 수 있다. 하지만 일시적인 현상이고 일정 시간이 지나면 내부 복제가 모두 완료되어 모든 사용자에게 일관된 응답을 제공하는데 이것을 S3에서 Eventual Consistency(최종 일관성)을 제공한다고 말한다.
S3(객체 스토리지)의 특징
- 객체의 생성, 삭제만 지원한다 (수정 작업은 지원하지 않음), 덮어쓰기는 가능하지만 수정하는것이 아니라 재생성하는 방식
- 객체 데이터와 관련된 부가정보는 객체 데이터 외부에 별도로 저장,관리 (Metadata)
- 각 객체의 주소값은 글로벌하게 고유해야함 (버킷명 + 키값 + (버전ID)로 각 객체를 구분)
- HTTP(S) 프로토콜을 사용하여 업로드/다운로드 수행
이러한 특징으로 S3는 데이터 수정이 빈번한 입출력 형태보다는, 객체(파일) 단위로 데이터를 한 번 저장하고 이 후에 다운로드가 많은 형태에 적합!!!!!
Bucket과 Object
S3에는 버킷과 객체로 불리는 단위가 있다.
객체는 데이터와 메타데이터로 구성된 저장 단위, 버킷은 다수의 객체를 통합하여 저장,관리,제어하는 단위이다.
버킷을 생성한 AWS 계정은 버킷의 소유자가 되며 버킷단위로 각종 기능을 관리하거나, 버킷 내 객체의 접근제어 정책을 관리한다.
Bucket(버킷)
버킷 생성 시 버킷의 이름과 위치할 region을 선택하는데 버킷의 이름은 전 세계적으로(글로벌하게) 고유해야한다.
이 후 버킷명은 객체를 호출할 때 주소값의 가장 앞에 위치하기 때문에 객체 주소도 고유하다.
S3 접근제어
S3는 두 가지 범주의 작업이 있다.
- Bucket operation : 버킷 단위의 작업
- Object operation : 객체 단위의 작업
이 두가지 범주의 작업을 제어하는 권한계층에는 3가지가 있다.
- Bucket ACL
- Object ACL
- Bucket Policy
Bucket ACL과 Object ACL는 XML 형식으로 접근권한을 정의하고 각각 버킷 단위 작업 권한, 객체 단위 작업의 권한을 제어한다.
Bucket Policy는 JSON 형식으로 접근권한을 정의하고 버킷,객체 단위 작업 모두 정의할 수 있으며, 정의하는 권한범위 또한 제한이 없다. 앞의 2가지를 사용하는 것 보단 Bucket Policy를 통해 제어하는 것이 권장된다.
S3의 Storage Class
S3에서는 4가지의 storage class를 제공하고, storage class는 버킷 단위로 고정되지않고, 동일한 버킷 내에서 각 객체별로 다른 class 적용이 가능하다.
- Standard
- Standard-IA
- RRS
- Glacier
class 별로 과금 요소가 다르기 때문에 특정 class가 가장 비싸고 싸다는 개념은 아니다.
S3의 기능
1. Static website Hosting
S3는 주로 데이터를 백업하거나 로그 데이터를 저장하는 용도로 사용된다.
S3에 저장된 객체는 인터넷을 통하여 접근이 가능하기 때문에 특정 웹사이트의 정적 콘텐츠를 S3를 통햬 제공하는 역할로 사용할 수 있는 기능으로 이 기능을 활성화하면 기본적으로 해당 버킷으로 접근할 수 있는 전용 도메인 주소를 제공한다.
2. Versioning
S3에 저장된 객체는 언제라도 사용자의 요청에 따라 삭제되거나 덮어쓰기가 발생할 수 있고, 이때 기존 데이터는 사라지게 되는데 이 기능을 버킷 단위로 활성화 시키면 객체를 구분하는 고유값 중에 versionID 항목이 추가된다.
그래서 동일 경로로 객체 데이터의 변경이 발생하더라도 기존 데이터를 보존해 주는 기능이다. 새로운 데이터로 덮어쓰기를 하면 해당 주소로 최신 객체를 응답하게 되며, 기존 데이터는 versionID 값이 추가되어 별도로 보관된다.
3. Lifecycle
이 기능은 S3에 저장되는 객체의 보관 주기를 손쉽게 설정할 수 있도록 제공하는 기능이다.
이 기능을 통하여 어느 기간이 지나면 기간이 지난 데이터를 삭제하거나 더 저렴한 storage class로 이동하는 식으로 데이터를 좀 더효율적으로 관리할 수 있다. 또한 versioning이 활성화된 버킷의 경우, 최신 version과 previous version 단위로 다른 보관 주기를 설정할 수도 있다.
좀 더 자세한 내용은 아래 참고자료를 통해 공부해야겠다!!
참조자료
'프로그래밍' 카테고리의 다른 글
REST API (0) | 2020.04.10 |
---|---|
(200108) AWS - S3, EC2, RDS (2) (0) | 2020.01.09 |
(191207) Server, Client, API, Browser (0) | 2019.12.07 |
(191117) 객체지향 프로그래밍 (OOP) - (3) (0) | 2019.11.17 |
(191117) 객체지향 프로그래밍(OOP) - (2) (0) | 2019.11.17 |
댓글