
์ ์ผ์ฑ์ด ๋ณด์ฅ๋๋ ID ์์ฑ๊ธฐ ๊ตฌํ์ ์ฐ์ผ์ ์๋ ๋ค์ํ ์ ๋ต์ ์์๋ณธ๋ค.
์๊ตฌ์ฌํญ
- ID๋ ์ ์ผํด์ผํ๋ค. ์ซ์๋ก๋ง ๊ตฌ์ฑ๋์ด์ผ ํ๋ค
- 64๋นํธ๋ก ํํ๋ ์ ์๋ ๊ฐ์ด์ด์ผ ํ๋ค.
- ๋ฐ๊ธ ๋ ์ง์ ๋ฐ๋ผ์ ์ ๋ ฌ ๊ฐ๋ฅํด์ผํ๋ค.
- ์ด๋น 10,000๊ฐ์ ID๋ฅผ ๋ง๋ค ์ ์์ด์ผ ํ๋ค.
๊ฐ๋ต์ ์ค๊ณ์ ์ ์ ๋ฐ ๋์ ๊ตฌํ๊ธฐ
1. ๋ค์ค ๋ง์คํฐ ๋ณต์ (Multi-master replication)

auto_increment ๊ธฐ๋ฅ์ ํ์ฉํ๋ค. ๋ค์ ID๋ฅผ ๊ตฌํํ ๋ 1๋งํผ ์ฆ๊ฐ์ํค๋๊ฑด ์๋๊ณ , K๋งํผ์ฉ ์ฆ๊ฐ์ํจ๋ค. K๋ ํ์ฌ ์ฌ์ฉ์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์๋ค. DB์๋ฅผ ๋๋ฆฌ๋ฉด ์ด๋น ์์ฐ ๊ฐ๋ฅํ ID์๋ ๋๋ฆด ์ ์์์ผ๋ก, ๊ท๋ชจ ํ์ฅ์ฑ ๋ฌธ์ ๋ฅผ ์ด๋์ ๋ ํด์ํ๋ค.
2. UUID
์ ์ผ์ฑ์ด ๋ณด์ฅ๋๋ ใดID๋ฅผ ๋ง๋๋ ๋ํ๋์ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด๋ค. UUID๋ 128๋นํธ์ง๋ฆฌ ์๋ค.
์ค๋ณต UUID๋ฅผ 1๊ฐ ์๊ธธ ํ๋ฅ ์ 50% ๋์ด์ฌ๋ฆด๋ ค๋ฉด ์ด๋น 10์ต๊ฐ์ UUID๋ฅผ 100๋ ๋์ ๊ณ์ํด์ ๋ง๋ค์ด์ผ ํ๋ค. [1]

๊ฐ๊ฐ์ ์น์๋ฒ๋ ๋ณ๋์ ID ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํด์ ๋ ๋ฆฝ์ ์ผ๋ก ID๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
์๋ฒ์ฌ์ด ์กฐ์จ์ด ํ์์์์ผ๋ก ๋๊ธฐํ ์ด์๋ ์๋ค. ๊ฐ ์๋ฒ๊ฐ ์๊ธฐ๊ฐ ์ธ ID๋ฅผ ์์์ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๊ท๋ชจ ํ์ฅ๋ ์ฝ๋ค.
์๊ฐ์ ์ ๋ ฌ์ด์๋๋ค. ์ซ์๊ฐ ์๋ ๊ฐ์ด ํฌํจ๋๋ค. ID๊ฐ 128๋นํธ์์ผ๋ก ๊ธธ๋ค.
3. ํฐ์ผ ์๋ฒ
ํ๋ฆฌ์ปค(Flickr)๋ ๋ถ์ฐ ๊ธฐ๋ณธ ํค๋ฅผ ๋ง๋ค์ด ๋ด๊ธฐ ์ํด ์ด๊ธฐ์ ์ ์ด์ฉํ๋ค. [2]

