Node 3장 - Express, S3를 이용한 이미지 업로드 (1)
포스트
취소

Node 3장 - Express, S3를 이용한 이미지 업로드 (1)

Node

S3란

S3에 대한 모든 것은 이곳으로

  • 사용자의 이미지 업로드 관리를 효율적으로 할 필요가 생겼다.
  • 우선 EC2를 사용하여 관리할 수도 있지만, S3가 특별한 이유는 비용이 저렴하고 저장공간이 거의 무한대에 가깝다.
  • 객체로 된 파일을 다루는 저장소인 객체 스토리지이다.
  • EC2와는 달리 프로그램을 설치하거나 저장하는 기능은 없으며, 파일 업로드, 삭제, 업데이트만 가능하다.
  • 웹하드 서비스인 FTP와 비슷하지만, 별도의 클라이언트 설치 없이도 HTTP 프로토콜(restful)로 파일 업로드,다운로드가 가능하다.
  • S3 자체가 정적 웹서비스가 가능하다.(html 파일을 스토리지에 저장하고, html파일에 접근하면 홈페이지로 연결)
  • 동적 웹페이지와 정적 웹페이지가 섞여있을 때 동적 웹페이지만 EC2에서 서비스하고, 정적 웹페이지는 S3를 이용하면 성능도 높이고 비용도 절감할 수 있다.

버킷과 객체

  • S3에는 BucketObject라는 단위가 있다.
      1. 객체 : 데이터와 메타 데이터를 구성하고 있는 저장단위로 파일명 개념
      1. 버킷 : 객체를 저장하고 관리하는 폴더의 개념
  • 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 권한 제어를 통해 접근 제어를 설정 할 수 있다.
  1. IAM : 사용자를 생성하고 사용자의 버킷 권한 엑세스를 관리한다.
  2. ACL : 권한 있는 사용자에 대해 간단한 개발 객체를 가능하게 만드는 제어 목록이다.
  3. Bucket Policy : 단일 S3 버킷 내 모든 객체에 대한 권한을 세부적으로 구성한다.
  4. Pre-Signed URL : 임시 URL을 사용하여 다른 사용자에게 기간 제한 엑세스를 부여한다.
Public Access
  • 버킷을 만들 때, 모두에게 액세스 권한을 오픈할 것인지 임의의 사용자에게는 제한할 것인지 설정한다.

버킷 생성 및 정책에 관한 내용은 블로그 참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.