Node에 S3 적용하기
안녕하세요 🐸
S3?
Simple Storage Service 의 약자로 스토리지 서비스를 제공합니다.
서버에서 모든 정적 파일을 저장하고 관리한다면 서버에 부하가 되기 때문에 S3를 사용하는 것이 좋습니다
필요 패키지 설치
npm i multer-s3 @aws-sdk/client-s3
S3 버킷 생성 및 설정
AWS에서 S3를 검색하여 버킷 만들기 버튼을 누르면 아래 화면으로 접근합니다.
여기서 수정할 부분은 버킷 이름 과 이 버킷의 퍼블릭 액세스 차단 설정 입니다.
버킷 이름은 다른 사용자들과도 이름이 겹치면 안되기 때문에 고유한 이름을 사용합니다.
그리고 모든 퍼블릭 액세스 차단을 체크 해제 합니다.
실제로 실무에서는 서비스가 모든 퍼블릭 액세스 차단 설정을 체크 해제하지 않습니다. 학습을 위해 이처럼 했을 뿐입니다 서명된 URL이나 IAM 기반으로 접근하도록 하는 것이 보안상 좋습니다
나머지는 건드릴 부분이 없습니다.
버킷 만들기를 누르면 됩니다.
S3 버킷 생성이 완료 되었습니다.
액세스 키 생성 및 설정
우측 상단 본인의 사용자 이름을 클릭하여 보안 자격 증명을 선택하여 진입합니다.
액세스 키 만들기 버튼을 통해 액세스 키를 만들 수 있습니다.
만들어진 액세스키와 비밀 액세스 키를 복사해서 메모해 놓아야 합니다
아니면 .scv 파일 다운로드 버튼을 통해 파일로 저장해야 합니다.
해당 페이지를 벗어나면 비밀 액세스 키는 다시 볼 수 없습니다
S3 연결
비밀키와 비밀 액세스 키를 .env
파일에 저장합시다.
다음은 기존에 multer
를 사용해서 파일 업로드 하던 위치에서 multer-s3
로 변경하는 작업이 필요합니다.
다음은 소스 코드의 예시 입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const {S3Client} = require('@aws-sdk/client-s3');
const multerS3 = require('multer-s3');
/*생략*/
const s3 = new S3Client({
credentials:{
accessKeyId : process.env.S3_ACCESS_KEY, // 액세스 키
secretAccessKey : process.env.S3_SECRET_ACCESS_KEY // 비밀 액세스 키
},
region:'ap-northeast-2' // 버킷의 리전. 버킷 정보에서 확인 가능
})
const upload = multer({
storage:multerS3({
s3,
bucket:'nodebird-study-codingkermit', // 버킷 명
key(req,file,cb){
cb(null,`original/${Date.now()}_${file.originalname}`);
},
// 공개 파일인 경우 퍼블릭 접근을 허용하는 옵션
// acl:'public-read'
}),
limits:{
fileSize:50*1024*1024,
},
});
// 기존의 multer 미들웨어와 사용 방법은 동일하다
router.post('/img', isLoggedIn, upload.single('img'), afterUploadImage);
참고 : https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/ https://www.npmjs.com/package/@aws-sdk/client-s3