오늘은 S3 활용법에 대해서 설명드리도록 하겠습니다.
S3란?
Simple Storage Service 로 파일 서버를 의미합니다.
장점
1. 사용자 폭등 시에도 무리 없이 데이터를 저장할 수 있다. (최대 5TB)
2. 저장할 수 있는 파일의 수가 제한되지 않는다.
3. Http , BitTorrent 프로토콜을 지원한다.
4. REST , SOAP 인터페이스를 사용한다.
5. RSS (Reduced Redundancy) 썸네일과 같은 이미지 사본을 저장하여 싸게 활용할 수 있다.
How to use S3?
1. aws에서 S3에 접속하여 버킷을 만든다.
2. 버킷을 만드는 데 모든 과정을 기본 설정으로 한 뒤 만든다.
(물론 설정 부분에서 기본 설정으로 안하셔도 되는데 나중에 권한도 바꿀 수 있기 때문에 우선 기본 설정을 권장 해드린겁니다!)
단!! Bucket의 이름은 유일무이해야 합니다!!
3. Bucket이 만들어졌으면 외부에서 접근이 가능하도록 권한을 설정해준다.
버킷을 들어가면 권한 부분이 있는데 그 중 퍼블릭 액세스의 4개 항목을 모두 '예' 로 바꾸어준다.
4. IAM 보안 인증 만들기
IAM 보안 자격 인증을 만들 때 액세스 키를 새로 만들게 되면 액세스 키 ID값과 secret Access Key를 주게 됩니다.
이를 다운로드를 하든 따로 잘 저장을 하든 해서 관리해주시기 바랍니다.
5. Node.js에서 Multer와 MulterS3를 활용하여 파일을 전송합니다.
우선, config.json 파일을 하나 만들어서 accessKeyId 와 secretAccessKey 그리고 region을 저장해줍니다.
이 후엔 aws-sdk와 multer 그리고 multer-s3 패키지를 npm으로 설치한다.
npm install --save multer
npm instal --save aws-sdk
npm install --save multer-s3
6. 코드 전송 코드를 작성해준다.
let multer = require('multer');
let AWS = require("aws-sdk");
AWS.config.loadFromPath(__dirname + "/../config/awsconfig.json");
let s3 = new AWS.S3();
let multerS3 = require("multer-s3");
let path = require("path");
let upload = multer({
storage : multerS3({
s3: s3,
bucket: "버킷이름/버킷 내 폴더",
key: function (req, file, cb) {
let extension = path.extname(file.originalname);
cb(null, Date.now().toString() + extension);
},
acl: 'public-read-write',
location : "/test"
})
});
router.post("/upload", upload.single('imgFile'), function (req, res, next) {
console.log(req.file);
});
multer 내에 storage를 보통은 diskStorage를 설정해서 정리하는데 이는 서버 내 저장할 임시 저장소를 의미합니다.
이 부분을 multerS3을 이용해서 S3에 저장하는 방법으로 구현하면 됩니다.
다음과 같이 진행하게 되면 S3 내의 버킷에 내가 만든 폴더에 저장되는데, 콜백으로 파일 이름에 이상이 없을 경우 파일 이름 그대로
보내도록 하였고 (null --> 에러 없을 때 그대로 보낸다)
이름에 문제가 있을 경우엔 날짜 + 파일 이름을 하여서 보내도록 했습니다.
다음과 같이 한다면 아래와 같은 결과가 나올 것 입니다.
다음과 같이 버킷 내에 test라는 폴더에 파일이 저장된 것을 알 수 있습니다.
추가로 multer-s3활용법과 acl에 대해서 아래 참조해주시면 좋을 것 같습니다.
이미지를 가져오는 방법은 s3의 호스팅 주소와 버킷 그리고 버킷 내 폴더 안에 있는 이미지를 가져오면 됩니다.
https://s3.ap-northeast-2.amazonaws.com/버킷이름/저장 폴더 이름/파일이름.png
Reference : https://www.npmjs.com/package/multer-s3
감사합니다 ^.^
'Node.js & Javascript' 카테고리의 다른 글
자바스크립트 개념정의 (1) | 2024.01.06 |
---|---|
module 관리 (0) | 2018.03.15 |
자바스크립트 함수(1) (0) | 2018.03.08 |
자바스크립트 변수(2) (2) | 2018.03.07 |
Javascript 변수 (0) | 2018.03.06 |