TIL 2023. 4. 25.

TIL #032

오늘 한 것

정보처리기사 ✍️

  • UI

Bookstack 📚

[ 관련 레포지토리 ] BookStack-FE,  BookStack-BE

  • Book Image 추가 기능 구현
  • Book Image 스택 페이지 반영
  • Book Image 상세 페이지 반영
  • 전체 페이지 CSS 변경
  • 빌드 테스트
  • pull request 생성 및 dev로 merge

오늘 배운 것

Express(Node.js) 프로젝트에서 S3에 이미지 저장한 후 프론트로 이미지 url 반환해주기

1. AWS IAM 사용자 생성

  • 액세스 유형 : 프로그래밍 방식 액세스
  • 권한 설정 : AmazonFullAccess
  • 액세스 키 설정 ⇒ 생성된 액세스 키와 비밀 액세스 키는 따로 저장

2. Bucket 생성

  • 객체 소유권 : ‘ACL 활성화됨’으로 설정

3. 필요 모듈 설치

  • multer
  • multer-s3
  • aws-SDK

4. multer.upload 설정

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

// 액서스 키와 비밀 액서스 키는 보안문제로 인해 환경변수 등에 따로 저장해 둘 것을 권장
aws.config.update({
  accessKeyId: '당신의_액서스_키', // 과정 1에서의 액서스 키
  secretAccessKey: '당신의_비밀_액서스_키', // 과정 1에서의 비밀액서스 키
  region: "ap-northeast-2", // 영역. 한국은 ap-northeast-2로 설정
});

const s3 = new aws.S3();

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: "당신의_버킷_이름",
    acl: "public-read",
    key: function (req, file, cb) {
      cb(null, `${Date.now()}_${file.originalname}`);
    },
  }),
  limits: { fileSize: 5 * 1024 * 1024 }, // 추가 설정 (필수 X)
});

module.exports = upload; // export시 upload 메서드로 사용 가능

 

5. router 설정

const express = require("express");
const router = express.Router();
const upload = require("../modules/multer");
const { uploadImage } = require("../controller/image"); //upload 완료 후 실행될 콜백함수

router.post("/upload", upload.single("image"), uploadImage);

module.exports = router;

 

오늘의 에러

The bucket does not allow ACLs (Service: Amazon S3; Status Code: 400; Error Code: AccessControlListNotSupported

해결

bucket의 객체 소유권 부여

관련 문서 :

https://fun-coding-study.tistory.com/324

 

오늘의 느낀 점

정보처리기사 공부가 본격적으로 시작되고 있다. 오늘 UI 공부는 비교적 쉬웠지만, 어제 공부했던 플랫폼, UML 등의 개념은 복습해도 어렵다. 이렇게 이론적인 것들에 대해 배우니 컴퓨터 공학을 더 배우고 싶다는 욕심이 든다. 계획했던 대로 진행해 끝까지 잘 마무리해서 이번 필기 시험에 통과할 수 있길 : )

 

오늘 AWS S3와 multer를 이용하여 백엔드(Node.js)에서의 이미지 저장 기능을 구현했다. 버킷, IAM 등 AWS 관련 용어들과 multer 라이브러리 들을 처음 접해 처음 2시간 정도는 헤맸지만 다행히 잘 마무리 할 수 있었다. AWS S3 버킷 생성과 multer 라이브러리 사용 방법에 대해선 많은 문서들이 존재했지만, IAM 설정 등에 대해서 잘 설명되어 있는 문서는 거의 찾아볼 수 없었다. 덕분에 몇몇 에러들로 인해 엄청 해멨다. 이번주 주말에 나와 같이 헤매는 분에게 도움이 될 수 있도록 제대로 정리해 본 문서를 작성 해 볼 계획이다.

(저 같은 사람 또 없게 해주세요)

 

'TIL' 카테고리의 다른 글

TIL #034  (0) 2023.04.29
TIL #033  (0) 2023.04.29
TIL #031  (0) 2023.04.24
TIL #029  (0) 2023.04.21
TIL #028  (0) 2023.04.20