나의 개발일지(김지헌)
항해 99 73일차 11/30일 본문
오늘은 중복된 코드를 통합을 하고 어제 성능 측정을 했던 코드를 실제 우리가 필요한 코드로 바꾼 후 한번더 측정을 해보았다.
기존 라우터 코드
//userRouter
import { upload } from '../../utils/multer';
router.put('/myPage', authmiddleware, upload.single('profileImg') , User.updateUser);
//reviewRouter
import { uploads } from '../../utils/multer';
//리뷰작성
reviewrouter.post('/:campId/review', authmiddleware, uploads.array('reviewImg',4),reviewController.createReview);
//리뷰수정
reviewrouter.put('/:campId/:reviewId', authmiddleware, uploads.array('reviewImg',4),reviewController.updateReview);
//S3Client 사용
import { S3Client } from '@aws-sdk/client-s3'
import multer from 'multer'
import multerS3 from 'multer-s3'
import dotenv from 'dotenv'
import path from 'path'
import AWS from 'aws-sdk'
dotenv.config()
export const upload = (
multer({
storage : multerS3({
s3: new S3Client({
credentials:{
accessKeyId: process.env.S3_ACCESS_KEY!, //방급받은 ACCESSKEY
secretAccessKey: process.env.S3_SECRET_KEY!//방급받은 SECRETKEY
},
region:process.env.S3_KEY_REGION!,//지역
}),
bucket: process.env.S3_bUCKET!, //버켓이름
acl: "public-read", //권한
contentType: multerS3.AUTO_CONTENT_TYPE,
key(req, file, cb) {
const random = Math.floor(Math.random()*10001)
cb(null, `user/${Date.now()}${random}${path.extname(file.originalname)}`) // original 폴더안에다 파일을 저장
},
}),
limits: { fileSize: 5 * 1024 * 1024 },
})
)
export const uploads = (
multer({
storage : multerS3({
s3: new S3Client({
credentials:{
accessKeyId: process.env.S3_ACCESS_KEY!, //방급받은 ACCESSKEY
secretAccessKey: process.env.S3_SECRET_KEY!//방급받은 SECRETKEY
},
region:process.env.S3_KEY_REGION!,//지역
}),
bucket: process.env.S3_bUCKET!, //버켓이름
acl: "public-read", //권한
contentType: multerS3.AUTO_CONTENT_TYPE,
key(req, file, cb) {
const random = Math.floor(Math.random()*10001)
cb(null, `review/${Date.now()}${random}${path.extname(file.originalname)}`) // original 폴더안에다 파일을 저장
}
},
}),
limits: { fileSize: 5 * 1024 * 1024 },
})
)
export const deleteFile = (fileDir:string, fileName:string) => {
try {
const s3 = new AWS.S3({
accessKeyId: process.env.S3_ACCESS_KEY!, //방급받은 ACCESSKEY
secretAccessKey: process.env.S3_SECRET_KEY!,//방급받은 SECRETKEY
})
const params = {
Bucket: process.env.S3_bUCKET!,
Key: fileDir.concat('/', fileName)
};
s3.deleteObject(params, function (err ) {
if (err) {
console.log('err: ', err, err.stack);
} else {
console.log(`${fileDir}/${fileName} : 정상 삭제 되었습니다.`);
}
})
} catch(err) {
console.log(err);
throw err;
}
}
기존 코드는 upload와 uploads로 구분 지어서 한장만 받을 때와 여러장을 받을 때 코드를 나누어서 작성을 했는데 같은 코드를 두번 나누어서 사용을 하니깐 가독성이 떨어지고 코드가 길어지며 효율이 떨어진다고 생각해서 코드를 구분짓지 않고 하나로 합쳤다.
export const upload = (
multer({
storage : multerS3({
s3: new S3Client({
credentials:{
accessKeyId: process.env.S3_ACCESS_KEY!, //방급받은 ACCESSKEY
secretAccessKey: process.env.S3_SECRET_KEY!//방급받은 SECRETKEY
},
region:process.env.S3_KEY_REGION!,//지역
}),
bucket: process.env.S3_bUCKET!, //버켓이름
acl: "public-read", //권한
contentType: multerS3.AUTO_CONTENT_TYPE,
key(req, file, cb) {
const random = Math.floor(Math.random()*10001)
if(file.fieldname == 'profileImg'){
cb(null, `user/${Date.now()}${random}${path.extname(file.originalname)}`) // original 폴더안에다 파일을 저장
}else{
cb(null, `review/${Date.now()}${random}${path.extname(file.originalname)}`) // original 폴더안에다 파일을 저장
}
},
}),
limits: { fileSize: 5 * 1024 * 1024 },
})
)
프론트에서 파일을 보내줄 때 req.file안에 fieldname이라는 항목에 있는 키 값을 기준으로 if문으로 예외처리를 해서 코드를 바꾸었다.
'항해 99' 카테고리의 다른 글
항해 99 75일차 12/02일 (0) | 2022.12.03 |
---|---|
항해 99 74일차 12/01일 (0) | 2022.12.02 |
항해 99 72일차 11/29일 (0) | 2022.11.30 |
항해 99 71일차 11/28일 (0) | 2022.11.28 |
항해 99 70일차 11/27일 (0) | 2022.11.27 |