Node
S3란
- 사용자의 이미지 업로드 관리를 효율적으로 할 필요가 생겼다.
- 우선 EC2를 사용하여 관리할 수도 있지만, S3가 특별한 이유는 비용이 저렴하고 저장공간이 거의 무한대에 가깝다.
- 객체로 된 파일을 다루는 저장소인 객체 스토리지이다.
- EC2와는 달리 프로그램을 설치하거나 저장하는 기능은 없으며, 파일 업로드, 삭제, 업데이트만 가능하다.
- 웹하드 서비스인 FTP와 비슷하지만, 별도의 클라이언트 설치 없이도 HTTP 프로토콜(restful)로 파일 업로드,다운로드가 가능하다.
- S3 자체가 정적 웹서비스가 가능하다.(html 파일을 스토리지에 저장하고, html파일에 접근하면 홈페이지로 연결)
- 동적 웹페이지와 정적 웹페이지가 섞여있을 때 동적 웹페이지만 EC2에서 서비스하고, 정적 웹페이지는 S3를 이용하면 성능도 높이고 비용도 절감할 수 있다.
버킷과 객체
- S3에는 Bucket과 Object라는 단위가 있다.
- 객체 : 데이터와 메타 데이터를 구성하고 있는 저장단위로 파일명 개념
- 버킷 : 객체를 저장하고 관리하는 폴더의 개념
http://User.s3.amazonaws.com/profile.png
라는 주소가 생성되면,Bucket = User
,Object = profile.png
버킷
- 한 계정당 최대 100개까지 사용이 가능하고, 버킷 단위로 접근 제한을 설정할 수 있다.
- 소유권을 이전할 수 없기 때문에 주의해야 한다.
- 버킷 안에 다른 버킷을 둘 수 없으며, 생성 시 기본값으로 private한 상태이다.
- 버킷 이름은 중복될 수 없으며, 전 세계에 어디에도 중복된 이름은 존재하지 않는다.
객체
- 저장되는 데이터는 모두 객체라고 부른다.
- 최대 5TB까지 저장이 가능하며 저장할 수 있는 객체의 수는 제한이 없다.
Key
,Value
,Version ID
,Metadata
,CORS
등- Key : 파일 이름
- 버킷 내 모든 객체는 정확히 하나의 키를 갖는다.
- Key 및 Version ID 의 조합으로 각 객체를 고유하게 식별한다.
- Value : 파일의 데이터
- Key - Value와 같은 형태로 저장되지만, Key의 접두어 및 슬래시를 이용하여 폴더 개념 같이 사용이 가능하다.
/awsinaction/img/cloud.png
- Version ID : 파일의 버전 아이디
- 같은 파일이지만 다른 버전으로 올릴 수 있게 돕는 인식표라고 말할 수 있는 고유 특징 중 하나 이다.
- 만약 이전 버전으로 돌아가고 싶다면, Version ID를 통해 쉽게 복원시킬 수 있다.
- MetaData : 파일의 정보를 담은 데이터
- 최종 수정일, 파일 타입, 파일 소유자, 사이즈 등
- ACL : 파일의 권한을 담은 데이터 (접근이나 수정)
- CORS : 한 버킷의 파일을 지역을 무시하고 다른 버킷에서 접근 가능하게 해주는 기능
리전
- S3가 생성한 버킷을 저장할 위치를 나타낸다.
- 리전간 객체 공유는 불가능하다.
- 버킷 위치를 어디에 지정하냐에 따라 지연 시간, 비용 등이 결정된다.
- 서울, 미국 등 정하는 위치
버저닝 Versioning
- 파일을 실수로 삭제하고 저장 해버렸을 경우, 자동화된 백업 관리 기법인 버전 관리 및 생애주기 관리 기법을 제공한다.
- 쉽게 생각해서, 파일에 버전 아이디를 붙여, 문제가 발생할 경우 다시 예전 버전으로 돌아갈 수 있는 것이다.
- 쉽게 복구할 수 있다는 장점이 있지만 변경 내용에 대한 비용이 추적될 수 있으므로 주의가 필요하다.
- 버킷을 만들 때 기본적으로 비활성화, 직접 활성화 해야 한다.
- 버킷에서 버전을 사용하도록 설정한 뒤 비활성화로 돌아갈 순 없고, 버전 관리 일시 중지 설정이 가능하다.
객체 수정 / 삭제 / 조회
- 위 출처 블로그에 아주 자세히 나와있으니 읽어보도록 하자.
보안 / 권한 (접근 제어)
- 전 세계 누구나 접속할 수 있기 때문에, 기본 정책은 private로 설정되어 있다.
- 만약 외부에서 접속해 S3의 버킷을 제어할 필요가 있을 때는, 버킷을 통째로 public으로 개방하는 것이 아닌 S3 권한 제어를 통해 접근 제어를 설정 할 수 있다.
- IAM : 사용자를 생성하고 사용자의 버킷 권한 엑세스를 관리한다.
- ACL : 권한 있는 사용자에 대해 간단한 개발 객체를 가능하게 만드는 제어 목록이다.
- Bucket Policy : 단일 S3 버킷 내 모든 객체에 대한 권한을 세부적으로 구성한다.
- Pre-Signed URL : 임시 URL을 사용하여 다른 사용자에게 기간 제한 엑세스를 부여한다.
Public Access
- 버킷을 만들 때, 모두에게 액세스 권한을 오픈할 것인지 임의의 사용자에게는 제한할 것인지 설정한다.