티스토리 뷰

Server

[Java] UUID 활용하기

니용 2021. 1. 14. 13:30
반응형

 

UUID가 만들어지는 구조원리

 

UUID(Universally unique identifier): 범용 고유 식별자

 

UUID는 테이블에서 key로 사용될 수 있는 대표적인 KeyGen의 방법 중 하나입니다. 

UUID는 Java에서 제공해주는 기본적인 클래스로 사용할 수 있습니다.

import java.util.UUID;

UUID의 특징

1. 중복이 날 확률이 거의 없다(있다고는 하나 1초에 2.71 * 10^18 개의 UUID를 생성했을 때 최소 1개가 중복(충돌) 될 확률이 약 50% 정도라고 합니다.

 

참고: gafani.tistory.com/entry/MariaDBmysql-UUID-%EB%A1%9C-PK-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

MariaDB(mysql) UUID 로 PK 사용하기

늘 디비를 설계할 때 고민되는게, AUTO_INCREMENT 속성의 INT 또는 BIGINT 로 설정된 Primary Key 컬럼을 사용하는데요, 항상 의문이었습니다. Unsigned Integer 의 경우 0 에서 4,294,967,295 까지이고, Unsigned..

gafani.tistory.com

2. 생김새와 사용법은 아래와 같이 생겼습니다.

String uuid = UUID.randomUUID().toString(); // 19c24da2-4708-42fa-8613-d9985faa6948

 

3. 마이크로소프트의 GUID와 같은 의미로 사용한다고 합니다.

 

4. 이전에는 Integer Type의 sequence의 값도 많이 사용하였으나 유추하기가 쉬워 UUID를 대체로 사용한다고 합니다.

 

 

 

이렇게 사용하였을 때 자리수가 꽤나 길어서 사용하기 애매한 부분도 생길 수 있습니다.

이를 방지하기 위해 아래와 같이 유틸 클래스를 만들어 보았습니다.

 

public class UUIDGenerateUtils {

    private final static int LENGTH_20_LONG_RADIX = 9;
    private final static int LENGTH_10_INT_RADIX = 9;

    // 10자리의 UUID 생성
    public static String makeShortUUID() {
        UUID uuid = UUID.randomUUID();
        return parseToShortUUID(uuid.toString());
    }

    public static String parseToIntRadixUUID(String uuid, int radix) {
        int l = ByteBuffer.wrap(uuid.getBytes()).getInt();
        return Integer.toString(l, radix);
    }

    public static String parseToLongRadixUUID(String uuid, int radix) {
        long l = ByteBuffer.wrap(uuid.getBytes()).getLong();
        return Long.toString(l, radix);
    }

    // 파라미터로 받은 값을 10자리의 UUID로 변환 
    public static String parseToShortUUID(String uuid) {
        int l = ByteBuffer.wrap(uuid.getBytes()).getInt();
        return Integer.toString(l, LENGTH_10_INT_RADIX);
    }

    // 파라미터로 받은 값을 20자리의 UUID로 변환
    public static String parseToLongUUID(String uuid) {
        long l = ByteBuffer.wrap(uuid.getBytes()).getLong();
        return Long.toString(l, LENGTH_20_LONG_RADIX);
    }
}

 

반응형
댓글
공지사항