Spring

JPA UUID varchar๋กœ ์ €์žฅํ•˜๊ธฐ

mokhs 2021. 11. 29. 18:29

๊ฐœ์š”

ํ”„๋กœ์ ํŠธ์—์„œ JPAํ™˜๊ฒฝ์—์„œ UUID๋ฅผ PK๋กœ ๋„์ž…ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ถˆํŽธํ–ˆ๋˜ ์ ๋“ค๊ณผ ๊ฐœ์„ ํ•œ ๊ฒฝํ—˜๋“ค์„ ๊ธฐ๋กํ•œ๋‹ค.

UUID๋ž€? + ๋„์ž… ๊ณ ๋ฏผ

UUID(๋ฒ”์šฉ ๊ณ ์œ  ์‹๋ณ„์ž(universally unique identifier))๋Š” 128๋น„ํŠธ์˜ ์ˆ˜์ด๋‹ค. ํ‘œ์ค€ ํ˜•์‹์—์„œ UUID๋Š” 32๊ฐœ์˜ 16์ง„์ˆ˜๋กœ ํ‘œํ˜„๋˜๋ฉฐ ์ด 36๊ฐœ ๋ฌธ์ž(32๊ฐœ ๋ฌธ์ž์™€ 4๊ฐœ์˜ ํ•˜์ดํ”ˆ)๋กœ ๋œ 8-4-4-4-12๋ผ๋Š” 5๊ฐœ์˜ ๊ทธ๋ฃน์„ ํ•˜์ดํ”ˆ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

550e8400-e29b-41d4-a716-446655440000

์œ„์—์„œ UUID์— ๋Œ€ํ•ด ์‚ด์ง ์•Œ์•„๋ดค๋‹ค.

ํ•„์ž๋Š” UUID๋Š” ๊ฑฐ์˜ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ธ€๋กœ๋ฒŒ ์œ ๋‹ˆํฌ ๊ฐ’์ด๋‹ค ๋ผ๋Š” ๊ฒƒ์— ์ฃผ๋ชฉํ–ˆ๊ณ , React Dom์ด ๋ณ€๊ฒฝ ๊ฐ์ง€๋ฅผ ํ•˜๋Š” ๊ธฐ์ค€์ด key๊ฐ’์ธ๋ฐ key๊ฐ’์€ ์ค‘๋ณต๋˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ๋“ฃ๊ณ  UUID๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด front์—์„œ ์‰ฝ๊ฒŒ ์ž‘์—…์„ ํ•˜์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์— ๋„์ž…์„ ์‹œ๋„ํ•ด๋ดค๋‹ค. ๋˜ํ•œ ๊ธ€๋กœ๋ฒŒ ์„œ๋น„์Šค๊นŒ์ง€ ๊ณ ๋ คํ•˜๋˜ ์ƒํ™ฉ์—์„œ (์ง€๊ทนํžˆ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์ด๊ธด ํ•˜๋‹ค)

BINARY(16)

UUID ๋„์ž…์„ ๊ณ ๋ คํ•˜๋ฉด์„œ ๊ตฌ๊ธ€๋งํ•ด๋ณด๋‹ˆ DB์˜ BINARY ํƒ€์ž…์ด padding์ด ์ƒ๊ฒจ์„œ UUID๋Š” 16byte์ด๊ธฐ์— 225byteํƒ€์ž…์œผ๋กœ column์„ ์ •์˜ํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๋Œ€๋กœ ์กฐํšŒํ•˜์ง€ ๋ชปํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ธ€๋“ค์„ ๋ณด์•˜๊ณ ,
๋‹ค์Œ๊ณผ ๊ฐ™์ด @Column(columnDefinition = "BINARY(16)") ๋ฅผ ์‚ฌ์šฉํ•ด์„œ UUID๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ–ˆ์—ˆ๋‹ค.

@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)")
private UUID id;

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์„ ์–ธํ•ด๋†“๊ณ  ๋‹น์‹œ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—ฌ์„œ DB ๋ฐ์ดํ„ฐ์™€ ๋น„๊ตํ•˜๋ฉฐ ๋””๋ฒ„๊น…์„ ํ•ด๋ณด๋ ค๊ณ  DB ํˆด์„ ์ด์šฉํ•ด DB ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ–ˆ๋”๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ๋žŒ์ด ์‰ฝ๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด ๋˜์—ˆ๋‹ค..

๋ฌผ๋ก  DB ํ•จ์ˆ˜๋“ค์„ ์ด์šฉํ•ด์„œ ๊น”๋”ํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ๋งค๋ฒˆ ํ•˜๊ธฐ์—๋Š” ๊ต‰์žฅํžˆ ๊ท€์ฐฎ์€ ์ผ์ด๋‹ค.
๊ทธ๋ž˜์„œ ์ด๋ฅผ varchar๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

์นผ๋Ÿผ ํƒ€์ž…์„ varchar๋กœ ์„ ์–ธํ•˜๊ธฐ (uuid-char)

๊ตฌ๊ธ€๋ง ๋์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด @Type(type="uuid-char")๋ฅผ ์ด์šฉํ•˜๋ฉด varchar๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๊ณ  ์ด๋ฅผ ์ ์šฉํ•ด๋ดค๋‹ค.

@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@Type(type = "uuid-char")
private UUID id;

๊ทธ ๊ฒฐ๊ณผ๋Š”!! ํ•„์ž๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ์‚ฌ๋žŒ์ด ์•Œ์•„๋ณด๊ธฐ ํŽธํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค !

Reference

๋ฐ˜์‘ํ˜•