System design
The 6-stage framework, step by step in Korean: requirements โ scale โ API + data model โ high-level design โ the deep dive that wins points โ trade-offs + monitoring. One English line per stage. Real systems mapped.
- URL Shortener (TinyURL)8 steps๊ธด URL์ ์งง์ ์ฝ๋(์: bit.ly/aZ8kQp)๋ก ๋ฐ๊ฟ์ฃผ๊ณ , ๊ทธ ์งง์ ๋งํฌ๋ฅผ ๋๋ฅด๋ฉด ์๋ URL๋ก ๋ณด๋ด์ฃผ๋ ์๋น์ค๋ค. ํต์ฌ์ ๋ ๊ฐ์ง: ์งง์ ์ฝ๋๋ฅผ ์ ๊ฒน์น๊ฒ ๋นจ๋ฆฌ ๋ง๋๋ ๊ฒ, ๊ทธ๋ฆฌ๊ณ ๋ฆฌ๋ค์ด๋ ํธ(์ฝ๊ธฐ)๋ฅผ ์์ฃผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ. ์ฝ๊ธฐ๊ฐ ์ฐ๊ธฐ๋ณด๋ค ์๋์ ์ผ๋ก ๋ง์ ์ ํ์ ์ธ ์ฝ๊ธฐ ์์ฃผ ์์คํ ์ด๋ค.
- Distributed Rate Limiter7 steps์ฌ๋ฌ ๋์ API ์๋ฒ ์์์ ํด๋ผ์ด์ธํธ๋ณ๋ก ์์ฒญ ์๋๋ฅผ ์ ํํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด "์ฌ์ฉ์๋น ์ด๋น 100๊ฑด"์ ๋์ผ๋ฉด 429(Too Many Requests)๋ฅผ ๋๋ ค์ค๋ค. ์๋ฒ๊ฐ 50๋๋ก ํฉ์ด์ ธ ์์ด๋ ์นด์ดํธ๊ฐ ํ ๊ณณ์ฒ๋ผ ํฉ์ณ์ ธ์ผ ํ๊ณ , ์ด ํ๋จ์ ๋ชจ๋ ์์ฒญ๋ง๋ค 1~2ms ์์ ๋๋์ผ ํ๋ค.
- News / Activity Feed7 steps์คํ๋์ด ๊ฐ์ ๋ถ๋์ฐ ๋ง์ผ์์, ์ฌ์ฉ์๊ฐ ํ๋ก์ฐ/์ ์ฅํ ์ง๊ณผ ๋๋ค์์ ์ผ์ด๋๋ ์ผ(๊ฐ๊ฒฉ ์ธํ, ์ ๋งค๋ฌผ, ๋ด ์คํผ ์ํ ๋ณ๊ฒฝ, ํฌ์ด ์์ฝ ํ์ )์ ์๊ฐ์ ํผ๋๋ก ๋ณด์ฌ์ค์ผ ํ๋ค. ํต์ฌ ์ด๋ ค์์ "ํ ๋ฒ์ ์ด๋ฒคํธ(์: ์ธ๊ธฐ ๋งค๋ฌผ ๊ฐ๊ฒฉ ์ธํ)๋ฅผ ๊ทธ๊ฑธ ์ ์ฅํ ์๋ง ๋ช ์ ํผ๋์ ์ด๋ป๊ฒ ๋ฟ๋ฆฌ๋๋(ํฌ์์)"๋ค. ์ฝ๊ธฐ๊ฐ ์ฐ๊ธฐ๋ณด๋ค ํจ์ฌ ๋ง๊ณ , ์ฝ๊ฐ ๋ฆ์ด๋(๋ช ์ด) ๊ด์ฐฎ์ ๋์ ํญ์ ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ผ ํ๋ค.
- Notification System6 stepsOpendoor ๊ฐ์ ๋ถ๋์ฐ ๋ง์ผํ๋ ์ด์ค์์ ์ฌ์ฉ์์๊ฒ ์๋ฆผ์ ๋ณด๋ด๋ ์์คํ ์ ์ค๊ณํ๋ค. "์ ์คํผ ๋์ฐฉ", "๊ฐ๊ฒฉ ๋ณ๋", "๊ฑฐ๋ ๋จ๊ณ ๋ณ๊ฒฝ" ๊ฐ์ ์ด๋ฒคํธ๊ฐ ์๊ธฐ๋ฉด ํธ์, ์ด๋ฉ์ผ, SMS๋ก ์๋ฆผ์ ๋ณด๋ธ๋ค. ํต์ฌ์ ์ ๋ ๊ฐ์ ์๋ฆผ์ ๋ ๋ฒ ๋ณด๋ด์ง ์์ผ๋ฉด์(์ค๋ณต ๋ฐฉ์ง), ํธ๋ํฝ์ด ๋ชฐ๋ ค๋ ์ ์ฃฝ๊ณ , ๋ฐ์ก ์ง์ฐ์ ์งง๊ฒ ์ ์งํ๋ ๊ฒ์ด๋ค.
- Property Listings Search (geo + filters)7 steps์ฌ์ฉ์๊ฐ ์ง๋์์ ํ ์ง์ญ์ ๋ณด๋ฉด์ "๋ง์ด์ ๋ฏธ, ์นจ์ค 3๊ฐ ์ด์, 50๋ง ๋ฌ๋ฌ ์ดํ" ๊ฐ์ ์กฐ๊ฑด์ผ๋ก ๋งค๋ฌผ์ ์ฐพ๋ ๊ฒ์ ์์คํ ์ ์ค๊ณํ๋ค. ํต์ฌ์ ์ง๋ ๋ฐ์ค(์/๊ฒฝ๋ ๋ฒ์) ์์ ๋งค๋ฌผ์ ํํฐ + ์ ๋ ฌ + ํ์ด์ง๋ค์ด์ ํด์ ๋น ๋ฅด๊ฒ ๋๋ ค์ฃผ๋ ๊ฒ์ด๋ค. ๊ฐ๊ฒฉ์ด๋ ์ํ๊ฐ ๋ฐ๋๋ฉด ๊ฒ์ ๊ฒฐ๊ณผ์๋ ๋ช ์ด ์์ ๋ฐ์๋ผ์ผ ํ๋ค.
- Offer / Transaction System7 stepsOpendoor ๊ฐ์ ๋ถ๋์ฐ ๋ง์ผ์์ ์ง ํ ์ฑ์ ๋ํด ์คํผ(๋งค์ ์ ์)๋ฅผ ๋ง๋ค๊ณ , ๋ณด๋ด๊ณ , ์๋ฝํ๊ณ , ๋ง๊ฐ(closing)๊น์ง ๊ฐ๋ ๊ฑฐ๋ ํ๋ฆ์ ์ค๊ณํ๋ค. ํต์ฌ์ "์ํ ๋ณ๊ฒฝ์ ๋จ์ํ ํ๋ ์์ ์ด ์๋๋ผ ๋น์ฆ๋์ค ์ด๋ฒคํธ"๋ผ๋ ์ ์ด๋ค. ๋์ด ๊ฑธ๋ฆฐ ๊ฑฐ๋๋ผ์ ์ ํ์ฑ(correctness)๊ณผ ๊ฐ์ฌ ์ถ์ (audit)์ด ๊ฐ์ฉ์ฑ๋ณด๋ค ๋ ์ค์ํ๋ค.
- Home Pricing / Valuation Pipeline7 stepsOpendoor๋ ์ง์ฃผ์ธ์ด ์ฃผ์๋ฅผ ๋ฃ์ผ๋ฉด "์ฐ๋ฆฌ๊ฐ ์ด ์ง์ ์ผ๋ง์ ์ด๊ฒ์"๋ผ๋ ๊ฐ๊ฒฉ(์คํผ)์ ๋ณด์ฌ์ค์ผ ํ๋ค. ์ด ๊ฐ๊ฒฉ์ ๊ธฐ์ค๊ฐ + ๋ฆฌ๋ ธ๋ฒ ์ด์ + ๋ฆฌ์คํฌ + ์์ฅ์ํฉ์ ํฉ์ณ์ ๋์ค๋๋ฐ, ML ๋ชจ๋ธ๊ณผ ์ฌ๋ฌ ์ธ๋ถ ๋ฐ์ดํฐ(๋น๊ต ๋งค๋ฌผ, ์์ธ)๊ฐ ํ์ํด์ ๊ณ์ฐ์ด ๋ฌด๊ฒ๋ค. ํต์ฌ์ ๋ฌด๊ฑฐ์ด ๊ฐ๊ฒฉ ๊ณ์ฐ์ ์ฌ์ฉ์์๊ฒ ๋ณด์ด๋ ์คํผ ์ํ์ ๋ถ๋ฆฌํ๊ณ , ๋ชจ๋ ๊ฐ๊ฒฉ์ ๋ฒ์ ์ผ๋ก ๋จ๊ฒจ์ "์ ์ด ๊ฐ๊ฒฉ์ด ๋์๋์ง" ํญ์ ์ค๋ช ํ ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ด๋ค.
- Distributed Key-Value Store7 steps๋จ์ํ get(key) / put(key, value) API ๋ ๊ฐ๋ง ์ ๊ณตํ์ง๋ง, ๋ฐ์ดํฐ๊ฐ ํ ์๋ฒ์ ๋ค ์ ๋ค์ด๊ฐ๋ ๋ถ์ฐ ํค-๊ฐ ์ ์ฅ์๋ฅผ ์ค๊ณํ๋ค. ํต์ฌ์ ์๋ฐฑ ๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋๋๊ณ (์ค๋ฉ), ํ ๋๊ฐ ์ฃฝ์ด๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฌ๋ผ์ง๊ฒ(๋ณต์ ) ๋ง๋๋ ๊ฒ์ด๋ค. DynamoDB๋ Cassandra๊ฐ ์ค์ ๋ก ์ด๋ ๊ฒ ๋์ํ๋ค.
- Reconciliation System (inventory vs financial records)8 steps์คํ๋์ด๋ ์ง์ ์ง์ ์ฌ๊ณ ํ๋ค. ์ง์ ์ํ๋ ์ฌ๊ณ (์ธ๋ฒคํ ๋ฆฌ) ์์คํ ์, ๋์ ํ๋ฆ์ ์ฌ๋ฌด ์์ฅ์ ๋ฐ๋ก ๊ธฐ๋ก๋๋ค. ๋ฐ๋ก ๊ธฐ๋ก๋๋ ๋ ์์คํ ์ ์๊ฐ์ด ์ง๋๋ฉด ๋ฐ๋์ ์ด๊ธ๋๋ค โ ์ง์ ํ๋ ธ๋ค๊ณ ๋ผ ์๋๋ฐ ์ ๊ธ ๊ธฐ๋ก์ด ์๊ฑฐ๋, ๊ธ์ก์ด ๋ค๋ฅด๊ฑฐ๋. ์ด ์ด๊ธ๋จ์ ๋งค์ผ ์๋์ผ๋ก ์ฐพ์ ์ฌ๊ฐ๋๋ณ๋ก ๋ถ๋ฅํ๊ณ , ์ฌ๋์ด ์ฒ๋ฆฌํ ๊ฒ๋ง ๊ฒํ ํ์ ์ฌ๋ฆฌ๋ ์์คํ ์ ์ค๊ณํ๋ค. ์ ์กฐ์ ์ ์ฌ๊ณ -์ฌ๋ฌด ๋์ฌ(reconciliation)์ ์ ํํ ๊ฐ์ ๋ชจ์์ ๋ฌธ์ ๋ค.
- Real-Time Updates (ops board everyone sees instantly)8 steps์๋ฐฑ ๋ช ์ ์ด์(ops) ์ธ์์ด ๊ฐ์ ์์ ๋ณด๋๋ฅผ ๋ณด๊ณ ์๋ค. ๋๊ตฐ๊ฐ ์์ ์ ์๋ฃํ๋ฉด ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋ ํ๋ฉด์ 1~2์ด ์์ ๋ฐ์๋ผ์ผ ํ๋ค. ํ์ด์ผ ํ ๋ฌธ์ ๋ ์ธ ๊ฐ์ง: ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ด๋ป๊ฒ ๋ฐ์ด์ค๊น(WebSocket vs SSE vs ํด๋ง), ์๋ฒ๊ฐ ์ฌ๋ฌ ๋์ผ ๋ ์ด๋ป๊ฒ ์ ๋ถ์๊ฒ ํผ๋จ๋ฆด๊น(Redis Pub/Sub), ๊ทธ๋ฆฌ๊ณ ์ ๊น ๋๊ฒผ๋ค ๋์์จ ์ฌ๋์ด ๋์น ๋ณ๊ฒฝ์ ์ด๋ป๊ฒ ๋ฐ๋ผ์ก์๊น(resume cursor). ์ง์ค์ ์์ฒ์ ํญ์ DB์ด๊ณ , ์ค์๊ฐ ์ฑ๋์ ์๋ฆผ์ผ ๋ฟ์ด๋ผ๋ ๊ฒ ์ค๊ณ ์ ์ฒด๋ฅผ ๊ดํตํ๋ ์์น์ด๋ค.