애플리케이션을 개발하다 보면 데이터를 구분하기 위해 고유한 ID가 필요합니다.
처음엔 무심코 1, 2, 3처럼 단순한 숫자로 ID를 지정하곤 했죠. 하지만 이런 방식은 충돌 가능성이 높아 대규모 시스템에선 문제가 될 수 있습니다. 다행히 JavaScript에는 손쉽게 고유한 ID를 생성할 수 있는 기능이 있습니다.
1. crypto.randomUUID()
Crypto 인터페이스의 randomUUID() 메서드는 암호학적으로 안전한 난수 생성기를 사용하여 v4 UUID를 생성하는 데 사용됩니다.
Crypto: randomUUID() method - Web APIs | MDN
The randomUUID() method of the Crypto interface is used to generate a v4 UUID using a cryptographically secure random number generator.
developer.mozilla.org
const uniqueId = crypto.randomUUID();
console.log(uniqueId); // 예: '110e8400-e29b-11d4-a716-446655440000'
장점
- RFC 4122 표준을 준수한 UUID 형식(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)의 문자열을 반환합니다.
- 충돌 가능성이 매우 낮아, 대규모 분산 시스템에서도 안심하고 사용할 수 있습니다.
- 보안성이 높아 중요한 데이터의 식별자에도 적합합니다.
단점
- 비교적 긴 문자열로 인해 메모리 사용량이 늘어날 수 있습니다.
- 일부 구형 브라우저에서는 지원하지 않을 수 있습니다.
2. Date.now()
Date.now() 메소드는 UTC 기준으로 1970년 1월 1일 0시 0분 0초부터 현재까지 경과된 밀리초를 반환합니다.
Date.now() - JavaScript | MDN
Date.now() 메소드는 UTC 기준으로 1970년 1월 1일 0시 0분 0초부터 현재까지 경과된 밀리초를 반환합니다.
developer.mozilla.org
const uniqueId = Date.now();
console.log(uniqueId); // 예: 1700000000000
- 반환 값은 숫자로, 밀리초 단위의 타임스탬프입니다.
- 숫자 기반이므로 UUID처럼 긴 문자열이 필요 없는 경우 적합합니다.
장점
- 간단하고 빠릅니다.
- 모든 브라우저와 환경에서 지원합니다.
- 정렬이 필요할 때 유용합니다. (시간 순서 보장)
단점
- 동시 호출 시 충돌 가능성이 있습니다. (동일한 밀리초에 여러 요청이 발생하면 같은 값이 생길 수도....)
- 보안성이 낮아 민감한 데이터 식별자에는 부적합합니다.
보안과 고유성이 중요한 경우 crypto.randomUUID()를, 속도와 간단함이 중요한 경우 Date.now()를 활용하면 좋습니다.