[AWS]nodejs AWS스토리지서버_S3

1 minute read

스토리지서버 S3

AWS의 S3는 우리가 서버를 통해서 파일 업로드를하고 업로드된 url을 통해서 파일에 접근할 수 있도록하는 서버 입니다.

사실 S3의 서버 구성은 매우 쉽고 간단합니다. 이 포스팅을 보지 않고도 AWS 사이트를 통해서 충분히 혼자서 할 수 있습니다.

하지만 NodeJs 서버를 구현하는 과정에서 S3와의 파일 업로드 연동에서는 접근권한이 필요하기 때문에 저도 처음에는 고생 좀 했고, 그 방법에 대해서 포스팅 하고자 합니다.

AWS 스토리지서버 S3 설정하기

AWS 스토리지 서버를 처음 설정할때 퍼블릭권한 으로 설정해야 합니다.

그 이유는 nodejs를 통해서 aws sdk를 이용하여 aws 파일서버에 접근하려면 퍼블릭 권한으로 설정해야 되기 때문입니다.
아래 그림과 같이 퍼블릭권한으로 설정하면 됩니다.

Image Alt 텍스트

Image Alt 텍스트

AWS IAM계정 생성하기

가장 먼저 생성된 AWS S3 버킷에 접근하기 위해서는 IAM계정에 사용자를 추가하고 AWSS3에 접근권한을 주어야 합니다.
순서는 아래와 같습니다.

  • IAM계정 생성하기
  • 액세스키 만들기
  • ~/.aws/credentials에 엑세스키 작성하기

1. IAM계정 생성하기

(1) 아마존 웹서비스의 콘솔로가서 IAM계정 생성 하기 Image Alt 텍스트

(2) 생성된 계정에서 권한 AmazonS3FullAccess를 추가하기 Image Alt 텍스트

2. 액세스키 만들고 accessKeys.csv 파일을 다운로드 받는다. 여기에는 Access key ID와 Secret access key 가 들어가있습니다. (파일은 매우 중요!!)

Image Alt 텍스트

3. ~/.aws/credentials 의 파일을 생성하여 해당 IAM의 Access key IdSecret Access Key 를 넣고 저장하기.

Image Alt 텍스트

4. 그러면 Nodejs에서 aws sdk를 사용하고 해당 스토리지에 접근이 가능!


Nodejs 서버를 이용하여 AWS S3 파일 올리기

위 설정이 끝나면 이제 Nodejs 서버를 통해서 aws서버에 접근이 가능합니다. 먼저 npm을 통해서 aws sdk를 설치합니다.

npm install –save aws-sdk

설치가 완료되면 아래 코드로 AWS 스토리지서버 S3접근이 가능합니다.

let AWS = require("aws-sdk");
AWS.config.region = 'ap-northeast-2'; //서버 지역을 세팅합니다.
let s3 = new AWS.S3({params: {Bucket:'luxuryboard'}});  //버킷이름을 세팅합니다.

npm install –save multer-s3

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

아래코드는 실제 Herelux 개발 시 사용되었던 multerS3의 객체 초기 세팅 값입니다.

storage: multerS3({
    s3: s3,
    dirname: '/' + brands_name, //디렉토리 이름을 설정
    bucket: "luxuryboard",    //버킷이름을 설정
    cacheControl: 'max-age=31536000', //파일최대 크기를 설정
    acl: 'public-read-write', //파일읽기 쓰기를 설정
    ContentType:'', //파일타입을 설정  
    key: function (req, file, cb) {
        imgname = file.originalname;
        cb(null, imgname);
    },
    shouldTransform: function (req, file, cb) {
        cb(null, /^image/i.test(file.mimetype))
    },
    transforms: [{
          id: 'original',
          transform: function(req, file, cb) {
            cb(null, sharp().resize(640, 640).jpg());
          }
    }]
  })
});

그외 multerS3의 내부 변수 역할에 대해서는 아래 링크를 통해서 확인하면 됩니다.

https://www.npmjs.com/package/multer-s3

Nodejs의 라우터 세팅

위 설정이 끝나면 아래와 같이 라우터를 설정하면됩니다. 단 upload.single로 설정할 경우 이미지 하나만 AWS에 저장되고 Array로 세팅하게 되면 여러 이미지가 저장되게 됩니다.

router.post('/write', upload.array("image"), function(req, res){
    //코드 작성...
});