티스토리 뷰
AWS S3( Simple Storage Service ) 이란?
■ 업계 최고의 확장성, 데이터 가용성 및 보안과 성능을 제공하는 객체 스토리지 서비스이다.
■ 웹 사이트, 모바일 어플리케이션, IoT 디바이스, 빅데이터 분석등
다양한 사용 사례에서 원하는 만큼 데이터를 저장및 보호가능하다.
■ 사용하기 쉬운 관리 기능을 제공한다.
■ 특정 비즈니스 조직 및 규정 준수 요구 사항에 따라 데이터를 조직화, 세부적인 액세스 제어를 구성
■ Bucket이라는 단위로 구분한다
■ 99.99999%의 데이터 내구성을 가지고 있어 장애나 오류, 위협에 강하.
S3 사용 목적
● 용량을 추가하거나 성능을 높이는 작업이 필요없이 저장 용량이 무한대이고 파일저장에 최적화한다.
● EC2와 EBS등에 비해 훨씬 저렴(저렴한 비용으로 정적 웹 호스팅 가능)하다.
● 이미지 서버, 동영상 서버로 사용 가능하다.
AWS S3를 사용해보기
Bucket 만들기
Bucket ( 버킷 ) : 객체를 저장하고 관리하는 역할(디렉토리 / 폴더)
AWD 리전 : S3가 생성한 버킷을 저장할 위치 지정한다.
버킷이름 : 고유한 버킷의 이름을 지정(전세계에서 유일)
위와 같은 버킷이름에 image.png를 넣게 되면 http://corinybucket.s3.amazonaws.com/image.png 라는 url생성
ACL(Access Control List)
버킷, 객체에 대해 요청자의 권한 허용 범위를 간단하게 설정할 수 있다.
ACL을 활성화 해야 코드를 통해 S3에 접근을 할 수 있기 때문에 활성화를 눌러줍니다.
이 체크리스트들을 다 차단을 해버린다면 Access Denied 라는 에러메세지가 뜨면서 접근이 불가하니
코드를 통해서 접근을 한다면 위 처럼 체크를 해제 해야 한다.
IAM설정하기
※ 액세스키 • 액세스 비밀키 기억하기
Node.js로 S3연결하기
패키지 설치하기
yarn add aws-sdk // s3연결 패키지
yarn add multer // 파일업로드 하기 위해 사용하는 패키지
yarn add multer-s3@^2 // aws-sdk와 버전을 맞추기 위한 낮은버전의 패키지
연결 로직 작성
// ./s3/ImageUploader.js
import AWS from "aws-sdk";
// multer - 파일업로드를 위해 사용되는 multipart/form-data를 다루기 위한 node.js의 미들웨어
// multer를 거치면 req.file, req.files로 넘겨줌
import multer from "multer";
import multerS3 from "multer-s3";
AWS.config.update({
region: "ap-northeast-2", // AWS의 region 값
accessKeyId: process.env.AWS_ACCESS_KEY_ID, // IAM에서 설정됐던 accessKeyId
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, // IAM에서 설정됐던 secretAccessKey
});
const s3 = new AWS.S3();
const imageUploader = multer({
storage: multerS3({
s3: s3,
bucket: "corinybucket", // 생성한 버킷 이름
key: (req, file, callback) => {
callback(null, `test/${Date.now()}_${file.originalname}`);
// 콜백함수의 두번째 인자로 들어가는 것은 업로드 경로
// 경로에 / 를 포함하면 폴더를 자동으로 생성
},
acl: "public-read-write", // s3 생성할 때 설정했던 권한 관련 설정
contentType: multerS3.AUTO_CONTENT_TYPE,// 파일이 다운되는 문제를 막아줌
}),
});
export default imageUploader;
// app.js
import express from "express";
import imageUploader from "../s3/ImageUploader.js";
const router = express.Router();
router.post("/test/image", imageUploader.single("image"), (req, res) => { //single은 단일 이미지를 받을때 사용하는것
res.send("good!");
});
export default router;
한다음 인섬니아로 해당 경로에 파일을 올려보면
객체로 이미지가 올라간걸 확인 할 수가 있다.
'프로그래밍 기초 > Node.js' 카테고리의 다른 글
자바스크립트에 TypeORM적용시기키 (0) | 2024.03.07 |
---|---|
pm2 프로세스 적용하기 (0) | 2024.02.28 |
NODE의 Bcrypt [패스워드 안전하게 저장] (0) | 2024.02.15 |
카카오 로그인 연동하기 (1) | 2024.02.05 |
데이터 유효성 검증과 에러처리 (1) | 2024.02.01 |