다중이미지 업로드를 구현하면서 많이 고민해봤다
이미지가 여러개가 들어가면서 데이터 자료형의 무게만 늘리는게 좋은 방향이 아니라고 느끼고 부터 구글링을 많이 해봤다.
bitly 라는 url 단축 서비스를 무작정 사용하기 전에 , 내 이미지 url이 너무 길다는 생각이 들어 코드부터 다시 보기 시작했는데 생각해보니 originalname이 공개적으로 url에 들어가서 사용자에게 노출되는것이 바람직할까 ? 하는 생각에 다달았다
기존 코드부터 보자
const upload = multer({
storage: multerS3({
s3: s3Client,
bucket: process.env.AWS_BUCKET_NAME,
acl: 'public-read',
contentType: multerS3.AUTO_CONTENT_TYPE,
key: function (req, file, cb) {
cb(null, `${Date.now()}_${path.basename(file.originalname)}`);
},
}),
});
이런식으로 코드가 들어가면 DB 에 저장되는 url은
https://chatdiet.s3.ap-northeast-2.amazonaws.com/1694395030926_2.png
이 된다. 아예 파일명이 들어가는것. 파일이름이 그대로 들어가게되면 , 파일명이 길어지면 답도 없이 url도 길어졌다 특히 다른곳에서 다운받은 파일들.
찾아보니 아예 파일명이 들어가는것은 보안상 좋은 방법은 아니였다. 물론 bitly를 사용하면 유저에게는 다르게 보이겠지만, bitly를 되돌리는 방식도 있으니 말이다 (약간 hash 처럼)
그래서 숫자로 바꾸거나 , 보안이 중요하다면 UUID 형식으로 바꾸는 방법도 있었는데
UUID 를 테스트 해보았다
const upload = multer({
storage: multerS3({
s3: s3Client,
bucket: process.env.AWS_BUCKET_NAME,
acl: 'public-read',
contentType: multerS3.AUTO_CONTENT_TYPE,
key: function (req, file, cb) {
const extension = path.extname(file.originalname);
const uniqueFilename = `${uuid.v4()}${extension}`;
cb(null, uniqueFilename);
},
}),
});
결과물은
https://chatdiet.s3.ap-northeast-2.amazonaws.com/33a59edb-071e-4e0f-97d5-c3c819cad76e_chatDiet%C3%AB%C2%A1%C2%9C%C3%AA%C2%B3%C2%A0.png
이렇게 파일명이 나오게 되는데 ,,
우리 서비스중 이미지를 올리는 경우가 잦은데 UUID -> bitly 로 항상 업로드하게 되면 너무 무거워지고 , 그렇게까지 보안을 철저히 지켜야하는 이미지가 아니라는 결론이 났다
결국 바꾼 코드는
const upload = multer({
storage: multerS3({
s3: s3Client,
bucket: process.env.AWS_BUCKET_NAME,
acl: 'public-read',
contentType: multerS3.AUTO_CONTENT_TYPE,
key: function (req, file, cb) {
let extension = path.extname(file.originalname);
cb(null, Date.now().toString() + extension);
},
}),
});
이렇게 !
파일의 타입과 업로드 되는 날만 가지고와서 문자열로 내보내는것 !
그렇다면 결국 겹치지도 않고 , 너무 길어지지도 않으며 사진의 파일명 또한 노출이 되지 않게 된다 !
생각해보면 가벼웠던 문제였던 것 같은데 보안문제니 , 라이브러리니 더 좋은 방법이 없을까 찾아보던게 결국 오래 걸리게 된 이유인것 같다.
하지만 제대로 고민해본 중요했던 과정이라고 생각이 든다 !
'AWS EC2,RDS,S3' 카테고리의 다른 글
aws s3 sharp image resizing 로직/어느 시점에서 리사이징을 하는것이 좋은지 + multer-s3-transform error (0) | 2023.09.14 |
---|---|
aws s3 다중업로드 : 여러이미지 불러올때 마지막 이미지가 엑스박스인 경우 -> VARCHAR 길이 조정이 좋은 방법일까 ? (0) | 2023.09.09 |