본문 바로가기

기타/AWS

AWS S3

AWS S3 즉 Amazon Simple Storage Service 는 객체(파일)을 저장해주는 스토리지 서비스이다.

 

이를 이용하면 웹서버에 업로드된 파일들을 S3에 저장해놓고, 필요할 때 불러올 수 있게 된다.

(인스타그램 클론 포스트에 S3를 사용한 예제가 있다.)

 

파일을 담아두는 곳을 저장소를 버킷이라고 부르고

이 파일을 S3에서는 객체라고 부른다.

 

사용 방법은 다음과 같다.

 

1. 버킷 만들기를 클릭한다.

 

 

2. 버킷 이름과 리전을 선택한다.

이때 버킷 이름은 중복되어선 안되며,

리전은 이용자 기준으로 어느 곳에 S3를 설치할 지 여부를 결정한다.

이후 바로 완성하지 않고 다음으로 넘어가 세부사항을 선택한다.

 

3. 속성 

버전관리는 객체의 히스토리를 저장한다고 보면 된다.

이를 선택하면, 객체를 계속 수정하고 수정할 때마다 히스토리에 남아 나중에 기록된 히스토리로 파일을 복구 할 수 있다.

 

서버 엑세스 로깅은 서버의 접근을 기록하는 것이다. 개인 프로젝트 같은 경우 굳이 다른 서버가 접근 하는 경우가 없기 때문에 고려 하지 말자.

 

기본 암호화같은 경우 추가로 객체에 암호를 설정하는 것이다. 이를 통해 더욱 안전하게 객체를 관리할 수 있다.

 

퍼블릭 엑세스는 말 그대로 다른 유저들이 버킷에 접근 할 수 있음을 의미한다.

 

movie-application은 이와 같은 순서를 통해 생성되었고, 사용중에 있다. 

 

이후에 버킷을 들어가서 직접 생성 읽기 삭제를 할 수 있다.

폴더만들기 혹은 업로드를 통해 생성이 가능하고, 오른쪽 클릭을 하여 삭제 또한 가능하나.

파일명을 수정하는 등의 수정은 불가능하다.

 

이를 해결하기 위해서는, 불가피하게 새로운 폴더를 만들고 기존 폴더의 내용을 복사하여 붙혀넣는 경우가 있다.

 

이 S3를 코드를 통해서 사용해 볼 수 있다.

 

물론 이 코드를 사용하려면 이전에 aws-sdk의 사용자 생성 및 권한 부여를 하여, 엑세스 키와 시크릿 키가 입력되어진 상황이어야 한다.

 

https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/getting-started-nodejs.html  

다음은 아마존에서 제공하는 node.js에서의 s3 사용 documents 이다.

var AWS = require('aws-sdk');
var fs = require('fs');
AWS.config.region = 'ap-northeast-2';
var s3 = new AWS.S3();
var param = {
    'Bucket':'imgaes-bukcet',
    '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);
})

다음은 코드의 예시이다.

이때 fs는 파일을 스트림형태로 제공하는데, 이는 Body에서 문자열, 버퍼, 스트림 타입등만 제공하기 때문이다.

param의 키값 중 몇가지만 살펴보자면

Bukect - 버킷 명

Key - 생성할 객체의 이름

ACL - 엑세스 타입(CRUD 권한)

Body - 실제 내용, 문자열이 아니라면 fs를 통해 변환해야함

ContentType - 파일의 상태 (헤더 값) 만약 설정해주지 않는다면, 이미지 파일이 아닌 정체모를 다운로드 파일로 받아진다.

 

upload의 두번째 파라미터인 콜백 함수는 upload 이후에 실행할 함수로써, 에러와 데이터(업로드한 객체의 데이터)가 쓰인다.

 

만약 어플리케이션을 돌리며 request를 받아 파일을 업로드 하는 경우라면

formidable이나 multer를 이용하여 업로드 할 수 있다.

'기타 > AWS' 카테고리의 다른 글

AWS EC2  (0) 2019.06.04
AWS RDS  (0) 2019.05.25
AWS SDK 사용하기  (0) 2019.05.24