반응형
앱에서 고유 ID(Unique ID)를 생성해야 할 때, 가장 널리 쓰이는 방식이 바로 UUID (Universally Unique Identifier)입니다.
Flutter에서는 uuid 패키지를 통해 간편하게 다양한 방식의 UUID를 생성할 수 있습니다.
이 글에서는:
- uuid 패키지 설치 방법
- UUID 버전(v1, v4, v5)의 차이점
- 실전 예제와 사용 팁
까지 하나씩 정리해보겠습니다.
📦 1. uuid 패키지 설치하기
flutter pub add uuid
혹은 pubspec.yaml에 직접 추가:
dependencies:
uuid: ^4.2.1 # 최신 버전 확인
그리고 import:
import 'package:uuid/uuid.dart';
🧬 2. UUID 버전별 차이점 정리
버전 방식 설명 특징
v1 | Time-based | 시간 + 기기(MAC 주소) 기반 | 순차적 생성 가능, MAC 유출 위험 |
v2 | DCE Security | v1 + 사용자/그룹 ID | 거의 사용되지 않음 |
v3 | Name-based (MD5) | 문자열 + 네임스페이스 → MD5 해시 | 입력이 같으면 UUID도 같음 |
v4 | Random | 무작위(random) 값 기반 | 일반적으로 가장 많이 사용됨 |
v5 | Name-based (SHA-1) | v3와 동일하나 SHA-1 해시 사용 | 더 강력한 보안 해시 |
⚙️ 3. UUID 생성 예제 (Dart 코드)
final uuid = Uuid();
// ✅ v1 – 시간 + MAC 주소 기반
String idV1 = uuid.v1(); // 예: 'f64c8b26-3e46-11ec-8d3d-0242ac130003'
// ✅ v4 – 랜덤 기반 (가장 많이 사용)
String idV4 = uuid.v4(); // 예: 'c3c3bc94-b070-4787-9f7d-b2592b4d51ef'
// ✅ v5 – 고정된 문자열로 UUID 생성 (SHA-1)
String idV5 = uuid.v5(Uuid.NAMESPACE_URL, 'https://example.com');
📌 v3도 동일 방식으로 가능:
String idV3 = uuid.v3(Uuid.NAMESPACE_URL, 'https://example.com'); // MD5 기반
✅ 실전에서는 언제 어떤 버전?
상황 추천 버전 이유
단순한 고유 ID가 필요할 때 | v4 | 간단하고 충돌 확률 매우 낮음 |
시간 순서대로 정렬이 필요할 때 | v1 | 생성 시간 정보 포함됨 |
입력값이 항상 같을 때 동일한 ID가 필요할 때 | v5 (또는 v3) | 해시 기반 고정 UUID 생성 |
❗️주의할 점 (v1의 MAC 주소 노출)
- v1 UUID는 내부적으로 기기의 MAC 주소를 사용합니다.
- 이 정보는 유출되면 기기 식별 가능성이 있으므로 보안이 중요한 앱에서는 피하는 것이 좋습니다.
- 대부분의 경우 v4를 사용하는 것이 안전하고 충분합니다.
✨ 실전 사용 예: 모델 ID 생성
class Task {
final String id;
final String title;
Task({required this.title}) : id = const Uuid().v4();
}
→ 매 Task 인스턴스를 생성할 때 자동으로 고유한 UUID를 부여합니다.
🧩 요약
- uuid 패키지를 설치하면 다양한 방식으로 고유 식별자를 생성할 수 있음
- 대부분의 경우 v4 (랜덤 기반)가 안정적이고 보편적
- v5는 동일 입력 → 동일 UUID가 필요할 때 매우 유용
반응형