์งํฐ(Jitter)๋ ์ด๋ค ์์
์ด๋ ์ด๋ฒคํธ๊ฐ ์คํ๋๋ ์๊ฐ ๊ฐ๊ฒฉ์ด ์ผ์ ํ์ง ์๊ณ ๋ฏธ์ธํ๊ฒ ํ๋ค๋ฆฌ๋ ํ์์ ์๋ฏธํฉ๋๋ค.
์๋ฅผ ๋ค์ด 1์ด ์ฃผ๊ธฐ๋ก ์คํ๋์ด์ผ ํ๋ ์์
์ด ์ค์ ๋ก๋ ์ด๋ค ๊ฒฝ์ฐ์๋ 0.9์ด, ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ 1.3์ด ๊ฐ๊ฒฉ์ผ๋ก ์คํ๋๋ ๊ฒ๊ณผ ๊ฐ์ ์ํฉ์ด ์ด์ ํด๋นํฉ๋๋ค.
์งํฐ๋ ๋คํธ์ํฌ ์ง์ฐ, ์ด์์ฒด์ ์ค์ผ์ค๋ง, ๊ฐ๋น์ง ์ปฌ๋ ์
(GC), CPU ๋ถํ, ์ค๋ ๋ ๊ฒฝํฉ, ํ์ด๋จธ ํด์๋ ๋ฑ ๋ค์ํ ํ์ค์ ์ธ ์์ธ์ผ๋ก ์ธํด ์์ฐ์ค๋ฝ๊ฒ ๋ฐ์ํฉ๋๋ค.
์ค๋ ๊ธฐ์ ๋ธ๋ก๊ทธ ๊ธ์ ๋จ์ํ “ ๋ช๋ช ์ด์ ๋ก ์งํฐ๊ฐ ๋ฐ์ํ๋ค”๋ ์ฌ์ค๋ณด๋ค๋, ์งํฐ๋ฅผ ์๋์ ์ผ๋ก ํ์ฉํจ์ผ๋ก์จ ์์คํ
์ ์์ ์ฑ์ ๋์ผ ์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ์์
๋๋ค.
๐์งํฐ๊ฐ ๋ฐ์ํ๋ ๋ํ์ ์ธ ์์ธ
์งํฐ๋ “์ ํํ ํ์ด๋ฐ์ ๊ธฐ๋ํ์ง๋ง ์ค์ ํ๊ฒฝ์์๋ ๊ทธ ํ์ด๋ฐ์ด ์ง์ผ์ง์ง ์๋” ๋ชจ๋ ์ํฉ์์ ๋ฐ์ํ ์ ์์ต๋๋ค.
1๏ธโฃ ์ด์์ฒด์ ๋ฐ ๋ฐํ์ ์ค์ผ์ค๋ง
- ์ค๋ ๋๊ฐ ์ฆ์ ์คํ๋์ง ๋ชปํ๊ณ ๋๊ธฐ ์ํ์ ๋์ด๋ ๊ฒฝ์ฐ
- ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ์ด ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ
2๏ธโฃ ๊ฐ๋น์ง ์ปฌ๋ ์
Java, C#๊ณผ ๊ฐ์ GC ๊ธฐ๋ฐ ๋ฐํ์์์๋ ์ผ์์ ์ธ Stop-the-world ๋๋ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
3๏ธโฃ ๋คํธ์ํฌ ์ง์ฐ์ ๋ณ๋์ฑ
- RTT(Round Trip Time)๊ฐ ํญ์ ์ผ์ ํ์ง ์์
- ํจํท ์ฌ์ ์ก์ด๋ ๋คํธ์ํฌ ํผ์ก ๊ตฌ๊ฐ์ ์ํฅ
4๏ธโฃ ๋ถํ ๊ธ์ฆ ๋ฐ ๋ฆฌ์์ค ๊ฒฝํฉ
- CPU ์ฌ์ฉ๋ฅ ๊ธ์ฆ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ํ ๊ณ ๊ฐ
- ๋ฝ(lock) ๊ฒฝํฉ ์ฆ๊ฐ
๐ค ์ค๋ฌด์์ ๋งํ๋ “์๋์ ์ธ Jitter”๋ ๋ฌด์์ธ๊ฐ?
์ค๋ฌด์์ ์งํฐ๋ผ๋ ์ฉ์ด๋ ๋ณดํต ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ก ๋ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
๋์์ ๋ชฐ๋ฆฌ๋ ์์ฒญ, ์ฌ์๋, ์ค์ผ์ค ์คํ์ ์๋์ ์ผ๋ก ๋ถ์ฐ์ํค๊ธฐ ์ํด ๋๋คํ ์ง์ฐ ์๊ฐ์ ์ถ๊ฐํ๋ ์ ๋ต
์ฆ, ์งํฐ๊ฐ ์์ธ์ผ๋ก์์ “์ฐ์ฐํ ํ๋ค๋ฆผ”์ด๋ผ๋ฉด, ์งํฐ๋ฅผ ํ์ฉํ ์ค๊ณ๋ “์๋์ ์ผ๋ก ํ๋ค๋ฆผ์ ์ฃผ์ด ์์คํ
์ ์์ ํํ๋ ํจํด”์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
๐์งํฐ๋ฅผ ํ์ฉํ๋ ๋ํ์ ์ธ ์ฌ๋ก
1๏ธโฃ ์ฌ์๋ ํญ์ฃผ ๋ฐฉ์ง (Retry Storm / Thundering Herd)