auto_increment๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์๋ฒ, ํฐ์ผ ์๋ฒ๋ฅผ ์ค์ ์ง์คํ์ผ๋ก ํ๋๋ง ์ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ตฌํ์ด ์ฝ๊ณ , ์ค์ ๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ค.
ํฐ์ผ ์๋ฒ๊ฐ SPOF(Single-Point-of-Failure)๊ฐ ๋๋ค.
4. ํธ์ํฐ ์ค๋ ธํ๋ ์ดํฌ
ํธ์ํฐ๋ ์ค๋ ธํ๋ ์ดํฌ(snoewflake)๋ผ๊ณ ๋ถ๋ฅด๋ ๋ ์ฐฝ์ ์ธ ID ์์ฑ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค.

์์ฑํด์ผ ํ๋ ID์ ๊ตฌ์กฐ๋ฅผ ์ฌ๋ฌ ์ ๋ก ๋ถํ ํ๋ ๊ฒ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ์์ฑํ 64๋นํธ์ ID ๊ตฌ์กฐ๋ฅผ ์์ ๊ฐ์ด ๋ถํ ํ๋ค.
๊ฐ์ ์ ์ฐ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฌ์ธ(sign) ๋นํธ: 1๋นํธ ํ ๋น.
- ํ์์คํฌํ : 41๋นํธ ํ ๋น. epoch ์ดํ๋ก ๋ช ๋ฐ๋ฆฌ์ด๊ฐ ๊ฒฝ๊ณผํ๋์ง๋ฅผ ๋ํ๋ธ๋ค. 1288834974657(Nov 04,2010,01:42:54 UTC)

