항해99 👩💻60일차 TIL
⭐ Final Project ⭐
1. Multer-s3를 사용하는데 upload.array 코드를 사용하여 여러장의 이미지를 업로드하도록 변경한 뒤부터 S3에서 이미지가 삭제되지 않는 문제가 발생하였다. 원인은 Key값에는 String형식만 사용할 수 있는데 사진이 여러장일 경우 Key값에 String형식이 아닌 여러장의 imageUrl 뭉텅이 데이터들이 들어가서 인식이 되지 않았던 것이었다. 그래서 Key값을 저장할 빈 array을 하나 만들어주고 for문을 사용하여 이미지들을 하나씩 추출하여 가공한 뒤, String타입으로 변환시켜서 미리 만들어둔 빈 array에 키 값들을 push해주는 방법으로 해결하였다.
2. 초반부터 reviewId는 몽고db에서 기본적으로 제공해주는 _id 값을 tohexString으로 변환시켜 사용하고 있었는데, 프론트단에서 이렇게하면 쓸데없는 데이터들도 같이 넘어와서 정제하기 불편하다고 다른 방식으로 만들어달라고 요청하셨다. 그래서 고유값을 만들어주는 uuid를 사용하여 reviewId를 만들어주는 것으로 변경하였다.
🐣 Today I Learned 🐣
UUID 란?
- uuid는 Universal Unique IDentifier의 약자로 전세계에서 유일한 ID라는 뜻이다.
- Public한 화면단에서는 ramdom한 UUID를 사용하는 것을 권장한다.
- 총 36개의 문자로 이루어져있다.(32개의 문자와 4개의 하이픈으로 구성된 총 5개의 그룹)
UUID의 종류
- v1: 타임스탬프(시간) 기준
- v3: MD5 해시 기준
- v4: 랜덤값 기반
- v5: SHA-1 해시 기준
사용법
1) 설치
# npm
npm install uuid
# yarn
yarn add uuid
# v4 만 설치
npm install uuid4
2) ES5 이하
const { v4 } = require('uuid');
// 기본 설정으로 생성
v4();
//설정을 붙여서 생성
let options = {
random: // 16개의 랜덤 바이트값
rng: // random 변수를 대체할 16개의 랜덤 바이트값을 반환하는 함수
}
v4(options);
3) 데이터베이스 Index UUID
UUID를 그대로 데이터베이스 테이블 id로 사용한다면 한가지 문제점이 있다.
UUID값는 16진수의 문자열과 '-'으로 이루어져 있기 때문에, string 형태로 저장된다.
하지만 DB에서 string 데이터를 인덱싱하면, 인덱스도 비정상적으로 커지며 검색 성능도 많이 떨어지게 된다.
따라서, UUID 값을 인덱싱 가능하고 순서를 보장받는 체계로 변경하는 방법이 있다
1-2-3-4-5 의 구조를 32145 로 변경하면 어느정도 보장받는 수 체계로 변환할 수 있다고 한다.
JS 코드로 작성하면 아래와 같이 사용할 수 있다.
const { v4 } = require('uuid');
const uuid = () => {
const tokens = v4().split('-')
return tokens[2] + tokens[1] + tokens[0] + tokens[3] + tokens[4];
}
uuid();