์ธ๋ถ API ์ฅ์ ๋ ํ์์์์ด ๋ฐ์ํ๋ฉด ๋ค์์ ์ธ์คํด์ค๊ฐ ๋์์ ์ฌ์๋๋ฅผ ์๋ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๊ฐ์ ์๊ฐ์ 100๊ฐ ์์ฒญ์ด ์๋ค๊ณ ๊ฐ์ ํ๊ณ , ์ด ์์ฒญ์ด ๋ชจ๋ ์คํจํ๋ค๊ณ ํ๊ฒ ์ต๋๋ค. ์งํฐ๊ฐ ์๋ค๋ฉด ์ฌ์๋ ์ ๋ต์ ์ํด 1์ด๋ค ๋ชจ๋ ์์ฒญ ์ฌ์๋๋ฅผ ํ๊ฒ ๋๋๋ฐ, ์๋ฒ๋ ํ ์์ ์ ๋ ์ฌ์๋ ์คํ์ดํฌ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์๋ฒ๊ฐ ์ฅ์ ๊ฐ ์๊ธด ์ํฉ์ด๋ผ๋ฉด ์ด๋ก ์ธํด ๋ถํ๊ฐ ๋ ์ปค์ง๊ณ ์ฅ์ ๊ฐ ์ฅ๊ธฐํ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๐ทํด๊ฒฐ ๋ฐฉ๋ฒ
์ง์ ๋ฐฑ์คํ(Exponential Backoff) + Jitter ํจํด์ ์ ์ฉํฉ๋๋ค.
์ฌ์๋ ๊ฐ๊ฒฉ์ ์ง์์ ์ผ๋ก ์ฆ๊ฐ์ํค๊ณ ๊ฐ ์ง์ฐ ์๊ฐ์ ๋๋ค ์งํฐ๋ฅผ ์ถ๊ฐํ์ฌ ์ฌ์๋ ์์ ์ ๋ถ์ฐํฉ๋๋ค.
์์)
1์ด → 2์ด → 4์ด → 8์ด
๊ฐ ๋จ๊ณ๋ง๋ค ๋๋ค ์ง์ฐ์ ์์ด ์๋ก ๋ค๋ฅธ ์์ ์ ์ฌ์๋ํ๋๋ก ํฉ๋๋ค.
์์ฒญ 1: 0.9์ด → 2.3์ด → 4.1์ด → 7.8์ด
์์ฒญ 2: 1.1์ด → 2.1์ด → 3.6์ด → 7.7์ด
2๏ธโฃ ์ค์ผ์ค๋ฌ ๋ฐ ๋ฐฐ์น ์์ ๋์ ์คํ ๋ถ์ฐ
๋งค๋ถ 0์ด์ ์คํ๋๋ ๋ฐฐ์น ์์ ์ด ์ฌ๋ฌ ์๋ฒ์์ ๋์์ ์ํ๋ ๊ฒฝ์ฐ, ํน์ ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ๊ฐ ๊ธ์ฆํ ์ ์์ต๋๋ค.
๐ทํด๊ฒฐ ๋ฐฉ๋ฒ
์ค์ผ์ค ์์ ์์ ์ ๋๋ค ๋๋ ์ด๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, 0์ด๊ฐ ์๋ 0~20์ด ์ฌ์ด์์ ์์๋ก ์์ํ๋๋ก ์ค์ ํฉ๋๋ค.
์ด๋ฅผ ํตํด ํน์ ์์ ์ ๋ถํ๊ฐ ์ง์ค๋๋ ํ์์ ์ํํ ์ ์์ต๋๋ค.
3๏ธโฃ ์บ์ TTL ๋์ ๋ง๋ฃ๋ก ์ธํ Cache Stampede ๋ฐฉ์ง
๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์บ์ฑํด๋๊ธฐ ์ํด ์บ์ ์์ (cache warm-up)์ ๋ต์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ๋ฌ ๋ฐ์ดํฐ์ ๋์ผํ TTL ์ ์ค์ ํ๊ฒ ๋๋ฉด ๋์ผ ์๊ฐ๋ค์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ๋ฒ์ ๋ง๋ฃ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๋์ผํ ์์ ์ ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํด ๋ชจ๋ DB ์กฐํ๋ฅผ ํ๊ฒ ๋ฉ๋๋ค. DB ๋ ๊ธ๊ฒฉํ ๋ถํ๋ฅผ ๊ฐ๋นํ์ง ๋ชปํด ์ฅ์ ์ํฉ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์ฆ, ๋ชจ๋ ์บ์ ํญ๋ชฉ์ ๋์ผํ TTL์ ์ค์ ํ๋ฉด, ๋ง๋ฃ ์์ ์ ์์ฒญ์ด ํ๊บผ๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ชฐ๋ฆด ์ ์๋ ์ํ์ด ์์ต๋๋ค.
๐ทํด๊ฒฐ ๋ฐฉ๋ฒ
TTL ๊ฐ์ ์งํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์์) 300์ด → 300์ด ± (0~30์ด)
์ด๋ ๊ฒ ํ๋ฉด ์บ์ ๋ง๋ฃ ์์ ์ด ๋ถ์ฐ๋์ด ๋ถํ๊ฐ ์ํ๋ฉ๋๋ค.
4๏ธโฃ ๋ถ์ฐ ๋ฝ, ๋ฆฌ๋ ์ ์ถ, ํด๋ง ๊ฐ๊ฒฉ ๋ถ์ฐ
๋ชจ๋ ์ธ์คํด์ค๊ฐ ๋์ผํ ์ฃผ๊ธฐ๋ก ์ํ๋ฅผ ํ์ธํ๋ฉด, ๋์์ ๊นจ์ด๋ ๊ฒฝ์ํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๐ทํด๊ฒฐ ๋ฐฉ๋ฒ
ํด๋ง ์ฃผ๊ธฐ๋ ์ฌ์๋ ๊ฐ๊ฒฉ์ ์งํฐ๋ฅผ ์ถ๊ฐํ์ฌ ๊ฒฝ์์ ์ํํฉ๋๋ค.
์์) 1์ด๋ง๋ค ํ์ธ → 1์ด ± 300ms
๐ ์งํฐ ์ ๋ต(ํจํด)์ ์ข ๋ฅ
1๏ธโฃ Full Jitter
์ง์ฐ ์๊ฐ์ 0 ~ baseDelay ๋ฒ์์์ ๋ฌด์์๋ก ์ ํ
- ์ฅ์ : ๋ถ์ฐ ํจ๊ณผ๊ฐ ๋งค์ฐ ํผ
- ๋จ์ : ๋งค์ฐ ๋ฎ์ ์๊ฐ ๋์ฌ ์ ์๋ ํ๋ฅ ์ด ์๊ธฐ์ ์ง๋์น๊ฒ ๋น ๋ฅธ ์ฌ์๋๊ฐ ๋ฐ์ํ ์ ์์.
2๏ธโฃ Equal Jitter
์ต์ ์ง์ฐ ์๊ฐ์ ์ด๋ ์ ๋ ๋ณด์ฅํ๋ฉด์ ๋ถ์ฐ ํจ๊ณผ๋ฅผ ์ค๋๋ค.
์์) baseDelay / 2 + random(0 ~ baseDelay / 2)
- ์ฅ์ : ์ต์ ์ง์ฐ ์๊ฐ์ ์ด๋ ์ ๋ ๋ณด์ฅ
- ๋จ์ : Full Jitter์ ๋นํด ๋ถ์ฐ ํจ๊ณผ๋ ๋ค์ ์ฝํจ
Equal Jitter ๊ณ์ด์ ๊ฐ๊น์ด Simple Jitter
const delay = 1000 * 2 ** attempt_count; // 1์ด, 2์ด, 4์ด... ์ง์ ๋ฐฑ์คํ
const delay_ms = delay * (0.5 + Math.random()); // Simple Jitter
sleep(delay_ms);
- ์ต์ ์ง์ฐ: ๊ธฐ๋ณธ ์ง์ฐ์ 50%
- ์ต๋ ์ง์ฐ: ๊ธฐ๋ณธ ์ง์ฐ์ 150%
3๏ธโฃ Decorrelated Jitter
์ด์ ์ง์ฐ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ค์ ์ง์ฐ ์๊ฐ์ ๋๋คํ๊ฒ ์กฐ์
- ์ฅ์ : ์ฌ์๋ ํจํด์ด ์์ฐ์ค๋ฝ๊ณ ํญ์ฃผ ์ํ์ ํจ๊ณผ์
- ๋จ์ : ๊ตฌํ ๋์ด๋๊ฐ ์๋์ ์ผ๋ก ๋์
์ค๋ฌด์์๋ Exponential Backoff + Full ๋๋ Equal Jitter ์กฐํฉ์ด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
๐ ์งํฐ์ ์ฅ์
1) ์ฅ์ ํ์ฐ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค
๋์ ์ฌ์๋ ๋ฐ ๋์ ์คํ์ ์ค์ฌ ์์คํ
์ด ํ๋ณตํ ์ ์๋ ์๊ฐ์ ํ๋ณดํ ์ ์์ต๋๋ค.
2) ์๊ฐ ๋ถํ ํผํฌ๋ฅผ ๋ฎ์ถ ์ ์์ต๋๋ค
ํ๊ท ๋ถํ๊ฐ ๋์ผํ๋๋ผ๋ ํผํฌ๊ฐ ๋ฎ์์ง๋ฉด ์ฅ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
3) ์๋์น ์์ ๋๊ธฐํ๋ฅผ ๋ฐฉ์งํฉ๋๋ค
๋ถ์ฐ ์์คํ
์์ ๋์ผํ ์กฐ๊ฑด์ผ๋ก ๋์ผํ ํ์ด๋ฐ์ ๋์ํ๋ ์ํฉ์ ํจ๊ณผ์ ์ผ๋ก ํด์ํ ์ ์์ต๋๋ค.
๐ ์งํฐ์ ๋จ์ ๋ฐ ํธ๋ ์ด๋์คํ
1) ํ๊ท ์ง์ฐ ์๊ฐ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค
์งํฐ๋ ์ผ๋ถ ์์ฒญ์ ์๋์ ์ผ๋ก ์ง์ฐ์ํค๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ํ๊ท ์๋ต ์๊ฐ์ด ๋์ด๋ ์ ์์ต๋๋ค.
2) ๋๋ฒ๊น
๊ณผ ๋ถ์์ด ์ด๋ ค์์ง ์ ์์ต๋๋ค
๋๋ค ์์๊ฐ ์ถ๊ฐ๋๋ฏ๋ก ์ฌํ์ฑ๊ณผ ๋ถ์ ๋์ด๋๊ฐ ๋์์ง ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ง์ฐ ์๊ฐ๊ณผ ์ฌ์๋ ์ ๋ณด๋ฅผ ๋ก๊ทธ๋ก ๋จ๊ธฐ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
3) ์ฌ์ฉ์ ๊ฒฝํ์ ์
์ํฅ์ ์ค ์ ์์ต๋๋ค
์ผ์ ํ ์ง์ฐ ์๊ฐ์ด ํฌํจ๋๋ฏ๋ก ์ฌ์ฉ์ ์์ฒญ ๊ฒฝ๋ก์ ๋ฌด๋ถ๋ณํ๊ฒ ์ ์ฉํ ๊ฒฝ์ฐ ์ฒด๊ฐ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ผ๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
โ ์งํฐ ์ ์ฉ ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ์ฒดํฌ๋ฆฌ์คํธ
๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด ์๋ค๋ฉด ์งํฐ ์ ์ฉ์ ๊ณ ๋ คํด๋ณผ ์ ์์ต๋๋ค.
- ์ฅ์ ์ ์ฌ์๋ ์์ฒญ์ด ๋์์ ๋ชฐ๋ฆฌ๋ ๊ฒฝ์ฐ
- ์ค์ผ์ค ์์ ์ด ํน์ ์๊ฐ์ ์ง์ค๋๋ ๊ฒฝ์ฐ
- ์บ์ ๋ง๋ฃ ์์ ์ DB ๋ถํ๊ฐ ๊ธ์ฆํ๋ ๊ฒฝ์ฐ
- ๋ถ์ฐ ๋ฝ ๋๋ ํด๋ง ๊ฒฝ์์ด ์์ฃผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
- ํ๊ท ๋ถํ๋ ๋ฎ์ง๋ง ์๊ฐ ํผํฌ๋ก ์ฅ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
๐๋ง๋ฌด๋ฆฌ
์งํฐ๋ “์ ํํ ํ์ด๋ฐ”์ ์ผ๋ถ ํฌ์ํ๋ ๋์ , ๋ถ์ฐ ์์คํ
์ด ์ค์ ์ด์ ํ๊ฒฝ์์ ์์ ์ ์ผ๋ก ๋์ํ๋๋ก ๋๋ ์ค์ํ ๊ธฐ๋ฒ์
๋๋ค.
์ฌ์๋ ๋ก์ง, ์บ์ TTL, ๋ฐฐ์น ์ค์ผ์ค๋ง๊ณผ ๊ฐ์ ์์ญ์์๋ ์งํฐ๋ฅผ ์ ์ฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ฅ์ ์ํ ํจ๊ณผ๋ฅผ ํฌ๊ฒ ์ป์ ์ ์์ต๋๋ค.
๋๊ธ