S3는 Amazon Simple Storage Service로, 인터넷용 스토리지 서비스입니다. 쉽게 AWS에서 제공하는 파일 저장 공간이라고 생각하시면 됩니다. multer-s3를 사용하여 이미지 업로드 시 로컬 서버가 아닌 S3에 이미지를 업로드하게 됩니다.
기본적인 multer에 대한 설명은 이전 포스팅 [node.js] multer와 S3를 이용한 이미지 업로드 (multer 설치 부터 S3이미지 업로드 까지) - 1. multer 를 참고해 주세요.
🍟 S3 버킷 생성
AWS에서 로그인한 후, S3 버킷을 생성해줍니다. 버킷생성 과정은 링크를 참고하시면 됩니다.
🍖 IAM 설정하기
IAM이란 AWS 리소스에 대한 엑세스를 안전하기 제어할 수 있는 웹 서비스 입니다. 이를 통해 리소스를 사용하도록 인증하거나 권한 부여된 대상을 제어합니다. 아래는 IAM 설정 과정에 대한 간단한 설명입니다. 추가적인 설명은 링크를 참고하세요.
- AWS 서비스에서 IAM을 선택하고, 사용자 - 사용자 추가를 선택합니다. - 세부 정보에서 사용자 이름을 지정하고, 엑세스 유형은 프로그래밍 방식 엑세스를 선택합니다.
- 권한 설정에서 기본 정책 직접 연을 선택하고 AmazonFullAccess를 체크합니다.
- 태그, 검토 사용자 만들기 순으로 클릭하면 끝
- 성공했다면, 엑세스 키 ID와 비밀 엑세스 키 값이 나오는데 이건 awsconfig.json 설정에서 필요하므로 반드시 메모해야 합니다.
🍠 필요한 모듈 설치
- multer-s3 : 이미지 업로드 시 S3에 업로드 하도록 만들어주는 모듈
- AWS-SDK : AWS 서비스를 연결하기 위한 모듈
npm install aws-sdk multer-s3
🍗 awsconfig.json 파일 생성
accessKeyId, secretAccessKey는 IAM에서 생성한 2가지 키 값을 입력해주면 됩니다. region은 S3 지역입니다. 이는 접속 URL을 통해 확인이 가능합니다.
⛔ 이 파일의 key값들은 유출되면 안되기 때문에 반드시 github업로드시 반드시 gitignore설정을 하셔야합니다.
{
"accessKeyId": "엑세스 키",
"secretAccessKey": "시크릿 엑세스 키",
"region": "ap-northeast-2"
}
🎂 multer.js 파일
const multer = require('multer');
const multerS3 = require('multer-s3');
const aws = require('aws-sdk');
aws.config.loadFromPath(__dirname + '/awsconfig.json');
const s3 = new aws.S3();
const upload = multer({
storage: multerS3({
s3: s3,
bucket: '버킷이름',
acl: 'public-read',
key: function(req, file, cb) {
cb(null, Math.floor(Math.random() * 1000).toString() + Date.now() + '.' + file.originalname.split('.').pop());
}
}),
limits: {
fileSize: 1000 * 1000 * 10
}
});
module.exports = upload;
multer.js 파일을 위와같이 만들어주면 이전 포스팅 multer 설치 부터 S3이미지 업로드 까지(1) - multer 통해 이미지 업로드하기 에서 사용했던 single과 같은 메소드들을 동일하게 사용할 수 있습니다.
이미지를 업로드 하시고 AWS에서 확인해 보면 아래와 같이 이미지가 저장됩니다.
'node.js' 카테고리의 다른 글
[Sequelize] findAll한 데이터에서 dataValues 이외의 정보 버리기 (0) | 2021.03.31 |
---|---|
[Node.js] 애플로그인 구현하기 (1) | 2021.03.30 |
[node.js] multer와 S3를 이용한 이미지 업로드 (multer 설치 부터 S3이미지 업로드 까지) - 1. multer (0) | 2021.03.30 |
[Node.js] socket.io로 실시간 채팅 구현하기(2) + 실시간 이미지 전송 (2) | 2021.03.30 |
[Node.js] socket.io로 실시간 채팅 구현하기 (1) (0) | 2021.03.30 |