본문 바로가기
Java

[Java] UUID를 이용한 고유 식별자 생성

by 긍고 2024. 9. 22.
반응형

개요


개발 프로젝트에서 데이터베이스의 각 레코드를 고유하게 식별해야 하는 경우가 많다. 일반적으로는 자동 증가하는 숫자형 ID를 사용하는 경우가 많지만, 분산 시스템이나 여러 서비스가 동시에 데이터베이스에 접근하는 환경에서는 고유성이 보장되는 UUID(Universally Unique Identifier)가 더 적합한 경우가 많다. 이번 프로젝트에서도 여러 서버에서 고유한 식별자를 생성해야 했기에, UUID를 사용하는 방법을 찾아보게 되었다.

 

UUID란 무엇인가?


UUIDUniversally Unique Identifier의 약자로, 전 세계적으로 고유한 식별자를 생성하는 데 사용된다. UUID는 128비트 길이의 숫자로 이루어져 있으며, 36자리의 문자열로 표현된다. 아래는 UUID의 일반적인 형식이다.

550e8400-e29b-41d4-a716-446655440000

 

UUID는 매우 큰 값의 범위를 갖기 때문에 중복될 확률이 거의 없다. 이 때문에 분산 시스템이나 여러 서비스가 동시에 데이터를 생성할 때, 고유 식별자를 보장하기 위해 많이 사용된다.

 

자바에서 UUID 생성하기


자바에서 UUID를 생성하는 것은 매우 간단하다. java.util.UUID 클래스를 사용하면 쉽게 UUID를 생성할 수 있다. 기본적으로는 UUID version 4를 많이 사용하는데, 이는 난수를 기반으로 UUID를 생성하는 방식이다.

import java.util.UUID;

public class UUIDExample {
    public static void main(String[] args) {
        UUID uuid = UUID.randomUUID();
        System.out.println("생성된 UUID: " + uuid.toString());
    }
}

 

이 코드를 실행하면 randomUUID() 메서드를 통해 고유한 UUID가 생성된다. 이를 문자열 형태로 변환해 데이터베이스나 파일에 저장할 수 있다.

 

UUID의 사용 예시


UUID는 데이터베이스의 기본 키로 사용할 수 있을 뿐만 아니라, 파일 이름을 고유하게 생성하거나, 트랜잭션 ID, 주문 번호, 사용자 세션 식별자 등 여러 용도로 활용할 수 있다.

import java.util.UUID;

public class OrderService {
    public static void main(String[] args) {
        String orderId = UUID.randomUUID().toString();
        System.out.println("주문 번호: " + orderId);
    }
}

 

이처럼 UUID를 사용하면, 별도의 추가 설정 없이 고유한 주문 번호를 생성할 수 있다. 이를 통해 여러 서버에서 동시에 주문이 들어오는 환경에서도 주문 번호의 충돌을 피할 수 있다.

 

UUID와 다른 고유 식별자 방식 비교


UUID 외에도 고유 식별자를 생성하는 여러 방식이 있다. 그중 하나가 데이터베이스에서 자동 증가(AUTO_INCREMENT)를 사용하는 방법이다. 그러나 이 방식은 분산 환경에서는 한계가 있다. 다른 방식으로는 Timestamp + Random 값을 조합하는 방식이 있는데, 이 역시 간단하고 유용하지만 UUID만큼의 범위와 고유성을 제공하지 못한다.

방식 고유성 보장 분산 시스템 적합성 길이
UUID 매우 높음 매우 적합 128비트
AUTO_INCREMENT 낮음 적합하지 않음 4~8바이트
Timestamp + Random 중간 부분적으로 적합 가변적

 

정리


UUID는 자바에서 간편하게 고유한 식별자를 생성할 수 있는 강력한 도구이다. 특히 분산 시스템이나 여러 서비스가 동시에 데이터를 처리하는 환경에서 중복을 피하기 위한 최고의 방법 중 하나이다. 위에서 설명한 것처럼 UUID를 생성하고 사용하는 방법은 간단하며, 다양한 상황에서 고유성을 보장할 수 있다는 점에서 큰 장점이 있다. 필요에 따라 UUID를 활용하여 더욱 안전하고 유연한 시스템을 설계할 수 있을 것 같다.

댓글