※이 포스팅은 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 S3는 multer를 사용하면 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 게이트웨이를 거침
- 개발 언어/프레임워크에 구속 받지 않아 서비스 별로 집중해서 독립적으로 개발할 수 있음
- 부분적으로 장애가 발생하더라도 다른 서비스는 정상 동작함
- 서비스를 나눠서 서비스 간 통신 방법이 필요함
- 서비스를 나눠서 배포하는 것이 복잡함
'개발이야기 > 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 |
댓글