๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ์ ์์ฑํ ๋ PK ์ค์ ์ ๋ํด Auto Increment๋ฅผ ์ฌ์ฉํ ์ง , uuid๋ฅผ ์ฌ์ฉํ ์ง ๊ณ ๋ฏผ์ด ๋๋ค.
๋ ์ฐจ์ด์ ์ ๋ช
ํํ ํ์
ํ์ฌ PK๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ์.
AUTO INCREMENT
- auto increment๋ ํค๋ฅผ ์์ธกํ๊ธฐ ์ฌ์ ๋ณด์์ ์ทจ์ฝํ๋ค.
- intํ์
- ๋ถ์ฐ ์์คํ ์ ์ ํฉํ์ง ์๋ค. ( ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ ์ํฉ์์ insert๋ฅผ ํ๋ค๊ณ ์๊ฐํ์. ๋ณ๋ค๋ฅธ ๋๊ธฐํ๊ฐ ๋์ด์์ง ์๋ค๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค A ๊ฐ insert๋ฅผ ๋ฐ์ผ๋ฉด 1,2,3,4,5,6์ผ๋ก ํค๊ฐ ์ฆ๊ฐํ ๊ฑฐ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค B ๋ํ insert ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ผ๋ฉด 1,2,3,4,5,6์ผ๋ก ํค๊ฐ ์ฆ๊ฐํ ๊ฒ์ด๋ค. ์ฆ Duplicate Key๊ฐ ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒ์ด๋ค. )
- uuid๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ฐจ์งํ๊ณ , insert ์๊ฐ์ด ์ ์ด ๋น ๋ฅด๋ค.
- ์๊ท๋ชจ ํ๋ก์ ํธ์์ ์ฐ์
UUID
- 128๋นํธ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก, 5๊ฐ์ 16์ง์๋ก ๊ตฌ์ฑ๋ UTF-8 ๋ฌธ์์ด์ด๋ค.
- ๋ณด์์ ์ข๋ค.
- UUID๋ฅผ ์ด๋์๋ ์ง ๋ง๋ค๊ณ ๊ณ ์ ์ฑ์ ๋ณด์ฅํ ์ ์์ด ๋ถ์ฐ ์์คํ ์ ์ฉ์ดํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋ง์ด ์ฐจ์งํจ
- insertํ ๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฐ๋ค.
- ์ฑ๋ฅ์ ์ ํ๋ฅผ ์ผ์ผํจ๋ค (ํด๋ฌ์คํฐ ์ธ๋ฑ์ค์ ์ ๋ ฌ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค)
๊ฒฐ๋ก
๋จ์ผ DB๋ฅผ ์ฐ๋ฉด AUTO_INCREMENT๋ฅผ ํค๋ก ์ฐ์. (์ฑ๋ฅ, ๋ฉ๋ชจ๋ฆฌ ์ธก๋ฉด์์ ๋ ๋ซ๋ค.)
๋ค์ค DB๋ฅผ ์ฌ์ฉํ๋ ๋ถ์ฐํ ํ๊ฒฝ์ด๋ฉด ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ํด UUID๋ฅผ ํค๋ก ์ฐ๋ ๊ฑธ ๊ณ ๋ คํด๋ณด์
< ์ถ๊ฐ ๋ณด์ถฉ ์ค๋ช >
JPA๋ฅผ ์์ฉํด auto increment๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ ์์ค์ฝ๋๊ฐ ๋์จ๋ค.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@GeneratedValue(strategy = GenerationType.IDENTITY)
์์ ์ ๋ ธํ ์ด์ ์ ์๋ฏธ๋ ๊ธฐ๋ณธํค ์์ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ํ๋ค. (= auto_increment) ๋ผ๋ ์๋ฏธ์ด๋ค.
์์์ฑ ์ปจํ ์คํธ๋ ์ํฐํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ํ๊ฒฝ์ธ๋ฐ ์์์ฑ ์ปจํ ์คํธ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ pk๊ฐ์ด ๋ฌด์กฐ๊ฑด ํ์ํ๋ค.
์๋ entityManager.persist()๊ฐ ํธ์ถ๋๋ฉด ๋ฐ๋ก DB์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ ์๋๋ผ, ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅํ ํ์ ํธ๋์ญ์ ์ ์ปค๋ฐ์ด ์ผ์ด๋๋ฉด ๊ทธ ๋ DB์ ์ ์ฅ๋๋ค.
auto_increment์ ๊ฒฝ์ฐ์๋ entityManager.persist()๊ฐ ํธ์ถ๋ ๋ ๋ฐ๋ก DB์ insert ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค.
์ดํ์ JPA ๋ด๋ถ์์ insert ์ฟผ๋ฆฌ ์คํ ํ ๋ฐ๋ก ์์ฑ๋ id๊ฐ์ ๋ฆฌํด๋ฐ์์ id๋ฅผ pk๋ก ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅํ๋ค.
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ธฐ๋ณธํค ์์์ฑ์ ๊ด๋ฆฌํ๋ค.
auto increment๋ ํค๋ฅผ ์์ธกํ๊ธฐ ์ฌ์์ SQL Injection๊ณผ ๊ฐ์ ๊ณต๊ฒฉ์ ์ทจ์ฝํ๋ค๋ ๋จ์ ์ด ์๋ค.
๋ถ์ฐํ๊ฒฝ์์๋ UUID(Universally Unique ID)๋ฅผ ์ถ์ฒํ๋ค๊ณ ํ๋ค.
128๋นํธ ๋ฐ์ดํฐ๋ก 100% uniqueํ๋ค๊ณ ๋ณด์ฅ์ ๋ชปํ๋๋ฐ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ๊ต์ฅํ ๋ฎ์ ํค๋ค.
UUID๋ ์๋ฐ 5์์๋ถํฐ ์ง์ํ๊ณ ์๊ณ java.util.UUID ํจํค์ง์์ ์ ๊ณตํ๋ค๊ณ ํ๋ค.
import java.util.UUID
...
@Id
@GeneratedValue(generator = "uuids")
@GenericGenerator(name= "uuid2", strategy = "uuid")
private UUID id;
์์ ๊ฐ์ด ์ธ ๊ฒฝ์ฐ BINARY(16) ํน์ VARCHAR ํ์ ์ ๊ฐ์ง๊ฒ ๋๋ค.
๊ธฐ์กด intํ์ ์ผ๋ก auto incrementํ๋ ๊ฒ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๋ ๋ง์ด ์ฐ๊ณ uuid ์์ฑ๋๋ฌธ์ insertํ ๋ ์๊ฐ์ด ๋ ๋ง์ด ๊ฑธ๋ฆฐ๋ค.
'MySQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [MySQL] COUNT(*) vs EXISTS ์ฑ๋ฅ ๊ฐ์ ์ฐจ์ด (0) | 2025.03.08 |
|---|---|
| 51ํ SQLD 4์ผ ๋ฒผ๋ฝ์น๊ธฐ ํฉ๊ฒฉ ํ๊ธฐ (2) | 2024.06.03 |
| [MySQL] DECIMAL, FLOAT, DOUBLE, BIT ์์์ ํํ (0) | 2024.02.10 |
| [MySQL] tinyint, smallint, int, bigint ๋น๊ต (2) | 2024.02.10 |
| [MySQL] DATE, DATETIME, TIMESTAMP, TIME ์ฐจ์ด (0) | 2024.02.10 |