[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/인프라

AWS - S3

inu 2021. 1. 30. 17:29
반응형

S3

  • Simple Storage Service의 약자로, 파일을 저장할 수 있는 서비스이다.
  • 99.9%의 객체 내구성을 보장하도록 설계된 인프라를 제공한다.
  • 데이터가 여러 시설, 여러 디바이스에 중복으로 저장된다.
  • 가용성도 높고, 가격도 저렴하며, 보안성 및 확장성이 보장되기 때문에 유용하다.

S3 사용해보기

  • AWS 홈페이지에서 Services 중 S3에 접속하고, Create Bucket을 만들어 Bucket을 생성한다.
  • Bucket은 일종의 저장장치라고 생각하면 된다.
  • Bucket의 이름과 지역을 설정하고 생성하면 된다. (이름중복X)

  • 홈페이지에서는 간단하게 Upload 버튼으로 파일을 업로드할 수 있으며, 그렇게 업로드된 파일을 클릭해보면 해당 파일에 접속할 수 있는 link도 존재하게 된다. (다른 사람도 접속할 수 있도록하려면 link에 대한 권한설정작업이 필요하다.)

  • 일반적으로는 이렇게 홈페이지에서 사용하기 보단, 개발환경을 구성하여 사용한다.

Node.js에서 S3 사용하기 (S3 SDK)

  • S3 SDK를 활용하면 Node.js를 통해 S3를 제어할 수 있다.
  • 사용자에게 AmazonS3FullAccess 권한이 있어야한다. (by IAM)
  • 아래는 사용의 예시이고, 이를 활용해 우리의 웹 애플리케이션에도 기능들을 적용할 수 있다.

업로드

var AWS = require('aws-sdk');
var fs = require('fs');
AWS.config.region = 'ap-northeast-2';
var s3 = new AWS.S3();
var param = {
    'Bucket':'codingeverybody2',
    'Key':'logo.png',
    'ACL':'public-read',
    'Body':fs.createReadStream('94.png'),
    'ContentType':'image/png'
}
s3.upload(param, function(err, data){
    console.log(err);
    console.log(data);
})
  • S3 객체를 이용해 파일을 업로드한다.
  • param에는 Bucket의 이름과 저장 파일명, 권한(ACL)을 설정한다. Stream을 설정해 원하는 파일을 잘 전송될 수 있는 형태로 만들고, ContentType도 적어준다. (Type을 Image/png로 잘 입력해야 브라우저가 해당 파일을 이미지로 인식한다.)
  • 이렇게 작성된 param을 통해 s3upload 매소드를 입력하면 원하는 bucket에 파일이 업로드된다.

목록가져오기

var AWS = require('aws-sdk');
AWS.config.region = 'ap-northeast-2';
var s3 = new AWS.S3();
s3.listObjects({Bucket: 'codingeverybody2'}).on('success', function handlePage(response) {
    for(var name in response.data.Contents){
        console.log(response.data.Contents[name].Key);
    }
    if (response.hasNextPage()) {
        response.nextPage().on('success', handlePage).send();
    }
}).send();
  • 어떤 Bucket의 데이터를 가져올건지 표기하고, 해당 데이터를 성공적으로 불러왔을 경우 handlePage 함수를 실행한다.
  • response에는 우리가 업로드한 파일들을 나타내는 객체이다. 이를 순회하여 파일의 이름(Key)만 불러온다.
  • 만약 response에 다음 페이지가 존재한다면 이를 기반으로 같은 작업을 반복한다.

다운로드

var AWS = require('aws-sdk');
AWS.config.region = 'ap-northeast-2';
var s3 = new AWS.S3();
var file = require('fs').createWriteStream('logo.png');
var params = {Bucket:'codingeverybody2', Key:'logo.png'};
s3.getObject(params).createReadStream().pipe(file);
  • stream을 기반으로 파일을 Bucket에 존재하는 파일을 저장한다.
반응형

'🛠 기타 > 인프라' 카테고리의 다른 글

Node.js - AWS SDK  (0) 2021.01.30
AWS - Scalability  (0) 2021.01.29
AWS - EC2  (0) 2021.01.28
AWS - region, availability zone  (0) 2021.01.28