S3 찍먹

zwundzwzig·2022년 10월 2일
0

AWS

목록 보기
1/4
post-thumbnail

이제 사진을 포함한 여러 데이터들은 정규 교육 과정에 의해 AWS에 저장될 것이다. AWS는 앞서 공부했던 Cloud Computing에서 PAAS에 해당할 것이다.

2차 프로젝트가 시작하기 전에 1차 프로젝트에서 multer로 다뤘던 이미지 데이터들을 AWS에 저장하는 작업을 진행해봤다.

const multer = require("multer");
const path = require("path");

const uploadFiles = multer({
  storage: multer.diskStorage({
    destination: (req, file, cb) => {
      cb(null, "./uploads");
    },
    filename: (req, file, cb) => {
      const ext = path.extname(file.originalname);
      cb(null, path.basename(file.originalname, ext) + Date.now() + ext);
    },
  }),
  limits: { fileSize: 5 * 1024 * 1024 },
});

위 코드는 공식 문서를 활용해 내 로컬 데이터베이스 공간에 사진을 저장하는 나의 로직이다.


내 VScode에 AWS 설치하기

우선, 위 파일에 AWS-SDK를 설치했다. 설치에는 npm을 활용했다.

그리고 나는 이번 프로젝트에서 이미지를 위한 공간만 우선적으로 필요했기 때문에 S3 기능을 활용하기로 했다.

AWS에서 내 이미지를 저장할 공간이 필요했기 때문에 AWS 회원가입을 진행하고 bucket을 생성해줬다.

const multer = require("multer");
const path = require("path");
const AWS = require("aws-sdk");
const multerS3 = require("multer-s3");

const s3 = new AWS.S3({
  accessKeyId: process.env.AWS_AccessKey_Id,
  secretAccessKey: process.env.AWS_Secret_Key,
  region: //myRegions,
});

const uploadFiles = multer({
  storage: multerS3({
    s3: s3,
    bucket: //myBucket,
    contentType: multerS3.AUTO_CONTENT_TYPE,
    key(req, file, cb) {
      const ext = path.extname(file.originalname);
      cb(null, path.basename(file.originalname, ext) + Date.now() + ext);
    },
  }),
  limits: { fileSize: 50 * 1024 * 1024 },
});

Simple Storage Service

일명 S3라 불리는 AWS의 이 기능은 이름 그대로 파일을 쉽게 저장하고 파일마다 고유의 링크를 걸어준다.

여러 기능 중 이 기능을 사용한 이유는 클라이언트에게 받은 사진을 효과적으로 데이터베이스에 저장했다가 다시 여러 파일들을 응답하기 용이하다고 생각했기 때문이다.

여기서, AWS는 하나의 이미지 파일을 object, 그리고 그 연관된 object를 그룹핑한 최상위 directory를 버킷이라고 한다.

이러한 버킷 단위로 region을 지정 할 수 있고, 또 버킷에 포함된 모든 객체에 대해서 일괄적으로 인증과 접속 제한을 걸 수 있다.

이를 통해 프론트엔드와 효율적으로 사진을 주고 받는데 성공했다!!

느낀점

AWS 입문!

profile
개발이란?

0개의 댓글