JUG는 표준 방법을 사용하여 UUID 생성, 효율적인 출력, 정렬 등 UUID 작업을 위한 Java 클래스 세트입니다. UUID 사양(RFC-4122)에 따라 UUID를 생성합니다(자세한 설명은 Wikipedia UUID 페이지 참조).
JUG는 Tatu Saloranta([email protected])가 2002년에 처음 작성했으며 수년에 걸쳐 업데이트되었습니다. 또한 많은 사람들이 버그 수정과 새로운 기능 구현에 도움을 주었습니다. 전체 목록은 release-notes/CREDITS
참조하세요.
JUG는 Apache License 2.0에 따라 라이센스가 부여됩니다.
JUG는 RFC 4122에 정의된 "클래식" 버전을 모두 지원합니다]:
1
: 시간/위치 기반3
및 5
: 이름 해시 기반4
: 난수 기반그리고 새로(2022-2024년) 제안된 변형(uuid6 및 RFC-4122 bis 참조):
6
: 버전 1
의 재정렬된 변형(사전식 순서 사용)7
: Unix 타임스탬프 + 무작위 기반 변형(사전식 순서도 포함) 유형 | 상태 |
---|---|
빌드(CI) | |
인공물 | |
OSS 후원 | |
Javadoc | |
코드 적용 범위(5.x) | |
OpenSSF 점수 |
JUG는 명령줄 도구( com.fasterxml.uuid.Jug
클래스를 통해) 또는 플러그형 구성 요소로 사용할 수 있습니다.
Maven 좌표는 다음과 같습니다.
< dependency >
< groupId >com.fasterxml.uuid</ groupId >
< artifactId >java-uuid-generator</ artifactId >
< version >5.1.0</ version >
</ dependency >
그래들:
implementation ' com.fasterxml.uuid:java-uuid-generator:5.1.0 '
JUG의 유일한 종속성은 로깅 라이브러리입니다.
log4j
사용됩니다(런타임 종속성).slf4j
API가 사용됩니다. 애플리케이션을 호출하여 로깅 구현이 제공됩니다. 버전 3.2.0
부터 JUG는 com.fasterxml.uuid
라는 모듈 이름을 사용하여 JDK9+ 호환 module-info.class
정의합니다.
직접 다운로드하려면 Project Wiki를 확인하세요.
JUG의 원래 사용 사례는 UUID 값 생성이었습니다. 먼저 사용할 생성기 종류를 선택한 다음 generate()
메서드를 호출하면 됩니다. 예를 들어:
UUID uuid = Generators . timeBasedGenerator (). generate (); // Version 1
UUID uuid = Generators . randomBasedGenerator (). generate (); // Version 4
UUID uuid = Generators . nameBasedgenerator (). generate ( "string to hash" ); // Version 5
// With JUG 4.1+: support for https://github.com/uuid6/uuid6-ietf-draft versions 6 and 7:
UUID uuid = Generators . timeBasedReorderedGenerator (). generate (); // Version 6
UUID uuid = Generators . timeBasedEpochGenerator (). generate (); // Version 7
// With JUG 5.0 added variation:
UUID uuid = Generators . timeBasedEpochRandomGenerator (). generate (); // Version 7 with per-call random values
생성기를 사용자 정의하려면 생성기 인스턴스를 유지하는 것이 좋습니다.
TimeBasedGenerator gen = Generators . timeBasedGenerator ( EthernetAddress . fromInterface ());
UUID uuid = gen . generate ();
UUID anotherUuid = gen . generate ();
시스템에 표준 IP 네트워킹 설정이 있는 경우 Generators.defaultTimeBasedGenerator
(JUG 4.2에 추가됨) 팩토리 메소드는 모든 나가는 네트워크 트래픽에 대한 기본 경로에 해당하는 네트워크 인터페이스를 결정하고 이를 사용하여 시간 기반 생성기를 생성합니다. 버전 1 UUID 생성기를 원하는 경우 일반적인 사용 시나리오에 적합한 선택일 수 있습니다.
TimeBasedGenerator gen = Generators . defaultTimeBasedGenerator ();
UUID uuid = gen . generate ();
UUID anotherUuid = gen . generate ();
생성기는 완전히 스레드로부터 안전하므로 단일 인스턴스를 여러 스레드에서 공유할 수 있습니다.
자세한 내용은 Javadoc을 Project Wiki에서 찾을 수 있습니다.
java.util.UUID
값을 byte[]로 변환 때로는 java.util.UUID
를 외부 직렬화로 변환하고 싶을 수도 있습니다(예: String
또는 바이트 배열( byte[]
)). UUID.toString()
(JDK에서 제공)을 사용하면 String
로 변환하는 것이 쉽지만 byte[]
로 변환하는 유사한 기능은 없습니다.
그러나 UUIDUtil
클래스는 효율적인 변환을 위한 방법을 제공합니다.
byte[] asBytes = UUIDUtil.asByteArray(uuid);
// or if you have longer buffer already
byte[] outputBuffer = new byte[1000];
// append at position #100
UUIDUtil.toByteArray(uuid, outputBuffer, 100);
java.util.UUID
값 생성 UUID
값은 종종 java String
s 또는 byte[]
s(바이트 배열)로 전달되며 실제 java.util.UUID
인스턴스에 도달하려면 변환이 필요합니다. JUG는 UUIDUtil
클래스(패키지 com.fasterxml.uuid.impl
)를 통해 다음과 같이 사용되는 최적화된 변환 기능을 제공합니다.
UUID uuidFromStr = UUIDUtil.uuid("ebb8e8fe-b1b1-11d7-8adb-00b0d078fa18");
byte[] rawUuidBytes = ...; // byte array with 16 bytes
UUID uuidFromBytes = UUIDUtil.uuid(rawUuidBytes)
JDK에는 다음과 같이 String
에서 UUID
구성하는 기능이 있습니다.
UUID uuidFromStr = UUID.fromString("ebb8e8fe-b1b1-11d7-8adb-00b0d078fa18");
JUG 버전보다 다소 느립니다. 자세한 내용은 Java UUID.fromString()의 성능 측정을 참조하세요.
target/
아래에 JUG jar가 빌드됨:
target/java-uuid-generator-5.1.0-SNAPSHOT.jar
간단한 명령줄 UUID 생성 도구로도 사용할 수 있습니다.
사용법을 보려면 다음과 같이 할 수 있습니다.
java -jar target/java-uuid-generator-5.1.0-SNAPSHOT.jar
전체 지침을 얻지만 5개의 무작위 기반 UUID를 생성하려면 다음을 사용합니다.
java -jar target/java-uuid-generator-5.1.0-SNAPSHOT.jar -c 5 r
(여기서 -c
(또는 --count
)는 생성할 UUID 수를 의미하고 r
무작위 기반 버전을 의미합니다.)
참고: 이 기능은 JUG 4.1부터 포함됩니다. 이전 버전에서는 Jar 메타데이터가 "Main-Class"를 지정하지 않았기 때문에 호출 시간이 조금 더 길어졌습니다. 그렇다면 다음을 사용해야 합니다.
java -cp target/java-uuid-generator-5.1.0-SNAPSHOT.jar com.fasterxml.uuid.Jug -c 5 r
JUG 버전 3.1 이상이 작동하려면 JDK 1.6이 필요하며 대부분 로컬 이더넷 MAC 주소에 액세스할 수 있습니다. 이전 버전(3.0 및 이전)은 1.4( java.util.UUID
도입)에서 작동했습니다.
JUG 버전 5.0 이상이 작동하려면 JDK 8이 필요합니다.
JDK의 java.util.UUID
에는 64비트 값의 순진한 비교를 사용하는 compareTo()
구현에 결함이 있습니다. 기본 콘텐츠가 모든 목적에 대해 서명되지 않은 경우 이는 예상대로 작동하지 않습니다. 예를 들어 두 개의 UUID는 다음과 같습니다.
7f905a0b-bb6e-11e3-9e8f-000000000000
8028f08c-bb6e-11e3-9e8f-000000000000
부호 확장으로 인해 두 번째 값부터 먼저 주문됩니다(두 번째 값은 음수로 간주되므로 "더 작음").
이 때문에 항상 com.fasterxml.uuid.UUIDComparator
와 같은 외부 비교기를 사용해야 합니다. 이는 간단한 부호 없는 정렬인 예상 정렬 순서를 구현하며 UUID의 사전식(알파벳) 정렬(균일한 대문자 사용을 가정할 때)과 동일합니다. .
Tidelift 구독의 일부로 제공됩니다.
java-uuid-generator
및 수천 개의 기타 패키지 관리자는 Tidelift와 협력하여 애플리케이션 구축에 사용하는 오픈 소스 종속성에 대한 상업적 지원 및 유지 관리를 제공하고 있습니다. 시간을 절약하고 위험을 줄이며 코드 상태를 개선하는 동시에 사용하는 정확한 종속성에 대한 비용을 관리자에게 지불합니다. 자세히 알아보세요.
간단한 버그 보고, 수정, 기능 요청의 경우 Tidelift 보안 연락처 제출을 권장하는 보안 관련 문제를 제외하고는 프로젝트 이슈 트래커를 사용하시기 바랍니다(참고: 구독자가 아니어도 이 작업을 수행할 수 있습니다).
그 밖에도 공개적으로 사용 가능한 UUID 생성기가 많이 있습니다. 예를 들어:
java.util.UUID
포함했지만 생성 방법(특히 시간/위치 기반 방법)을 생략하고 많은 작업에 대해 표준 이하의 성능을 가지며 쓸모없는 방식으로 비교를 구현합니다.일부 패키지는 다른 패키지보다 빠르다고 주장하지만 명확하지 않습니다.
따라서 패키지와 API의 안정성을 기준으로 선택하는 것이 가장 좋습니다.