일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- well-know port
- JPA
- AWS
- 캐시 오염
- Spring
- Dirty Checking
- DB
- null
- 자료구조
- java
- buildSrc
- 정규화
- 삭제 이상
- MSA
- Redis
- 스레드 풀
- 3-way handshaking
- 낙관적 락
- 데이터베이스
- ocp
- Kafka
- 삽입 이상
- 페이지네이션
- HTTP
- 자바
- 네트워크
- 갱신 이상
- Kotlin
- gatway
- 비관적 락
- Today
- Total
어 나 갱수.
[Java] UUID 란? 🫢 본문
UUID 란?
네트워크 상에서 교유성이 보장되는 id를 만들기 위한 표준 규약이다.
UUID는 Universally Uniqure IDentifier의 약어이고 범용 고유 식별자라고 한다.
로컬에서 ID를 관리한다면 어떤 아이디들이 생성되었는지 확인한 후 중복을 체크하는 것이 가능하지만, 네트워크 상에서는 이야기가 다르다.
"중복되는 확률이 0에 가까운, 매우 낮은 확률을 가지는 ID를 만드는 방법" 이 방법이 바로 UUID이다. UUID는 계속 생성되어도 중복이
생길 가능성이 0에 가깝다.
UUID의 구성
UUID는 8-4-4-4-12 형태의 문자이다. 각 문자는 16진수 숫자이며, 예를 들면 아래와 같은 형태이다.
05474f5e-52fa-44a4-8a93-edf7e0634097
각 부분에 대한 설명은 다음과 같다. HexDigits가 바로 8-4-4-4-12 형태인 것을 볼 수 있다.
시간을 기반으로 구성된 부분들 : time_low, time_mid, time_hi_and_version
time_low, time_mid, time_hi_and_version 필드는 UUID의 시간을 기반으로 구성된 부분을 나타낸다.
clock_seq_hi_and_res, clock_seq_low 구성 방법
clock_seq_hi_and_res 와 clock_seq_low 는 버전마다 다른 값을 가지는데, Kotlin, Java에서 사용하는 UUID.random() 은
버전 4의 UUID가 사용되며 이는 난수를 기반으로 생성된다.
UUID 충돌 확률
UUID는 중복되기 어려운 값들을 수없이 만듦으로써 단일 값을 보장한다. UUID가 충돌할 확률은 2의 122승 분의 1이며 이에 대한 충돌은 거의 불가능에 가깝다.
Kotlin에서의 UUID
import java.util.UUID
val uuid = UUID.random()
println(uuid)
Java에서의 UUID
import java.util.UUID
UUID uuid = UUID.randomUUID();
System.out.println(uuid)
UUID의 장점
기본키로 UUID를 사용할 경우 얻는 장점
- UUID는 데이터에 대한 정보를 노출하지 않기 때문에 보안상 안전하다.
- 데이터베이스가 여러 개인 경우, 하나의 ID가 여러 데이터베이스에서도 고유한 값이라고 볼 수 있다.
UUID의 단점
기본키로 UUID를 사용할 경우 얻는 단점
- UUID는 기존의 increment pk 보다 더 많은 저장 장소를 필요로 한다.
- 테이블과 인덱스의 크기가 커지므로, DB의 디스크와 메모리를 많이 사용하게 된다.
언제 사용?
애플리케이션 내부용 키로는 자동증가 pk, 외부에 공개할 키로는 uuid를 사용하는 것을 권장한다.
- 자동증가 pk를 사용하게 되면 성능과 저장 장소 측면에서 이점이 있다.
- 식별값이 외부로 노출될 수 있는 서비스라면 UUID로 식별하는 것이 좋다.
'Java' 카테고리의 다른 글
[Kotlin] 리스트 정렬(sort, sortBy, sortWith) 😙 (0) | 2024.01.27 |
---|---|
[Java] JVM 이란 ? 🤠 (0) | 2024.01.07 |
[OOP] 객체지향 프로그래밍의 설계원칙 SOLID 에 대해 알아보자 !! 🤚 (2) | 2023.12.04 |
[Kotlin] ?(물음표)와 !!(느낌표 두개)의 사용 👃🏾 (0) | 2023.09.17 |
[Kotlin] Kotlin에서 null처리는 어떻게 하나요? 🐶 (3) | 2023.08.05 |