2024. 3. 17. 21:49ใDatabase
๊ฐ์ฅ ์์ฝ๊ฒ ํ ์ด๋ธ์์ ์ฌ์ฉํ PK๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ํ ์ด๋ธ์ ์์ฑํ ๋ PK๊ฐ ๋ ์์น ์นผ๋ผ์ AUTO_INCREMENT(MySql ๊ธฐ์ค)๋ฅผ ๊ฑธ์ด์ฃผ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ํตํ๋ฉด, ๊ฐ๋ฐ์๋ ๋ ์ฝ๋๋ฅผ ์์ฑํ ๋ PK ์นผ๋ผ์ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์์ผ๋ฉฐ DB๊ฐ ์์์ ์์ฐจ์ ์ผ๋ก ์ฆ๊ฐ์ํจ ๊ฐ์ด ๋ ์ฝ๋์ ํฌํจ๋๊ฒ ๋๋ค.
์ธ๋ฑ์ค๋ ๊ฒฐ๊ตญ DB์์ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฐ๋ ์ด๊ณ , ๊ทธ ๊ฐ์ DB๊ฐ ์ง์ ์์ฑํด์ฃผ์ด ๊ฐ๋ฐ์๊ฐ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๋ค๋ฉด ๊ทธ๊ฑธ๋ก ๋ ๊ฒ ์๋๊ฐ? ๋ผ๊ณ ์๊ฐํ ์ ์์ผ๋ ์ด๋ฌํ ๋ฐฉ์์๋ ๊ฒฐ๊ตญ ํน์ ๊ด์ ์์๋ ํ๊ณ๊ฐ ์กด์ฌํ๋ค.
์ด๋ฒ ๊ธ์์๋ ์ด ํ๊ณ๋ค์ ๋ํด ์์๋ณด๊ณ ์ด๋ฅผ ๊ทน๋ณตํ ์ ์๋ ๋๋ค๋ฅธ ๋ฐฉ์๋ค์ ๋ํด ์ดํด๋ณด๊ฒ ๋ค.
DB๊ฐ ์ง์ ๊ด๋ฆฌํ๋ PK์ ๋ฌธ์ ์
1. ๋ถ์ฐ์ฒ๋ฆฌ ํ๊ฒฝ์์ PK ๊ฐ ์ฑ๋ฒ์ ์ด๋ ค์
์ต๊ทผ์๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋นํ๊ธฐ ์ํด ์๋ฒ์ DB ์ธ์คํด์ค๋ฅผ ๋์์ ์ฌ๋ฌ๊ฐ๋ฅผ ์คํ์์ผ ๋ถํ๋ฅผ ๋ถ๋ฐฐํ๋ ๋ถ์ฐ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋๋๋๊ณ ์๋ค. ์ด๋ฌํ ์ํฉ ์์์ AUTO_INCREMENT๋ฅผ ๊ฑธ์ด๋ ์นผ๋ผ์ ๋ค์ด๊ฐ ๊ฐ์ DB๊ฐ ์ ์์ ์ผ๋ก ์ฑ๋ฒํ ์ ์์๊น? ๋ฌผ๋ก ๊ฐ๋ฅ์ ํ๋, ๊ฒฐ๊ตญ ์ด์ ๋ํ ์ฑํฌ๋ฅผ ์ํด DB ๊ฐ ์ง์์ ์ธ ๋คํธ์ํฌ ํต์ ์ด ์๊ตฌ๋๊ธฐ ๋๋ฌธ์ ๊ฝค ํฐ ์ฑ๋ฅ ์ ํ ์์ธ์ด ๋ ์ ์๋ค.
2. AUTO_INCREMENT๋ฅผ ์ํ ์ถ๊ฐ์ ์ธ ํ ์ด๋ธ ๋ฝ ์์
Mysql ๋ด๋ถ์์ AUTO_INCREMENT๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ ๋ฝ์ ๋ชจ๋ ์ค์ ๊ฐ์ผ๋ก ์ค ์ ์๋ ์ข ๋ฅ๋ 0, 1, 2 ์ด 3๊ฐ์ง์ด๋ค. (0: traditional, 1: consecutive, 2: interleave) ์ด ๋ 0์ ๊ฒฝ์ฐ์ ๋งค๋ฒ ํ ์ด๋ธ ๋ฝ์, 1์ ๊ฒฝ์ฐ์ ๊ฐ๋จํ INSERT๋ ๋ฎคํ ์ค๋ฅผ ํตํ ๊ฒฝ๋๋ฝ์ ์ฌ์ฉํ๊ณ Bulk INSERT์ ๊ฐ์ ๊ฒฝ์ฐ์ ํ ์ด๋ธ ๋ฝ์ ์ฌ์ฉํ๊ฒ ๋๋ค. ๋ฌผ๋ก Mysql 8๋ฒ์ ๋ถํฐ๋ ๊ธฐ๋ณธ ์ค์ ์ด interleave๊ฐ ๋์ด ํ ์ด๋ธ ๋ฝ์ ํ์ฉํ์ง ์์ง๋ง, ๋ค๋ฅธ ์๊ตฌ์ฌํญ ๋๋ฌธ์ 0, 1 ๋ชจ๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ์ด๋ ์ฑ๋ฅ ์ ํ ์์ธ์ด ๋ ์ ์๋ค.
3. (JPA ์ฌ์ฉ ์) ์ฐ๊ธฐ ์ง์ฐ ํ์ฉ๋ ์ ํ
JPA์๋ ์ฐ๊ธฐ ์ง์ฐ์ด๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ๋ค. ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ์ ์ํธ์์ฉ์ผ๋ก ๋ฐ์ํ๋ ๋ ์ฝ๋์ ์ถ๊ฐ, ์์ ๋ฑ์ ์์ ๊ฒฐ๊ณผ๋ฅผ ์์์ฑ ์ปจํ ์คํธ๋ผ๊ณ ํ๋ ์ผ์ข ์ ์บ์์ ์ ์ฅํด๋๊ณ ํธ๋์ญ์ ์ด ๋๋ ๋ ํ๋ฒ ์ ์ฉํ๋ ํํ์ธ๋ฐ, ์ด๋ฅผ ์ ํ์ฉํ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ DB์ ํต์ ํ์์ ์ฟผ๋ฆฌ ํ์๋ฅผ ์ค์ผ ์ ์์ด ์ฑ๋ฅ ํฅ์์ ๋์์ด ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ฌํ ์ฐ๊ธฐ ์ง์ฐ์ Mysql์ AUTO_INCREMENT ๋ฐฉ์๊ณผ๋ ๊ถํฉ์ด ์ข์ง ๋ชปํ๋ค. JPA์์ ์์์ฑ ์ปจํ ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ์ ์ฌํด๋๊ธฐ ์ํด์๋ ๋ฐ๋์ ํด๋น ๋ฐ์ดํฐ์ ID(PK) ๊ฐ์ด ํ์ํ๋ค. (๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํ ํค๋ก ์ฌ์ฉํ๊ธฐ ์ํจ) ๊ทธ๋ฐ๋ฐ AUTO_INCREMENT๋ ๊ฒฐ๊ตญ DB์์ ๊ด๋ฆฌํ๋ ๊ฐ์ด๊ณ ์ด๋ฅผ ์์๋ด๊ธฐ ์ํด์๋ ๊ฒฐ๊ตญ DB ๋ ๋ฒจ์์ INSERT ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์คํ์์ผ์ผ ํ๋ค. ์ฆ, ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฌํ๊ธฐ ์ํด์๋ ์ฐ๊ธฐ๋ฅผ ์ง์ฐํ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ์ฆ์ DB์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค์ ID ๊ฐ์ ๋ฐ์์์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ Mysql์ด ์ฌ์ฉํ๋ AUTO_INCREMENT ๋ฐฉ์ ๋ฟ ์๋๋ผ, ์ค๋ผํด ๋ฑ์์ ํ์ฉ๋๋ SEQUENCE ๋ฐฉ์์์๋ ๋ํ๋๋ค. ๋ฌผ๋ก ID ๊ฐ์ ์๊ธฐ ์ํด ์ง์ INSERT ์ฟผ๋ฆฌ๊น์ง ์คํ์์ผ์ผํด์ ์ฐ๊ธฐ ์ง์ฐ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ Mysql์ ์ํฉ๋ณด๋ค๋ ๋์ผ๋, ๊ทธ ๋ํ DB์์ ์ฆ๊ฐ์ ์ธ ํต์ ์ด ํ์ํ ๊ฒ์ ๋์ผํ๋ค. (์ฐ๊ธฐ ์ง์ฐ์ ํ์ฉ ๊ฐ๋ฅ)
4. ๋ณด์์์ ๋ฌธ์
๊ทธ ์ธ์๋ ์ฌ์ฉ์์๊ฒ pk ๊ฐ์ด id ๋ฑ์ ํ์์ผ๋ก ์ ๋ฌ๋์์ ๋ ์๋น์ค์ ๊ท๋ชจ ๋ฑ์ ์ ์ถํ ์ ์๋ค๋ ๋ณด์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ณ ๋ ค ํด๋ณผ๋งํ ๋์
1. UUID
UUID๋ ๋ฒ์ฉ ๊ณ ์ ์๋ณ์๋ผ๋ ์๋ฏธ๋ก Universally Unique Identifier์ ์ฝ์์ด๋ค.
ํต์ 128๋นํธ์ ํฌ๊ธฐ๋ฅผ ์ฐจ์งํ๋ฉฐ, ๋ค์ํ ๋ฒ์ ์ด ์์ง๋ง ์์ํ๊ฒ ๋๋ค์ฑ ๋ง์ ๊ฐ๋ V4๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค.
UUID์ ๊ฐ์ฅ ํฐ ํน์ง์ ์ด๋ค ์ธ์, ์์กด์ฑ ์์ด๋ ์ธ์ ๋ ์ง ๊ณ ์ ํ ์๋ณ์๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
V4 ๊ธฐ์ค์ผ๋ก ์์ฑ๋ UUID์ ๊ฒฝ์ฐ์ ์๋ 2^122(340,282,366,920,938,463,463,374,607,431,768,211,456)์ธ๋ฐ, ๋๋ฌด ํฐ ์์ด๋ฏ๋ก ์ดํด๋ฅผ ์ฝ๊ฒ ํ๊ธฐ ์ํด ๋งค ์ด 10์ต๊ฐ์ UUID๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํ์. ์ด ๊ฒฝ์ฐ, 100๋ ๋์ ํด๋น ์์ ์ ์ํํด์ผ ๊ฒจ์ฐ 50% ํ๋ฅ ๋ก ๋จ ํ๋์ ์ค๋ณต ๊ฐ์ด ์์ฑ๋๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ค๋ณต์ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ๋ฐฐ์ ํ ์ ์๊ฒ ๋๋ค.
์ฅ์
- DB์ ์์กดํ์ง ์์์ฑ ์ฌ์ค์ ์ค๋ณต ๊ฐ๋ฅ์ฑ์ด ์๋ ์ ์ผ ์๋ณ์๋ฅผ ์์ฑํ ์ ์๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์ ID(PK) ๊ฐ์ ํ์ ์ง์ ์ ์๊ธฐ ๋๋ฌธ์ JPA์ ์ฐ๊ธฐ ์ง์ฐ์ ํ์ฉํ ์ ์๋ค.
- ์ ์ ์๊ฒ ๋ ธ์ถ๋์ด๋ ์๊ด์๋ค.
- ๋๋ฆฌ ์๋ ค์ง ๊ฐ๋ ์ด๊ณ , ๊ทธ์ ๋ฐ๋ฅธ ๊ตฌํ์ฒด๋ค๋ ๋ง๋ค. (Java์ ๊ฒฝ์ฐ์ UUID ํ์ ๊ณผ ์์ฑ์ ์ํ ๋ฉ์๋๊ฐ ๋นํธ์ธ util ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์กด์ฌ)
๋จ์
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ซ์ ์นผ๋ผ์ ๋นํด ํฌ๊ธฐ๊ฐ ํฌ๋ค. (Integer: 4๋ฐ์ดํธ < 16๋ฐ์ดํธ (128๋นํธ))
- ์ด๋ ํนํ Mysql ํ๊ฒฝ์์ PK๋ก ์ฌ์ฉ๋๋ ์นผ๋ผ์ด๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๋ค. ์๋ํ๋ฉด Mysql์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ค์ ๋ชจ๋ ๋ฆฌํ ๋ ธ๋์ PK๊ฐ์ ์ ์ฅํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ค๋ณต ์ ์ฅ์ด ๋ง์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ
- ์์ ํ ๋๋ค ๊ฐ์ด ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ ์ฌ์ฑ์ ๋ํ๋ผ ์ ์๋ค.
- ์ด๋ ํนํ PK๋ฅผ ์ด์ฉํ์ฌ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ Mysql์์ ์ฑ๋ฅ ์ฒด๊ฐ์ด ๋ ์ ์๋ค. ๊ทธ ์ด์ ๋ ์ ์ฌํ ์ฑ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฌํ ๋ฌผ๋ฆฌ์ ๊ณต๊ฐ์ ์ ์ฅํ ์ ์์ด ์ด๋ฌํ ์ฑ์ง์ ์ด์ฉํ ์กฐํ ์ ์ ์ ํ์ด์ง๋ง์ ์ฝ์ ์ ์๋ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ์ด์ ์ด ํ๋ ์ฌ๋ผ์ง๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ(์ค์ง์ ์ธ ํด๋ฌ์คํฐ๋ง ํฉํฐ์ ์ ํ๋ก ๋ณผ ์ ์์)
- ์ด๋ ๋ํ INSERT ์ฟผ๋ฆฌ์ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์๋ค.
2. ULID
ULID๋ ๊ธฐ์กด UUID๊ฐ ๊ฐ๊ณ ์๋ ๋ฌธ์ ๋ค์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฐ๋ ์ด๋ค. UUID์ ๋์ผํ 128๋นํธ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ฉฐ, ์์ 48๋นํธ๋ ํ์์คํฌํ(๋ฐ๋ฆฌ์ด ๋จ์๊น์ง)๋ฅผ ์๋ฏธํ๊ณ ๋๋จธ์ง 80๋นํธ๋ ๋๋ค๊ฐ์ด ํฌํจ๋๋ค.
๋ํ์ ์ธ ULID์ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
- 128๋นํธ๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด UUID์์ ํธํ์ฑ ์กด์ฌ
- ๊ฐ ms๋น 2^80์ ๊ณ ์ ์๋ณ์ ์์ฑ ๊ฐ๋ฅ
- ULID์ ํฌํจ๋๋ ํ์์คํฌํ๋ฅผ ์์ฑ์๊ฐ์ผ๋ก ์ทจ๊ธํ ๊ฒฝ์ฐ UUID V4์ ๋ฌ๋ฆฌ ์ ๋ ฌ ๊ฐ๋ฅ
ULID์ ์คํ ์ค์์๋ Monotonicity(๋จ์กฐ์ฑ)์ด๋ผ๋ ์คํ์ด ์กด์ฌํ๋๋ฐ, ์ด๋ ๋์ผํ ms์์ ์ค๋ณต์ผ๋ก ULID ์์ฑ ์์ฒญ์ด ๋ค์ด์ค๋ ๊ฒฝ์ฐ ๋ค์ 80๋นํธ๋ฅผ ๋๋คํ๊ฒ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ์ง์ ์์ฑํ ULID์ 80๋นํธ์์ ๋ฑ 1์ ์ฆ๊ฐ์ํจ๋งํผ์ ๊ฐ์ ๊ฐ๋๋ก ํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ฅผ ํ์ฉํ ๊ฒฝ์ฐ ํ์ 80๋นํธ๋ฅผ ์์ ๋๋คํ๊ฒ ์์ฑํ๋ ๊ฒฝ์ฐ์ ๋น๊ตํด์ ๋ ์ค๋ณต ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ค๊ณ , ์์ฑ ์ฑ๋ฅ ์์ ์ด์ ๋ ์๋ค๊ณ ํ๋ค. ๋ํ ULID ์์ฑ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ํ ์ ๋ ฌ์ด ๊ฐ๋ฅํด์ง๋ค.
์ฅ์
- UUID์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค๋ณต์ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ํฌ๋ฐํ ์๋ณ์๋ฅผ DB์ ์์กดํ์ง ์์ ์ฑ ํ๋ํ ์ ์๋ค.
- JPA ์ฐ๊ธฐ ์ง์ฐ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์ ์ ์๊ฒ ๋ ธ์ถ๋์ด๋ ๊ด์ฐฎ๋ค.
- UUID ๋งํผ์ ์๋์ง๋ง ULID๋ ๊ตฌํ์ฒด๊ฐ ๋ง์ ํธ์ด๋ค.
- (Monotonicity ์คํ์ ์ฐจ์ฉํ ๊ฒฝ์ฐ) ์์ฑ๋๋ ๋ชจ๋ ULID๋ฅผ ์์ฑ ์์ ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ด ๊ฐ๋ฅํด์ง๋ค.
๋จ์
- UUID์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๊ธฐ ์ํด ํฐ ํ์ ์ ํ ๋นํด์ผํ๊ณ ๊ทธ๋ก ์ธํ ์ฑ๋ฅ ์ ํ๊ฐ ๋ํ๋ ์ ์๋ค.
3. TSID
TSID๋ 64๋นํธ์ ๊ธธ์ด๋ฅผ ๊ฐ์ง๋ ํํ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ์ ์ 42๋นํธ๋ ์๊ฐ์ ๋ํ๋ด๊ณ , ํ์ 22๋นํธ๋ ๋๋ค ๊ฐ์ ๋ํ๋ธ๋ค.
TSID๊ฐ ๊ฐ๋ ํน์ง์ ์๋์ ๊ฐ๋ค.
- 64๋นํธ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง
- ์์ฑ ์์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ ๊ฐ๋ฅ
์ ํน์ง๋ค์ ๋ณด๋ฉด ULID์ ํน์ง๊ณผ ๊ต์ฅํ ์ ์ฌํ๋ค. ๊ทธ๋ฌ๋ฉด์๋ ํฌ๊ธฐ๋ ๊ทธ ์ ๋ฐ์ ๊ฐ๋๋ค. ์ด๊ฒ ์ด๋ป๊ฒ ๊ฐ๋ฅํ ๊ฒ์ผ๊น?
์ฐ์ ์๊ฐ ๋นํธ๋ฅผ ๋ณด๋ฉด 42๋นํธ๋ฅผ ๊ฐ๋๋ค. ์ฌ๊ธฐ์์ ๊ธฐ์กด ULID์ ๋น๊ตํ์ฌ 6๋นํธ๋ฅผ ์๋ ๊ฒ์ ์ ์ ์๋ค. ์๊ฐ ๋นํธ๋ฅผ ์ค์๋ค๋ ๊ฒ์ ์๋ฏธ๋ ๊ฒฐ๊ตญ TSID๊ฐ ์ปค๋ฒํ๋ ์์ ์ด ULID์ ๋นํด ์ ๋ค๋ ๊ฒ์ด๋ค.
์ด๋ก ์ธํด, TSID์ ์๊ฐ ๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ Unix-time ๋จ์์ 1970-01-01T00:00๋ฅผ ์์์ ์ผ๋ก ์ฌ์ฉํ์ง ์๊ณ , 2020-01-01T00:00์ ์์์ ์ผ๋ก ํ๋ ms ๊ฐ์ด ๋๋ค. ๋ํ 42๋นํธ๋ก ๋ํ๋ผ ์ ์๋ ๊ธฐ๊ฐ์ ๋๋ต 139๋ ์ ๋์ด๋ค. (Unsigned Integer๋ฅผ ํ์ฉํ๋ค๋ ๊ฐ์ ํ์. Signed Integer๋ผ๋ฉด ์ ๋ฐ ์์ค์ผ๋ก ์ค์ด๋ฆ) ์ดํ์ ์๊ฒ๋ ๋ด์ฉ์ด์ง๋ง, ์๊ฐ ์ค์ผ์ผ์ 42๋นํธ๋ก ์ค์ฌ์ ๋ค๋ฃจ๋ ๊ฒ์ Twitter์ Snowflakes์์ ํ์ฉํ๋ ๋ฐฉ์์ด๋ผ๊ณ ํ๋ค.
์ฐ๋ฆฌ๋ ์๋น์ค์ PK๋ก ์ฌ์ฉํ๊ธฐ ์ํด ์ด๋ฅผ ๊ณ ๋ คํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ธ์ ์ผ๋ก๋ ์ด์ ๋ ๊ธฐ๊ฐ์ด๋ผ๋ฉด ์ถฉ๋ถํ๋ค๊ณ ์๊ฐ๋๋ค.
๋๋จธ์ง 22๋นํธ๋ ๋๋ค์ node์ counter ํํธ๋ก ๋๋๋๋ฐ, ์ด ๋ node๋ 0 ~ 20 ๋นํธ๊น์ง ์กฐ์ ๊ฐ๋ฅํ ๊ฐ์ด๋ค. ์ฌ๊ธฐ์ node๋, ๊ธฐ๊ธฐ๋ ์ธ์คํด์ค์ ID ๊ฐ์ ๋ํ๋ด์ด ์ด๋ฅผ ํตํ ๊ทผ๋ณธ์ ์ค๋ณต ๋ฐฉ์ง๋ฅผ ์ํด ์กด์ฌํ๋ค๊ณ ํ๋ค. ๋ง์ฝ 2๊ฐ์ ์ธ์คํด์ค์์ ์์ฑ๋๋ Tsid ๊ฐ์ด ์ค๋ณต์์ ์์ ํ ์์ ๋ก์์ผ ํ๋ค๋ฉด, ์ด ๊ฐ์ 2๋ก ์ค ์ ์๋ ๊ฒ์ด๋ค.
node๋ก ์ฌ์ฉ๋ ๋นํธ๋ฅผ ์ ์ธํ๊ณ ๋๋ฉด ๋จ์ ๋นํธ๋ค์ ์ ๋ถ counter๋ก ์ทจ๊ธ๋๋ฉฐ ๋๋ค ๊ฐ์ ์์ฑํ๋๋ฐ ์ด์ฉ๋๋ค. ์ด ๋ ๋์ผ ms์ ์์ฑ๋๋ ๊ฐ๋ค์ ๋ํด์๋ ULID์ Monotonicity ์คํ๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ค.
์ฅ์
- UUID ์ ๋๋ ์๋์ง๋ง ์ค๋ณต์ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ฐํ ์๋ณ์๋ฅผ DB์ ์์กดํ์ง ์์ ์ฑ ํ๋ํ ์ ์๋ค.
- UUID ์คํ์ ๋นํด ํฌ๊ธฐ๊ฐ ์ ๋ฐ ์์ค์ด๋ค.
- JPA ์ฐ๊ธฐ ์ง์ฐ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์ ์ ์๊ฒ ๋ ธ์ถ๋์ด๋ ๊ด์ฐฎ๋ค.
- TSID๋ฅผ ๊ตฌํํ๋ Java ๊ตฌํ์ฒด๊ฐ ์กด์ฌํ๋ค.
- ์์ฑ๋๋ ๋ชจ๋ TSID๋ฅผ ์์ฑ ์์ ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ด ๊ฐ๋ฅํด์ง๋ค.
๋จ์
- (๊ฐ์ธ์ ์ผ๋ก๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐ๋๋) ๋ํ๋ผ ์ ์๋ ์์ ์ ๊ธฐ๊ฐ์ด ์๋์ ์ผ๋ก ์งง๋ค.
- UUID, ULID์ ๋น๊ตํ์ ๋ ์ค๋ณต ๊ฐ๋ฅ์ฑ์ด ์๋์ ์ผ๋ก ๋๋ค.
์ฐธ์กฐ
'Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ ์ฝ๋ ๋๋ค ์กฐํ๋ฅผ ํตํ ๋๊ด์ ๋ฝ ์ฑ๋ฅ ๊ฐ์ ๊ธฐ (with ์ฌ์ด๋ ํ๋ก์ ํธ) (1) | 2024.05.02 |
---|---|
ํ์ด์ง๋ค์ด์ ๋ฐฉ๋ฒ๋ก ๋น๊ต(Offset vs Cursor) (0) | 2024.02.17 |
JOIN์ ์ ๋ง ๋๋ฆฐ๊ฐ (์ญ์ ๊ทํ) (0) | 2024.01.07 |
Slow Query ํ์ธ๋ฒ (in Mysql, Postgresql) (0) | 2023.12.13 |