Trade-off ๊ธฐ๋ฐ์ ๊ณ ๋ฐ๋ ์์คํ ์ค๊ณ ๊ฒฐ์ ์ฒด๊ณ ์ ๋ฆฝ
๐๏ธ The System Design Playbook ๐
AI ์์ฝ
Context
๋จ์ํ ์ปดํฌ๋ํธ ์ ํ์ด ์๋, ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฒฐ์ (Hard-to-reverse decisions)์ ๋ช ์ํํ๋ ์ค๊ณ ๋ฐฉ๋ฒ๋ก ์ ํ์์ฑ ๋๋. ๋ฌด๋ถ๋ณํ ์ถ์ํ์ ์ค๋ฒ์์ง๋์ด๋ง์ผ๋ก ์ธํ ์ ์ง๋ณด์ ๋น์ฉ ์ฆ๊ฐ ๋ฐ ์์คํ ๋ณต์ก๋ ์ฌํ ๋ฌธ์ ๋ถ์.
Technical Solution
- CAP์ PACELC ์ด๋ก ์ ์ ์ฉํ์ฌ ๋คํธ์ํฌ ํํฐ์ ๋ฐ์ ์ Consistency์ Availability ์ค ๋น์ฆ๋์ค ์ฐ์ ์์์ ๋ฐ๋ฅธ ์ ์ฅ์ ์ ํ
- Linearizability๊ฐ ํ์ํ ํน์ ์์ ์๋ง Sequencer๋ฅผ ์ ์ฉํ๊ณ ๋๋จธ์ง๋ Eventual Consistency๋ก ์ฒ๋ฆฌํ๋ ํจ์จ์ ์ผ๊ด์ฑ ๋ชจ๋ธ ์ค๊ณ
- QPS, Latency Budget, Storage Size ๋ฑ ์ ๋์ ์งํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ฐฐ์นํ๋ 'Quantify before you draw' ์์น ์ ์ฉ
- Postgres, Redis, Kafka ๋ฑ ๊ฒ์ฆ๋ Boring Tool์ ์ฐ์ ์ฑํํ์ฌ ๊ธฐ์ ์ ๋ฆฌ์คํฌ๋ฅผ ์ต์ํํ๋ ๋ณด์์ ์คํ ๊ตฌ์ฑ
- ์คํจ ๋ชจ๋(Failure Modes)๋ฅผ ์ฌ์ ์ ์ ์ํ์ฌ ๋ถ๋ถ์ ์์ค์ ํ์ฉํ๋ Graceful Degradation ๊ตฌ์กฐ ์ค๊ณ
- ๋ฐ์ดํฐ ํน์ฑ์ ๋ฐ๋ผ ACID(๊ธ์ต, ์ฌ๊ณ )์ BASE(ํผ๋, ๋ถ์) ๋ชจ๋ธ์ ๋ถ๋ฆฌ ์ ์ฉํ๋ ํ์ด๋ธ๋ฆฌ๋ ๋ฐ์ดํฐ ์ ๋ต ์๋ฆฝ
์ค์ฒ ํฌ์ธํธ
1. ๋ชจ๋ ์ํคํ ์ฒ ๊ฒฐ์ ์ ํฌ๊ธฐํ ๊ฐ์น(Trade-off)๋ฅผ ๋ฌธ์์ ๋ช ์ํ๋๊ฐ?
2. ๋ค์ด์ด๊ทธ๋จ์ ๋ชจ๋ ์ปดํฌ๋ํธ์ ์์ QPS์ Latency ์์น๊ฐ ํ ๋น๋์๋๊ฐ?
3. ํน์ ์ปดํฌ๋ํธ ์ฅ์ ์ ์์คํ ์ ์ฒด๊ฐ ์๋ ๋ถ๋ถ์ ๊ธฐ๋ฅ ์ ํ๋ก ๋์ ๊ฐ๋ฅํ๊ฐ?
4. ๋ถํ์ํ ์ถ์ํ ๋ ์ด์ด๊ฐ ๋ฏธ๋์ ๋ถํ์คํ ์๊ตฌ์ฌํญ์ ์ํด ์ถ๊ฐ๋์ง ์์๋๊ฐ?