File StoragevsObject Storage
File Storage
。파일을계층 구조로서 관리하는저장공간
。빠른조회 / 수정이 가능하지만,확장이 제한적.
Object Storage
。파일을객체 단위(데이터 / 메타데이터 / 아이디)로 관리하는저장공간
。확장이 용이한 특징이 존재
EBS대신S3를 사용하는 이유
。S3을공용 저장소로 활용하여통합 관리를 수행함으로써용량낭비제거 및동기화를 수행
- 기존
EC2 + EBS구조의 문제
。분산 서버 환경에서컨텐츠 파일저장 시ALB의대상 그룹내 각각의EC2 인스턴스의EBS Block에 각각컨텐츠 파일을중복 저장하여용량 낭비가 발생하는 단점이 존재.
▶ 또한 해당파일수정 시 전체EBS에 대해 동일하게 수정해야하는동기화 문제도 존재
S3을 도입하는 경우
。 각EBS에는코어 파일만 저장하고,AWS S3에콘텐츠 파일을 통합적으로저장 / 관리
▶ 각EBS에 동일한컨텐츠 파일을 저장하지 않아도 되므로용량 낭비가 적고,통합 관리를 통해동기화의 이점이 존재.
Amazon S3( Simple Storage Service )
。AWS의Object Storage Service를 제공하는분산 스토리지 시스템
▶웹사이트의정적 파일 호스팅/파일스토리지/아카이빙목적으로 사용되는저장소
。S3은파일의타입을 식별할 수 없으므로,파일을객체로서 취급
▶ 다양한확장자 파일또는백업용 파일을객체로서 저장
。분산 시스템 구조에서미디어 등의 다양한확장자의파일들을 저장 및 관리하는 경우 사용
▶ 다양한분산 서버에서 공통적으로 필요한컨텐츠 파일을통합 관리
。글로벌 서비스지만,데이터는리전 단위로버킷으로서 저장
▶정책 / 법규로 인해서 특정지역에만데이터가 저장되어야 하는 경우가 존재하므로.
。무제한 용량을 지원하며,0 Byte ~ 50TB 용량을 가진파일을객체로서 저장 가능
▶50TB가 넘는객체는 분할해서 저장이 가능하므로, 실질적으로S3의용량제한은 없음.
。파일저장의 역할만 수행하므로,어플리케이션 설치는 불가능
Static Web Hosting
。S3은서버를S3 버킷으로 대체한Serverless 방식으로정적 웹사이트를호스팅하는 기능을 제공
▶Web Server역할을 수행하여React를서비스할 수 있음.
S3의내구성/가용성
。S3은Standard기준 최소 3개의AZ에데이터를분산저장하여99.999999999%의내구성을 보장하고,99.99%의가용성을 보장
▶내구성:객체( =파일)을 잃어버리지 않을 능력
Transfer Acceleration:
。AWS CloudFront를 통해다운로드를 최적화시키는 서비스
복제( Replication )
。지정된S3 버킷의 변경내역을 다른버킷으로비동기로 복제하는 기능
▶ 다른리전 / 계정의버킷으로 복제 가능
S3에파일저장 시 주의사항
。S3에파일 저장시파일명을고유하게 지정하여 저장
▶ 실무에서는YYYY_MM_DD_파일명_UUID.확장자로서 저장
。Depth별로파일을 구분하여 저장
▶ 실무에서는YYYY/MM/DD의Depth로 구분하면서파일을 저장
S3에 저장된파일을 관리하는 용도의RDBMS의파일 테이블구성
。PK
。origin_name:확장자를 제외한원본파일명
。origin_ext:원본파일의확장자
。file_name:AWS S3상 저장된파일명
。file_ext:AWS S3상 저장된파일의확장자
。file_size:파일크기
。TIMESTAMP
▶ 이후 특정Table에서S3 파일을요청하는 경우Mapping Table을 정의하여파일 테이블간매핑을 수행하여파일 요청
S3 비용
S3 데이터 보관 비용
。GB당0.023 USD발생
S3 데이터 요청 비용
。PUT / COPY / POST / LIST기준1000 건당0.005 USD발생
데이터 전송 비용
。GB당0.09 USD발생
▶ 이외암호화 / 스토리지 관리 / 복제등의 작업 시비용 발생
S3 보안 설정
。모든S3 버킷은 새로 생성 시 기본적으로Private 상태로 생성되므로, 별도로공개하지 않는 한외부에서 조회가 불가능
▶ 따로 해당버킷의퍼블릭 액세스 차단해제 및버킷 정책설정을 통해Static Web Hosting으로외부에서 접속을 통해 접근 가능.
。보안설정은객체 단위 / 버킷 단위로 구성.
▶Bucket Policy:버킷 단위
▶ACL:객체 단위
。버킷에 대해 누가 접근했는지Access Log생성 및 전송 가능{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::[버킷명]/*" } ] }▶
모든 사용자에게 해당버킷에 접근 시 내부객체 조회를 허용하는정책
버킷( Amazon Bucket )
。S3의객체(=파일)를 저장하는저장공간을 구분하는단위
▶디렉토리와 같은 개념
。버킷내부에서폴더를 생성 가능
▶버킷내폴더도객체로서 저장.
。버킷은리전 단위로 저장되지만,버킷명은전역적으로고유해야한다.
▶리전에 관계없이 중복된버킷명은 존재할 수 없음.
버킷의네이밍 컨벤션
。오직소문자,숫자,-만 사용
。길이는3 ~ 63자사이이어야 한다.
。IP 주소이면 안되며,접두사는xn--로 시작하면 안되고,접미사는-3alias로 끝나면 안된다.
▶ 보통버킷명-계정ID로 설정
ex )demo-home-bucket-904583676849
객체( Object )
。S3에서 저장하는파일
▶Owner/Key/Value/Metadata/Tags/Version ID로 구성.
Key
。S3의 각객체는Key가 존재하며,접두사 + 객체이름으로 구성되어객체를 식별
▶Key는버킷명기준파일 전체경로를 의미
ex )s3://my-bucket/my-directory/my_file.txt에서s3://my-bucket이s3://버킷명인 경우,
/my-directory/my_file.txt는Key에 해당.
▶접두사(디렉토리) :my-directory/
▶객체명:my_file.txt
Value
。Object에서Key에 의해식별되는데이터에 해당되는 부분으로서, 저장가능한 최대객체 크기는5 TB까지 지원
▶5 TB보다 큰파일을 저장 시Multi-part upload기능을 통해 여러파일로 분할하여업로드
Metadata
。파일의메타데이터를 포함하는데이터
▶객체의Key-Value List를 의미
Version ID
。해당파일의버전 ID
ACL( Access Control List )
S3 계층 구조
。실제로S3내부에는계층구조가 존재하지 않으나,객체의Key명에 포함된"/"로명시적으로계층 구조를 표현
▶폴더 만들기를 통해계층구조를 표현 가능
ex )s3://mybucket/world/southkorea/seoul/guro/map.json
。s3://버킷명
。/world/southkorea/seoul/guro/map.json:Key
▶명시적으로디렉토리 구조를 표현
s3://버킷명이하Key명에 포함된계층구조에 사용되는/는S3 버킷내폴더 만들기를 통해 표현
▶ 해당폴더내index.html저장 시s3://demo-home-bucket-904583676849/home/index.html으로 지정됨
명시적으로계층구조를 구분하는 이유?
。버킷 정책에 따라서 해당객체의권한 조정이 가능
ex )resource : "arn:aws:s3:::my-bucket/images/*"
▶my-bucket 버킷의images/로 시작하는 모든객체에 대해서...