본문 바로가기
개발이야기/server

Multer, AWS S3, Architecture

by 효우너 2020. 8. 24.
728x90
반응형

※이 포스팅은 sopt 26기 server part seminar 자료 바탕으로 작성되었으며, 복습용입니다.

1-1. Multer

Multer란, multipart/form-data 로 들어온 이미지를 처리하는 모듈

- 지정한 곳으로 이미지 저장 가능

multer.single(fieldname)

// fieldname :이미지를 받을 키 값
// fieldname으로 받은 파일을 req.file에 저장 
// req.file.location : 파일의 위치
multer.array(fieldname[, maxCount])
// fieldname : 이미지를 받을 키 값
// maxCount : 받을 이미지의 최대 개수
// fieldname으로 받은 여러 개의 파일들을 req.files에 저장 
// req.file[i].location : 파일의 위치 maxCount의 개수만큼 받아옴

순서대로, 하나만 받아올 때(single)와 여러개(array) 받아올 때다.

먼저, multer를 사용하려면 프로젝트에

$ npm install multer 를 설치해야한다.

router.post('/profile', AuthMiddleware.checkToken, upload.single('profile'), UserController.updateProfile);
//upload.single('profile')를 추가
updateProfile: async (req, res) => {
        const userIdx = req.decoded.userIdx;
        const profileImg = req.file.location; //path->location
        console.log(profileImg, userIdx);

        if (profileImg === undefined || !userIdx) {
            return res.status(CODE.OK).send(util.fail(CODE.BAD_REQUEST, MSG.NULL_VALUE));
        }
        const type = req.file.mimetype.split('/')[1];
        if (type !== 'jpeg' && type !== 'jpg' && type !== 'png') {
            return res.status(CODE.OK).send(util.fail(CODE.BAD_REQUEST, MSG.UNSUPPORTED_TYPE));
        }
        const result = await UserModel.updateProfile(userIdx, profileImg);
        res.status(CODE.OK).send(util.success(CODE.OK, MSG.UPDATE_PROFILE_SUCCESS, result));
    }
    //controller부분도 수정!

2-1. AWS S3

AWS S3multer를 사용하면 S3에 이미지 파일이 저장될 수 있게 하고 해당 저장 위치 URL을 multer에게 다시 넘겨준다.

마찬가지로 프로젝트에

$ npm install --save multer-s3 aws-sdk 를 설치해주고 코드를 작성해준다.

const multer = require('multer');
const multerS3 = require('multer-s3');
const aws = require('aws-sdk');
aws.config.loadFromPath(__dirname + '/../config/s3.json');

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.split('.').pop()); // 이름 설정
        }
    })
});
module.exports = upload;

config에도 s3 시크릿키 등을 작성해주면 된다.


3-1. Architecture

Architecture란, 시스템 구성 / 작동 원리

시스템이 어떻게 작동하는지 설명하는 프레임워크, 구조 구성 요소 간의 관계 및 시스템 외부 환경과의 관계 묘사 다양한 아키텍처 패턴


3-2. Monolithic Architecture

Monolithic Architecture애플리케이션은 하나의 결과물로 합쳐져 배포 -> 통으로 묶어서 배포되는 형태

- 하나의 애플리케이션 안에 모든 로직이 들어가 있음

- 하나를 수정하려면 전체 애플리케이션(서버)를 다시 빌드하고 배포해야함

- 개발과 배포가 단순

- 규모가 커지면 여러 단점 발생하고 확장이 어려움

- 하나의 프로세스에서 돌기 때문에 오류가 나면 모든 영향을 한꺼번에 받음


3-3. MSA

MSA하나의 큰 애플리케이션을 서비스 단위로 작게 나누고, 서비스들끼리 서로 통신하는 형태의 아키텍처 패턴 -> 각각의 서비스 별로 서버를 분리하고 따로 개발

- 각각의 서비스는 하나의 작은 애플리케이션처럼 배포가 가능

- 각 서비스는 서로 API를 제공하고 이를 이용해서 서로 호출 (MSA에서는 URI/URL 설계가 중요) 

- 사용자 기기에서 REST API로 서비스를 호출 시 직접 서비스로 가는 것이 아니 라 중간에 API 게이트웨이를 거침

- 개발 언어/프레임워크에 구속 받지 않아 서비스 별로 집중해서 독립적으로 개발할 수 있음 

- 부분적으로 장애가 발생하더라도 다른 서비스는 정상 동작함

- 서비스를 나눠서 서비스 간 통신 방법이 필요함

- 서비스를 나눠서 배포하는 것이 복잡함

728x90
반응형

'개발이야기 > server' 카테고리의 다른 글

REST API, API 문서  (0) 2020.08.24
DB, JWT, 프로젝트 구조  (0) 2020.08.24
Database, RDS  (0) 2020.08.24
Express, Routing  (0) 2020.05.23
Javascript  (0) 2020.05.10

댓글