프로젝트를 하나 진행하면서 S3에 파일을 업로드하는 자동화 코드를 작성해야 했다.
코드를 작성하다 막히는 부분이 있어 고민이었던 중에
처음 노드를 공부하면서 파일 업로드시 multer 라이브러리를 사용했던 것이 떠올랐고
검색을 진행하고 multer-s3 라이브러리가 쓸만 할 것 같아
multer 라이브러리를 다시 사용하기로 해보았다.
(multer가 express 관련 라이브러리 인것도 처음 알게 되었다. Wow...)
위에 언급한 막힌 이슈는 맨 아래에 자세히 풀어보도록 하겠다.
우선은, 완성한 코드 설명을 먼저 진행한다.
multer docs는 깃허브에 한글화가 잘 되어 있으니 링크를 남긴다
https://github.com/expressjs/multer/blob/master/doc/README-ko.md
사용한 multer-s3 라이브러리는 다음과 같다
https://github.com/anacronw/multer-s3
multer-s3 Usage를 간략히 써본다
express를 사용하는 법을 안다는 가정하에 글을 작성한다.
이에 대해 모를 경우 express 사전 숙지가 필요하다.
const aws = require("aws-sdk");
const express = require("express");
const multer = require("multer");
const multerS3 = require("multer-s3");
const app = express();
// 연결할 S3 Config를 적어주면 된다.
// 아래에 구체적으로 기술한다.
const s3 = new aws.S3({
/* ... */
});
// 업로드 설정
const upload = multer({
storage: multerS3({
s3: s3,
bucket: 본인의 S3 버켓 이름,
// 크게는 s3, bucket 파라미터다
// 아래 파라미터들은 github를 참고하여 취사선택을 하면 된다. 지금은 github example를 가져왔다.
acl: "public-read",
key: function (req, file, cb) {
cb(null, Date.now().toString());
},
}),
});
// express api
// 일반적인 경우와 차이라면, 미들웨어로 upload가 들어간다.
// single, array 등 방법의 경우가 많으므로 이 역시 github를 참고하여 본인의 기호에 맞게 작성을 진행한다
app.post('/upload', upload.array('photos', 3), function(req, res, next) {
res.send('Successfully uploaded ' + req.files.length + ' files!')
})
multer는 간단하게로는 이대로도 동작을 할 것이다.
다음으로 생각해야 할 것이 두 가지가 있다.
S3 버킷 생성은 AWS 홈페이지에서 차근차근 클릭을 하자.
차피 뒤에서 config를 기술한 것을 보면 이해가 갈 것이기 때문에 너무 걱정하지 않는다
코드는 v2, 노드 환경을 기준으로 작성했다
https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/s3-examples.html
v3도 가볍게 훑었는데 써볼 가치가 있다. 시간이 남는다면 주말에라도 작성을 해볼까 한다..
github로 링크를 첨부한다. 예제코드는 여기서 확인하자
https://github.com/awsdocs/aws-doc-sdk-examples
// Set the AWS Region
AWS.config.update({
region: 본인 S3 버킷의 지역(버킷 생성할 때 있었다),
// 그리고 여기에 2. 권한을 적어주어야 한다.
// 방법이 여러가지가 있으므로 아래에 순번을 적어 기술해본다.
});
// 앞서 건드리지 않았던 s3 인스턴스를 생성해준다.
const s3 = new AWS.S3({
apiVersion: "2006-03-01",
params: { Bucket: 본인 S3 버킷 이름 },
});
2) IAM 사용하기
IAM 이란? : Identity and Access Management 란다. 단어가 직관적이서 좋다
https://us-east-1.console.aws.amazon.com/iamv2/home#/users
에서 사용자 추가를 클릭해 본인의 IAM를 생성한다.
나는 액세스 키를 이용하였다(accesKey, secretKey 요런거)
권한을 주기 위해 정책을 선택해 주어야 하는데 AmazonS3FullAccess 를 선택했다
그렇다면 IAM 또한 마무리 되었고 이를 코드에 적어주면 끝이다
AWS.config.update({
region: 본인 S3 버킷의 지역,
accessKeyId: 본인 AccesKey,
secretAccessKey: 본인 SecretKey,
});
이런 식으로 말이다.
3) Cognito 사용하기
// credentials: new AWS.CognitoIdentityCredentials({
// IdentityPoolId: IDENTITY_POOL_ID,
// }),
const IDENTITY_POOL_ID = "ap-northeast-2:ee62d023-c180-46bf-9e24-935ff2fa2b5a";
이렇게 한다면 업로드는 잘 진행 될 것이다.
혹시나 앞서 기술한 내용이 이해가 잘 안되거나 + 내 푸념식으로
일기를 좀 쓴다.
~~
이분법으로 나누어서 본다면
~~
EC2에 또 배포를 할텐데 지금 이 경험을 꼭 기억하고 양분삼아
더 나은 결과를 만들어보자
뭘 만들고, 그걸 쓰려면 인증을 거친다.
이 프로세스도 프로세스 글에 추가해야 겠다.
참으로 바쁜데 재미는 기깔 나구나~