https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=278536695
[์ ์์ฑ ] ๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ ์ค๊ณ ๊ธฐ์ด
16๊ฐ์ง ์ค์ ์์คํ ์ค๊ณ ๋ฉด์ ๋ฌธ์ ์ ์์ธํ ๋ต์์ ์ ์ํ๋ค. ์์คํ ๋์ ์๋ฆฌ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ณด์ฌ ์ฃผ๋ 188๊ฐ์ ๋ํด๋ก ์ค๋ช ํ๋ฉด์ 4๋จ๊ณ ์ ๊ทผ๋ฒ์ผ๋ก ๋ฉด์ ๋ฌธ์ ๋ฅผ ํ ์ ์๋๋ก ๋๋๋ค. ์ด ์ฑ
www.aladin.co.kr
๊ฐ์
์ด๋ฒ ํํธ์์๋ ๋ถ์ฐ ์์คํ ์์ ์ฌ์ฉ๋ Unique ID ์์ฑ๊ธฐ๋ฅผ ์ค๊ณํด๋ณด์.
๊ฐ๋จํ ํ๋ก์ ํธ, ๊ฐ์ธ ํ๋ก์ ํธ ๋ฑ์ผ๋ก ID๋ฅผ ์ค๊ณํ ๋๋ 'auto_increment' ์์ฑ์ด ์ค์ ๋ ๊ธฐ๋ณธ ํค๋ฅผ ์ฌ์ฉํ๊ณค ํ๋ค.
ํ์ง๋ง ๋ถ์ฐ ํ๊ฒฝ์์๋ 'auto_increment'๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ ํ ๋๋ก๋ ์๊ตฌ๋ฅผ ๊ฐ๋นํ ์ ์์๋ฟ๋๋ฌ, ์ฌ๋ฌ ์๋ฒ๊ฐ ๋์์ auto_increment ๊ฐ์ ์์ฑํ๋ค๋ฉด ์ค๋ณต๋ ๊ฐ์ด ๋ฐ์ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ถ์ฐ ์์คํ ์์ ์ ์ผ์ฑ์ด ๋ณด์ฅ๋๋ ID๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง ์์ํ ๋ฐ, ์ฌ๊ธฐ์ ๋ค์๊ณผ ๊ฐ์ ์ ํ์ง๋ฅผ ์ดํด๋ณผ ์์ ์ด๋ค.
- ๋ค์ค ๋ง์คํฐ ๋ณต์ (multi-master replication)
- UUID (Universally Unique Identifier)
- ํฐ์ผ ์๋ฒ (Ticket Server)
- ํธ์ํฐ ์ค๋ ธํ๋ ์ดํฌ (Twitter SnowFlake) ์ ๊ทผ๋ฒ
์์ ๋ฐฉ๋ฒ๋ค์ ๋ํด ์์ธํ ์ดํด๋ณด์.
๋ค์ค ๋ง์คํฐ ๋ณต์ (Multi-Master Replication)
๋ค์ค ๋ง์คํฐ ๋ณต์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ auto_increment ๊ธฐ๋ฅ์ ํ์ฉํ๋๋ฐ, ๋ค์ ID ๊ฐ์ ๊ตฌํ ๋ 1๋งํผ ์ฆ๊ฐ์ํค๋ ๊ฒ์ด ์๋ ํ์ฌ ์ฌ์ฉ์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฒ ์์ ํด๋นํ๋ k๋งํผ ์ฆ๊ฐ์ํจ๋ค.
์์ ์์ ์์๋ ํน์ ์๋ฒ๊ฐ ๋ง๋ค์ด ๋ผ ๋ค์ ID ๊ฐ์, ํด๋น ์๋ฒ์์ ์ด์ ์ ์์ฑํ ID ๊ฐ + 2 ์ ์ป๊ฒ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ท๋ชจ ํ์ฅ์ฑ ๋ฌธ์ ๋ฅผ ์ด๋ ์ ๋ ํด๊ฒฐํ ์ ์๊ณ , ์ถฉ๋ ์๋ ๋ถ์ฐ ID๋ฅผ ์์ฑํ ์ ์๊ฒ ์ง๋ง ๋ค์๊ณผ ๊ฐ์ ์น๋ช ์ ์ธ ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค.
- ID์ ์ ์ผ์ฑ์ ๋ณด์ฅ๋๊ฒ ์ผ๋ ์๊ฐ ํ๋ฆ์ ๋ง์ถ์ด ์ปค์ง๋๋ก ์์ ๋ณด์ฅ์ด ์ด๋ ต๋ค.
- ์๋ฒ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ๋๋ ๊ธฐ์กด ๊ฐ๋ค๊ณผ ์ถฉ๋ ์์ด ๋์ํ๋๋ก ๋ง๋ค๊ธฐ๊ฐ ์ด๋ ต๋ค.
UUID (Universally Unique Identifier)
UUID๋ ์ ์ผ์ฑ์ด ๋ณด์ฅ๋๋ ID๋ฅผ ๋ง๋๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด๋ค.
์ ์ผ์ฑ์ด ๋ณด์ฅ๋๋ ID๋ฅผ ๋ง๋๋ ๋ ํ๋์ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ธ UUID๋ ์ปดํจํฐ ์์คํ ์ ์ ์ฅ๋๋ ์ ๋ณด๋ฅผ ์ ์ผํ๊ฒ ์๋ณํ๊ธฐ ์ํ 128๋นํธ์ ๊ณ ์ ์๋ณ์์ด๋ค. UUID ๊ฐ์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ์ง๊ทนํ ๋ฎ์๋ฐ, ์ํคํผ๋์์ ์ํ๋ฉด "์ค๋ณต UUID๊ฐ 1๊ฐ ์๊ธธ ํ๋ฅ ์ 50%๋ก ๋์ด ์ฌ๋ฆฌ๋ ค๋ฉด ์ด๋น 10์ต๊ฐ์ UUID๋ฅผ 100๋ ๋์ ๊ณ์ํด์ ๋ง๋ค์ด์ผ ํ๋ค"๊ณ ํ๋ค.
์ค๋ณต์ด ๋ฐ์ํ ํ๋ฅ ์ด ์ผ๋ฐ์ ์ผ๋ก ๊ฑฐ์ ์๊ธฐ์, ID๊ฐ ๋ฟ๋ง์ด ์๋๋ผ Unique ํ ๊ฐ์ด ํ์ํ ์ํฉ์์ ๋ง์ด๋ค ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค.
UUID ๊ฐ์ '09c93e62-50b4-468d-bf8a-c031842b' ์ ๊ฐ์ ํ์์ผ๋ก, ์๋ฒ ๊ฐ ์กฐ์จ ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
UUID์ ๋ํ ์ถ๊ฐ ์ค๋ช ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์:
https://docs.tosspayments.com/resources/glossary/uuid
์ฅ์
- UUID๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋จ์ํ๊ณ , ์๋ฒ ๊ฐ ์กฐ์จ์ด ํ์ ์๊ธฐ์ ๋๊ธฐํ ์ด์๋ ์๋ค.
- ๊ฐ ์๋ฒ์์ ID๋ฅผ ์ง์ ๋ง๋๋ ๊ตฌ์กฐ์ด๋ฏ๋ก ๊ท๋ชจ ํ์ฅ๋ ์ฝ๋ค.
import java.util.UUID
val uuid = UUID.randomUUID()
๋จ์
- ID๊ฐ 128๋นํธ๋ก ๊ธธ๊ธฐ์ ์ ์ฅ ๊ณต๊ฐ์ ๋ง์ด ์ฐจ์งํ๋ค.
- ์์ ๋ณด์ฅ์ด ์๊ธฐ์ ID๋ฅผ ์๊ฐ์์ผ๋ก ์ ๋ ฌํ ์ ์๋ค.
ID๋ฅผ ์ ๋ ฌํ ์ ์๋ ๋ถ๋ถ์ด ๊ต์ฅํ ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ๋ ๊ฒ ๊ฐ๋ค. ๋ฐ์ดํฐ๊ฐ ๋ง์์ ธ์ count๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ id ๊ฐ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ ๋๋ต์ ์ธ ๋ฐ์ดํฐ ๊ท๋ชจ๋ฅผ ์ถ์ ํ๋ ๊ฒฝ์ฐ๋ ์๊ณ , ๊ทธ ์ธ ID ๊ฐ์ผ๋ก ์ ๋ ฌ์ ํด์ผ ํ๋ ์ํฉ์ด ์์ํ ๋ฐ ์ด๋ฌํ ๋ก์ง ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ๋ ๊ฒ ๊ฐ๋ค.
ํฐ์ผ ์๋ฒ
ํฐ๊ฒ ์๋ฒ๋ ์ ์ผ์ฑ์ ๋ณด์ฅํ๋ ID๋ฅผ ๋ง๋ค์ด๋ด๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ ํ๋์ ๋ฐฉ๋ฒ์ด๋ค.
ํ๋ฆฌ์ปค(Flicker)๋ ๋ถ์ฐ ํ๊ฒฝ์ ๊ธฐ๋ณธ ํค๋ฅผ ๋ง๋ค์ด๋ด๊ธฐ ์ํด ํฐ์ผ ์๋ฒ ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์๋ค.
Ticket Servers: Distributed Unique Primary Keys on the Cheap
ํฐ์ผ ์๋ฒ์ ํต์ฌ์ auto_increment ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ฅผ ์ค์ ์ง์คํ์ผ๋ก ํ๋๋ง ์ฌ์ฉํ๋ค.
์ฅ์
- ์ ์ผ์ฑ์ด ๋ณด์ฅ๋๋ ์ซ์๋ก๋ง ๊ตฌ์ฑ๋ ID๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค.
- ๊ตฌํ์ด ๊ฐ๋จํ๊ณ , ์ค์ ๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ค.
๋จ์
- ํฐ์ผ ์๋ฒ๊ฐ SPOF(Single Point Of Failure)๊ฐ ๋๋ค.
- ์ฆ, ํฐ์ผ ์๋ฒ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ์๋ฒ๋ฅผ ์ด์ฉํ์ฌ ID๋ฅผ ์์ฑํ๋ ๋ชจ๋ ์์คํ ์ด ์ํฅ์ ๋ฐ๊ฒ ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ํฐ์ผ ์๋ฒ๋ฅผ ์ฌ๋ฌ ๋ ์ค๋นํด์ผ ํ๋๋ฐ, ๊ทธ๋ฌ๋ฉด ๋ฐ์ดํฐ ๋๊ธฐํ์ ๊ฐ์ ์๋ก์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
ํธ์ํฐ ์ค๋ ธํ๋ ์ดํฌ (Twitter SnowFlake) ์ ๊ทผ๋ฒ
์์์ ์ดํด๋ณธ ๋ฐฉ๋ฒ๋ค์ ๋ชจ๋ ํน์ ๋ฌธ์ ๋ค์ด ์กด์ฌํ์๊ณ , ์ด๋ฒ์๋ ํธ์ํฐ(X)๊ฐ ์ฌ์ฉํ๋ ์ค๋ ธํ๋ ์ดํฌ ๋ผ๋ ID ์์ฑ ๊ธฐ๋ฒ์ ์ดํด๋ณด๊ฒ ๋ค.
์๋๋ ์ค๋ ธํ๋ ์ดํฌ๋ฅผ ํตํด ์์ฑํ 64๋นํธ ID์ ๊ตฌ์กฐ์ด๋ค.
- ์ฌ์ธ(sign) ๋นํธ: 1๋นํธ๋ฅผ ํ ๋นํ๋ค. ๋น์ฅ์ ์ฐ์์๋ ์์ผ๋ ์ถํ ์์/์์ ๊ตฌ๋ณ์ ์ฌ์ฉํ ์ ์๋ค.
- ํ์์คํฌํ: 41๋นํธ๋ฅผ ํ ๋นํ๋ค. ๊ธฐ์ ์๊ฐ ์ดํ ๋ช ๋ฐ๋ฆฌ์ด๊ฐ ๊ฒฝ๊ณผํ๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ด๋ค.
- ๋ฐ์ดํฐ์ผํฐ ID: 5๋นํธ๋ฅผ ํ ๋นํ๋ค. ๋ฐ๋ผ์ 2^5 = 32๊ฐ์ ๋ฐ์ดํฐ์ผํฐ๋ฅผ ์ง์ํ ์ ์๋ค.
- ์๋ฒ ID: 5๋นํธ๋ฅผ ํ ๋นํ๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ์ผํฐ๋น 32๊ฐ์ ์๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์ผ๋ จ๋ฒํธ: 12๋นํธ๋ฅผ ํ ๋นํ๋ค. ๊ฐ ์๋ฒ์์ ID๋ฅผ ์์ฑํ ๋๋ง๋ค ์ผ๋ จ๋ฒํธ๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
์์ธ ์ค๊ณ
๋ฐ์ดํฐ์ผํฐ ID์ ์๋ฒ ID๋ ์์คํ ์ด ์์๋ ๋ ๊ฒฐ์ ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์์คํ ์ด์ ์ค์๋ ๋ฐ๋์ง ์๋๋ค.
Snowfalke ID๋ ์ด 4๊ฐ์ ๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
sign
- ์์/์์๋ฅผ ๊ตฌ๋ถํ๋๋ฐ ์ฌ์ฉํ๋ ํฐ ์ฉ๋๋ ์์
timestamp
- ID ๊ตฌ์กฐ ์ค ๊ฐ์ฅ ์ค์ํ 41๋นํธ๋ฅผ ์ฐจ์งํ๋ค.
- ๊ธฐ์ ์๊ฐ(epoch) ์ดํ ๊ฒฝ๊ณผํ ๋ฐ๋ฆฌ์ด์ ์๊ฐ
- ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ์ ์ ๊ฐ์ด ์ปค์ง๋ฏ๋ก ๊ฒฐ๊ตญ ์๊ฐ ์ ์ ๋ ฌ์ด ๊ฐ๋ฅํด์ง๋ค.
workerId
- ๊ณ ์ ํ ์ธ์คํด์ค์ ID ๊ฐ์ผ๋ก ์ด 1,024๋(2^10) ๊น์ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
sequence
- ID๋ฅผ ์์ฑํ ๋๋ง๋ค ์ฆ๊ฐ๋๋ ๊ฐ์ผ๋ก, 1๋ฐ๋ฆฌ ์ด๊ฐ ๊ฒฝ๊ณผํ๋ฉด ๊ฐ์ 0์ผ๋ก ์ด๊ธฐํ๊ฐ ๋๋ค.
์ฅ์
- 64bit๋ก UUID์ ๋นํด ์ฐจ์งํ๋ ์ ์ฅ ๊ณต๊ฐ์ด ์๋ค.
- timestamp ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ด ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค.
- ๋ถ์ฐ ์์คํ ์ ์ ํฉํ๋ค.
๋จ์
- UUID์ ๋นํด ๊ตฌํ์ด ๋ ๋ณต์กํ๋ค.
'System Design' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น์ ์ค๊ณ (0) | 2025.03.10 |
---|---|
์ฌ์ฉ์ ์์ ๋ฐ๋ฅธ ๊ท๋ชจ ํ์ฅ์ฑ (1) | 2025.02.25 |
System Design: Message Deduplication System (0) | 2024.10.27 |
๋๊ธ