UUID가 뭔지 몰랐다
HTTP 멀티파트 공부하다가 코드에서 UUID가 계속 나오길래 찾아봤다.
UUID는 그냥 엄청 긴 랜덤 문자열이다
123e4567-e89b-12d3-a456-426614174000
36자리, 숫자 + 알파벳, 중간에 하이픈(-). 이게 전부다.
왜 쓰냐면
파일 업로드를 생각해보자. 여러 사용자가 각자 강아지.jpg를 올리면 어떻게 될까? 뒤에 올라온 파일이 앞 파일을 덮어써버린다. 한글 파일명은 서버에서 깨지는 경우도 많다.
UUID를 앞에 붙이면 이 문제가 한 번에 해결된다.
// Java에서
String fileName = UUID.randomUUID() + "_" + originalFileName;
// 결과: 123e4567-e89b-12d3-a456-426614174000_강아지.jpg- 파일명 중복 없음
- 한글 깨질 걱정 없음
- 추측하기도 어려워서 보안에도 유리
주의할 점
UUID가 길어서 DB에 저장할 때 용량을 좀 잡아먹는다. 그래서 UUID를 파일명으로 저장하고 원본 파일명은 별도 컬럼에 같이 저장해두는 게 일반적이다. 다운로드할 때는 원본 파일명으로 돌려주면 된다.
DB 기본 키로도 쓰는 경우가 있는데, 순차 ID(Auto Increment)와 비교하면 인덱스 성능 차이가 있어서 논란이 있다. UUID v7처럼 정렬 가능한 버전이 나온 것도 이 때문이다.
버전들
보통 v4를 쓴다 (완전 랜덤). 세션 ID나 토큰 생성에도 가끔 쓴다.