ID๊ตฌ์กฐ์์ ๊ฐ์ฅ ์ค์ํ 41๋นํธ๋ฅผ ์ฐจ์งํ๋ค. ์๊ฐ ํ๋ฆ์ ๋ฐ๋ผ์ ์ ์ ํฐ ๊ฐ์ ๊ฐ์์ผ๋ก, ๊ฒฐ๊ตญ ID๋ ์๊ฐ์์ผ๋ก ์ ๋ ฌ์ด ๊ฐ๋ฅํด์ง๋ค.
์ด์ง ํํ ํํ๋ก๋ถํฐ UTC ์๊ฐ์ ์ถ์ถํ๋ ์์ ์ด๋ค. ์ด๋ ํ UTC์๊ฐ๋ ์์ ํ ํ์์คํฌํ ๊ฐ์ผ๋ก ๋ณํ์ด ๊ฐ๋ฅํด์ง๋ค.
2^41-1=2199023255551๋ฐ๋ฆฌ์ด์ด๋ค. ๋๋ต 69๋ ์ ํด๋นํ๋ค. 2199023255551๋ฐ๋ฆฌ์ด/ 1000/365์ผ /24์๊ฐ/3600์ด
๋ฐ๋ผ์ 69๋ ๋์๋ง ๋์ํ๋ค. ๊ธฐ์ ์๊ฐ์ ํ์ฌ์ ๊ฐ๊น๊ฒ ๋ง์ถฐ์ overflow๊ฐ ๋ฐ์ํ๋ ์์ ์ ๋ฆ์ถฐ๋๋๋ค. 69๋ ์ด ์ง๋๋ฉด ๊ธฐ์์๊ฐ์ ๋ฐ๊พธ๊ฑฐ๋ id์ฒด๊ณ๋ฅผ ๋ค๋ฅธ๊ฑฐ๋ก ์ด์ ํด์ผํ๋ค.
- ๋ฐ์ดํฐ ์ผํฐ : 5 ๋นํธ ํ ๋น. 2^5=32 ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ง์ํ ์ ์๋ค.
- ์๋ฒ ID : 5 ๋นํธ ํ ๋น. ๋ฐ์ดํฐ ์ผํฐ๋น 32๊ฐ ์๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์ผ๋ จ๋ฒํธ :
12๋นํธ์์ผ๋ก, 2^12=4096๊ฐ์ ๊ฐ์ ๊ฐ์ง๋ค. ๊ฐ ์๋ฒ์์๋ ID๋ฅผ ์์ฑํ ๋๋ง๋ค ์ผ๋ จ๋ฒํธ๋ฅผ 1๋งํผ ์ฆ๊ฐ ์ํจ๋ค. ์ด ๊ฐ์ 1๋ฐ๋ฆฌ์ด๊ฐ ๊ฒฝ๊ณผํ ๋๋ง๋ค 0์ผ๋ก ์ด๊ธฐํ(reset)๋๋ค.
๊ฐ์ ๋ฐ๋ฆฌ์ด ๋์ ํ๋ ์ด์์ ID๋ฅผ ๋ง๋ค์ด๋ธ ๊ฒฝ์ฐ๋ง 0๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ๋๋ค.
์์ธ ์ค๊ณ
- ์๊ณ ๋๊ธฐํ(clock synchronization): ์ด๋ฒ ์ค๊ณ๋ฅผ ์งํํ๋ฉด์ ์ฐ๋ฆฌ๋ ID ์์ฑ ์๋ฒ๋ค์ด ์ ๋ถ ๊ฐ์ ์๊ณ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ์๋ค. ํ์ง๋ง ์ด๋ฐ ๊ฐ์ ์ ํ๋์ ์๋ฒ๊ฐ ์ฌ๋ฌ ์ฝ์ด์์ ์คํ๋ ๊ฒฝ์ฐ ์ ํจํ์ง ์์ ์ ์๋ค. ์ฌ๋ฌ ์๋ฒ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ ๋ฆฝ๋ ์ฌ๋ฌ ์ฅ๋น์์ ์คํ๋๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์๊ณ ๋๊ธฐํ์ ์ค์ ๋ฐฉ๋ฒ์ ์ด ์ฑ ์ด ๋ค๋ฃฐ ์ฃผ์ ๋ ์๋์ง๋ง, ๊ทธ๋ฐ ๋ฌธ์ ๊ฐ ์๋ค๋ ์ ์ ์์๋๋ ๊ฒ์ ์ค์ํ๋ค. NTP(Network Time Protocol)์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฐ์ฅ ๋ณดํธ์ ์๋จ์ด๋ค. ๊ด์ฌ ์๋ ๋ ์๋ [4]๋ฅผ ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋๋ค.
- ๊ฐ ์ (section)์ ๊ธธ์ด ์ต์ ํ: ์๋ฅผ ๋ค์ด ๋์์ฑ(concurrency)์ด ๋ฎ๊ณ ์๋ช ์ด ๊ธด ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ฉด ์ผ๋ จ๋ฒํธ ์ ์ ๊ธธ์ด๋ฅผ ์ค์ด๊ณ ํ์์คํฌํ ์ ์ ๊ธธ์ด๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด ํจ๊ณผ์ ์ผ ์๋ ์์ ๊ฒ์ด๋ค.
- ๊ณ ๊ฐ์ฉ์ฑ(high availability): ID ์์ฑ๊ธฐ๋ ํ์ ๋ถ๊ฐ๊ฒฐ(mission critical) ์ปดํฌ๋ํธ์ด๋ฏ๋ก ์์ฃผ ๋์ ๊ฐ์ฉ์ฑ์ ์ ๊ณตํด์ผ ํ ๊ฒ์ด๋ค.
์ฐธ๊ณ ๋ฌธํ
[1] Universally unique identifier: https://en.wikipedia.org/wiki/Universally_unique_identifier
[2] Ticket Servers: Distributed Unique Primary Keys on the Cheap: https://code.flickr.net/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/
[3] Announcing Snowflake: https://blog.twitter.com/engineering/en_us/a/2010/announcing-snowflake.html
[4] Network time protocol: https://en.wikipedia.org/wiki/Network_Time_Protocol
'๐ฉโ๐ปDeveloper ๐ก > ๐พBack-end๐๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ด์ค ํผ๋ ์์คํ ์ค๊ณ (0) | 2026.06.20 |
|---|---|
| URL ๋จ์ถ๊ธฐ ์ค๊ณ (1) | 2026.06.20 |
| ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น์ ์ค๊ณ (0) | 2026.06.20 |
| ๐ ์์คํ ๋์์ธ & AI ํ์ดํ๋ผ์ธ ํ์ต ์ง๋ํ (0) | 2026.06.20 |
| ๐ย ์์คํ ย ๋์์ธย &ย AIย ํ์ดํ๋ผ์ธย ํ์ตย ์ง๋ํ (0) | 2026.06.20 |