CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /Java์˜ UUID ๊ฐ€์ด๋“œ
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

Java์˜ UUID ๊ฐ€์ด๋“œ

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
UUID๋Š” Universally Unique Identifier์˜ ์•ฝ์ž๋กœ, ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ์ •๋ณด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” 128๋น„ํŠธ ๊ธธ์ด์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. UUID ์ƒ์„ฑ๊ธฐ์— ์˜ํ•ด ์ƒ์„ฑ๋œ UUID๋Š” ๋ชจ๋“  ์‹œ์Šคํ…œ์—์„œ ํ•ญ์ƒ ๊ณ ์œ ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. UUID์˜ ๊ธธ์ด๋Š” ํ•˜์ดํ”ˆ์„ ํฌํ•จํ•˜์—ฌ 36์ž์ด๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ 16์ง„์ˆ˜ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Java์—์„œ UUID๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Java์˜ UUID ํด๋ž˜์Šค๋Š” java.util ํŒจํ‚ค์ง€ ์˜ ์ผ๋ถ€ ์ด๋ฉฐ UUID๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Java์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. Java์˜ UUID ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž„์˜์˜ UUID๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด, ๋ฌธ์ž์—ด ๋ฐ ๊ธด ๊ฐ’๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ UUID๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๊ธฐ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋œ ๋‹ค์–‘ํ•œ UUID๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ UUID๋Š” ๊ณ ์œ ํ•˜๋ฉฐ ์ „์—ญ์ ์œผ๋กœ ๊ณ ์œ ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋™์ผํ•œ UUID๊ฐ€ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ ๋‘ ๋ฒˆ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ธ์…˜ ID, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ‚ค, ๊ณ ์œ ์„ฑ์ด ์ค‘์š”ํ•œ ๊ธฐํƒ€ ์‹œ๋‚˜๋ฆฌ์˜ค ๋“ฑ ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ ์ƒ์„ฑ๋œ UUID๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Java์—์„œ UUID ์ƒ์„ฑ

Java์—์„œ UUID๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด java.util.UUID ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค . java.util.UUID ํด๋ž˜์Šค๋Š” UUID ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ( randomUUID() ๋ฐ nameUUIDFromBytes(byte[] name) ) ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค . RandomUUID () ๋ฉ”์„œ๋“œ๋Š” ์ž„์˜์˜ UUID๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ์—๋Š” ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ž„์˜์˜ UUID๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ randomUUID() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค .
import java.util.UUID;

public class UUIDExample {
    public static void main(String[] args) {
        // generating a random UUID
        UUID uuid = UUID.randomUUID();

        // print the UUID
        System.out.println("Generated UUID: " + uuid);
    }
}

์‚ฐ์ถœ

์ƒ์„ฑ๋œ UUID: d3ee2929-212b-4077-af84-694a0e69b8e1
nameUUIDFromBytes (byte[] name) ๋ฉ”์†Œ๋“œ๋Š” ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์—์„œ UUID๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์„ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ UUID๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ nameUUIDFromBytes(byte[] name) ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค .
import java.util.UUID;

public class UUIDExample {
    public static void main(String[] args) {
        // generating a UUID from a byte array
        byte[] name = { 1, 2, 3, 4, 5 };
        UUID uuid = UUID.nameUUIDFromBytes(name);

        // print the UUID
        System.out.println("Generated UUID: " + uuid);
    }
}

์‚ฐ์ถœ

์ƒ์„ฑ๋œ UUID: 4d6579d4-c3e7-38a1-9246-017e903b2c33

UUID ์†์„ฑ

UUID์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธธ์ด: UUID์˜ ๊ธธ์ด๋Š” 128๋น„ํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” 16๋ฐ”์ดํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ด ๊ธธ์ด๋Š” ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ ์œ ์„ฑ: ๋‘ UUID๊ฐ€ ๋™์ผํ•  ํ™•๋ฅ ์€ ๋งค์šฐ ๋‚ฎ์Šต๋‹ˆ๋‹ค. ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์€ 2^128๋ถ„์˜ 1 ์ •๋„๋กœ ๊ทนํžˆ ์ž‘์€ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.
  • ๋ฌด์ž‘์œ„์„ฑ: UUID๋Š” ๋ฌด์ž‘์œ„์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌด์ž‘์œ„์„ฑ์€ ์ƒ์„ฑ๋  UUID๋ฅผ ๋ˆ„๊ตฌ๋„ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๋ฒ„์ „: UUID๋Š” ์—ฌ๋Ÿฌ ๋ฒ„์ „์œผ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ ๊ฐ ๋ฒ„์ „์€ ์„œ๋กœ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ UUID๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฒ„์ „์€ ๋ฒ„์ „ 1๊ณผ ๋ฒ„์ „ 4์ž…๋‹ˆ๋‹ค. ๋ฒ„์ „ 1 UUID๋Š” ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ UUID๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ปดํ“จํ„ฐ์˜ MAC ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „ 4 UUID๋Š” ๋‚œ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

UUID์˜ ๊ธธ์ด

UUID๋Š” 36์ž์˜ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„๋˜๋Š” 128๋น„ํŠธ ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์—๋Š” ํ•˜์ดํ”ˆ์œผ๋กœ ๊ตฌ๋ถ„๋œ 8, 4, 4, 4 ๋ฐ 12์ž๋ฆฌ ๊ทธ๋ฃน์œผ๋กœ ๊ตฌ๋ถ„๋œ 32๊ฐœ์˜ 16์ง„์ˆ˜ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ UUID ๋ฌธ์ž์—ด์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.
123e4567-e89b-12d3-a456-426655440000
UUID ์˜ˆ: ๋‹ค์Œ์€ randomUUID() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ UUID ์˜ˆ์ž…๋‹ˆ๋‹ค .
d3ee2929-212b-4077-af84-694a0e69b8e1
์ด UUID๋Š” ํ•˜์ดํ”ˆ์œผ๋กœ ๊ตฌ๋ถ„๋œ 8, 4, 4, 4, 12์ž๋ฆฌ ๊ทธ๋ฃน์œผ๋กœ ๊ตฌ๋ถ„๋œ 32๊ฐœ์˜ 16์ง„์ˆ˜ ์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์œ„์˜ UUID ์˜ˆ์‹œ์—์„œ Java์˜ UUID ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ UUID๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์šฉ์–ด๋Š” java.util.UUID ํด๋ž˜์Šค ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด UUID๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค . ์ด ํ”„๋กœ์„ธ์Šค์—๋Š” randomUUID() ๋˜๋Š” nameUUIDFromBytes(byte[]) ์™€ ๊ฐ™์€ UUID ํด๋ž˜์Šค์˜ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค . ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Java์˜ UUID ํด๋ž˜์Šค๊ฐ€ ์ƒˆ UUID๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ UUID๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” UUID๊ฐ€ ๋ฌด์—‡์ธ์ง€, Java์—์„œ java.util.UUID ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UUID๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค . ๋˜ํ•œ ๊ธธ์ด, ๊ณ ์œ ์„ฑ, ๋ฌด์ž‘์œ„์„ฑ ๋ฐ ๋ฒ„์ „์„ ํฌํ•จํ•˜์—ฌ UUID์˜ ์†์„ฑ์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. UUID๋Š” ๊ณ ์œ ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ •๋ณด๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ ๋˜๋Š” ๋…ธ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ์กฐ์ž‘ํ•ด์•ผ ํ•˜๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Java์˜ java.util.UUID ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Java ํ”„๋กœ์ ํŠธ์—์„œ UUID๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION