본문으로 바로가기

평소 ID 값은 1, 2, 3이었는데....

category JavaScript 2025. 1. 13. 22:39

애플리케이션을 개발하다 보면 데이터를 구분하기 위해 고유한 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()를 활용하면 좋습니다.