Ann's log

[AWS] Heroku로 배포한 Node.js 서버에서 AWS S3 사용하기-2 본문

AWS

[AWS] Heroku로 배포한 Node.js 서버에서 AWS S3 사용하기-2

-Ann- 2022. 5. 24. 17:44

 

Amazon S3 Icon

 

이 글에서 정리하는 내용:

  • AWS-SDK 사용하기
  • AWS Access Key 발급하기
  • Multer-S3 사용하기

 

 

AWS-SDK 사용하기

SDK(Software Development Kit)란 특정한 소프트웨어나 플랫폼을 이용해서 소프트웨어를 개발할 때 이를 돕는 개발도구의 집합이라고 한다. (출처)

따라서 AWS-SDK는 개발 환경에서 AWS를 더 쉽게 사용할 수 있게 해주는 패키지이다.

 

AWS Access key 발급하기

AWS-SDK를 사용하기 전에 먼저 엑세스 키가 필요하다.

1. 오른쪽 상단의 내 계정 이름을 클릭하고, 보안 자격 증명을 클릭한다.

 

2. 스크롤을 내리다가 엑세스키 생성하기 버튼이 보이면 클릭한다.

 

버튼을 클릭하면 생성된 access key id와 secret access key를 볼 수 있고, 이것을 내 프로젝트에서 heroku config vars로 설정하여 다른 사람들에게는 보이지 않게 사용하면 된다. 

 

설치하기

npm install aws-sdk

 

Node.js 에서 사용하기

// aws-sdk 사용
const AWS = require("aws-sdk");

AWS.config.update({
    accessKeyId: parseDataS3.ACCESS_KEY_ID,
    secretAccessKey: parseDataS3.SECRET_ACCESS_KEY,
    region: 'us-east-1',
});

(일단 개발 환경에서 테스트하기 위해 accessKeyId와 secretAccessKey는 다른 파일에서 정보를 가져오도록 하였다.)

(배포시에는 config vars 설정 후 process.env.를 사용하면 된다)

 

 

Multer-S3 사용하기

현재 프로젝트에서는 이미지를 업로드하기 위해 Multer 패키지만 사용하고 있었는데, S3를 사용하기 위해서는 Multer-S3 패키지를 추가적으로 설치해야 한다.

Multer-S3는 AWS S3 사용을 위한 multer 스토리지라고 한다.

 

설치하기

npm install --save multer-s3

 

Node.js에서 사용하기

const multer = require('multer');
const multerS3 = require('multer-s3');

const upload = multer({
    storage: multerS3({
        s3: new AWS.S3(),
        bucket: `${parseDataS3.BUCKET_NAME}`,
        key: function (req, file, cb) {
            cb(null, `upload/${file.originalname}`);
        }
    })
});

(여기서 bucket name은 다른 파일에서 정보를 가져오도록 하였다.)

생성한 S3 bucket 내의 upload라는 폴더 안에 업로드한 파일을 넣어주기 위해 `upload/${file.originalname}` 위치를 지정하였다. 

 

console.log(file)을 실행해보면 이러한 정보를 담고 있다는 것을 볼 수 있기 때문에 필요한 정보를 골라서 적절히 사용해주면 된다.

 

이미지 업로드 함수는 이렇게 작성하였다.

// 이미지 업로드
app.post('/image', upload.single('image'), (req, res) => {
    const file = req.file;
    res.send({
        imageUrl: file.location
    })
})

(여기서 app은 express를 사용함.)

 

일단 여기까지 하고 테스트 해봤을때는 성공적으로 S3 bucket에 파일이 업로드 되고, 업로드한 파일을 페이지에서 볼 수 있다!! 😁

몇가지 더 수정한 뒤에 배포하고 잘 되는지 또 테스트 해봐야겠다!

→ (2022.5.25) 배포 후에 다시 테스트 해본 결과, 문제가 없는 것을 확인했다!

 


참고:

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

https://velog.io/@gbskang/Heroku%EC%97%90%EC%84%9C-AWS-S3-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

'AWS' 카테고리의 다른 글

[AWS] Heroku로 배포한 Node.js 서버에서 AWS S3 사용하기-1  (0) 2022.05.19
[AWS] IAM 생성하기  (0) 2022.02.20
Comments