스프링부트로 인스타그램의 이미지를 업데이트 하는 기능에서 같은 파일이 덮어씌어지는 것을 방지하기 위한 방법으로 UUID에 대해 알게되었다.
네트워크 상에서 고유성이 보장되는 id를 만들기 위한 표준 규약.
자바에서 통칭하는 UUID는 범용 고유 식별자(Universally Unique Identifiers)를 말한다.
128-bit 숫자로 이루어져 있으며, xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx 형식으로 표현한다
만약 같은 파일이 연속적으로 업로드 되거나, 다른 유저가 같은 파일을 업데이트 하는 경우 등 충돌이 일어날 수 있다. 다시말해 중복되지 않도록 하기 위해 고유 식별자를 부여하는 것이 UUID이다.
처음 DB 설계단에서 유저를 식별하도록 하거나 예외처리를 하면 되는거아니야? 라는 생각이 들수 있다.
UUID는 고유한 키를 간단하게 생성해서 사용할 수 있기 때문에 사용하기도 한다. 서비스가 커지고 여러 데이터베이스를 사용하거나 분산된 환경에서 애플리케이션을 운영하는 경우 DB에서 흔히 사용하는 자동증가 칼럼외에 다른 방식의 식별자를 고려해야 하는 경우가 있다.
하지만 UUID의 경우 위의 사진처럼 워낙 코드가 길기 때문에 DB에 과부하가 걸릴 수 있다. 실제 UUID는 기간제나 임시 유저의 key값을 사용하거나 파일 등을 업로드할때 식별하는 용도로 사용한다고 한다.
자바 util안에 있는 randomUUID를 사용하면 된다.
import java.util.UUID;
String uuid = UUID.randomUUID().toString();
나의 경우 서비스 단계에서 이미지 uuid + 파일명를 붙여 사용하였다.
콘솔을 보면 uuid와 파일명이 잘 조합되어서 DB에 업데이트 된것을 볼 수있다.
참고자료
https://coderolls.com/uuid-in-java/
https://wakestand.tistory.com/361
https://www.inflearn.com/questions/195134
https://wakestand.tistory.com/361