JPA UUID varchar๋ก ์ ์ฅํ๊ธฐ
๊ฐ์
ํ๋ก์ ํธ์์ 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;
๊ทธ ๊ฒฐ๊ณผ๋!! ํ์๊ฐ ์ํ๋๋๋ก ์ฌ๋์ด ์์๋ณด๊ธฐ ํธํ๊ฒ ๋ณ๊ฒฝ๋์๋ค !