Design Search Autocomplete System
์๊ตฌ์ฌํญ ๋ฐ ๊ฐ๋ต์ ์ถ์
๋น ๋ฅธ ์๋ต ์๋: ์ฌ์ฉ์๊ฐ ๊ฒ์์ด๋ฅผ ์ ๋ ฅํจ์ ๋ฐ๋ผ ์๋์์ฑ ๊ฒ์์ด๊ฐ 100ms ์ด๋ด๋ก ๋ ธ์ถ
ํ์ ๊ฑด์: ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฒ์์ด์ ๋ํด 5๊ฐ์ ์๋์์ฑ ๊ฒ์์ด๋ฅผ ์ ๊ณต
์ฐ๊ด์ฑ: ์๋์์ฑ ์ถ๋ ฅ ๊ฒ์์ด๋ ์ฌ์ฉ์ ์ ๋ ฅ ๋จ์ด์ ์ฐ๊ด์ฑ์ด ์์ด์ผ ํจ
์ ๋ ฌ: ์์คํ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ ์ธ๊ธฐ๋ ๋ฐ ์์ ๋ชจ๋ธ์ ์ํด ์ ๋ ฌ๋์ด์ผ ํจ
๊ท๋ชจ ํ์ฅ์ฑ: ๋ง์ ํธ๋ํฝ์ ๊ฐ๋นํ ์ ์๋๋ก ํ์ฅ ๊ฐ๋ฅํ ์์คํ
๊ณ ๊ฐ์ฉ์ฑ: ์์คํ ์ผ๋ถ ์ฅ์ ๋ฐ์์์๋ ์๋น์ค ์ค๋จ์ด ์์ด์ผ ํจ
DAU: 1,000๋ง๋ช ์ผ๋ก ๊ฐ์
๊ฒ์์: ์ฌ์ฉ์๋น ๋งค์ผ 10๊ฑด์ ๊ฒ์์ ์ํํ๋ค๊ณ ๊ฐ์
๊ฒ์ ์ ๋ ฅ ๋ฐ์ดํฐ: ํ๊ท ์ ์ผ๋ก 4๊ฐ์ ๋จ์ด๋ก ๊ฒ์์ด๋ฅผ ์ ๋ ฅํ๋ค๊ณ ๊ฐ์
์ ๊ท ๊ฒ์ ์ฌ๋ถ: ๊ฒ์ ๊ฐ์ด๋ฐ 20% ์ ๋๋ฅผ ์ ๊ท ๊ฒ์์ด๋ผ ๊ฐ์
๊ฒ์์ด ์๋์์ฑ ์์คํ ์์ ์์ ๊ฐ์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํด์ผํ ๋, ์๋์ ๊ฐ์ด ์ถ์ ํ ์ ์๋ค.
๊ฒ์ ์ ๋ ฅ ๋ฐ์ดํฐ: ๊ฐ ๋จ์ด๋ฅผ ํ๊ท ์ ์ผ๋ก 5๊ธ์๋ก ๊ฐ์ ํ๋ฉด 4 * 5 = 20byte(๋ฌธ์ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ ASCII๋ก ๊ฐ์ )
๊ฒ์๋น ์๋ฒ ์์ฒญ ์: ๊ฒ์ 1ํ๋น 20๊ฑด(ํ ๊ธ์ ์ ๋ ฅํ ๋๋ง๋ค ๋งค๋ฒ ์์ฒญ)
์ด๋น ์๋ฒ ์์ฒญ ์(QPS): 1,000๋ง๋ช * 10๊ฒ ๊ฒ์ * 20๋ฒ ์์ฒญ / 24 / 3600 = 23,148
์ต๋ QPS: 23,148 * 2(๋ถํ๋ฅผ ๊ณ ๋ คํ์ฌ) = 46,296
๋ฐ์ดํฐ ์ ์ฅ๋: 1,000๋ง๋ช * 10๊ฒ ๊ฒ์ * 20byte * 20% = 400MB
์์คํ
์ค๊ณ
๊ฒ์์ด ์๋์์ฑ ์์คํ ์ ๊ตฌํํ๊ธฐ ์ํด ํฌ๊ฒ ๋ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์๋ค.
๋ฐ์ดํฐ ์์ง ์๋น์ค: ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ง์๋ฅผ ์์งํ๋ ์์คํ
์ง์ ์๋น์ค: ์ฃผ์ด์ง ์ง์์ ๋ค์ฏ ๊ฐ์ ์ธ๊ธฐ ๊ฒ์์ด๋ฅผ ์ ๋ ฌํ์ฌ ๋ฐํํ๋ ์์คํ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฃ๊ตฌ์กฐ - ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ์ ์์ง๋ง, ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ํจ์จ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ํธ๋ผ์ด๋ ๋ฌธ์์ด๋ค์ ๊ฐ๋ตํ๊ฒ ์ ์ฅํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ก ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋ค.
ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ
ํธ๋ฆฌ์ ๋ฃจํธ ๋ ธ๋๋ ๋น ๋ฌธ์์ด์ ๋ํ๋
๊ฐ ๋ ธ๋๋ ๊ธ์ ํ๋๋ฅผ ์ ์ฅํ๋ฉฐ, ํด๋น ๊ธ์ ๋ค์์ ๋ฑ์ฅํ ์ ์๋ ๊ธ์ ์(์ํ๋ฒณ์ ๊ฒฝ์ฐ 26๊ฐ)๋งํผ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์์
๊ฐ ํธ๋ฆฌ ๋ ธ๋๋ ํ๋์ ๋จ์ด ํน์ ์ ๋์ด ๋ฌธ์์ด์ ๋ํ๋
์ด๋ฌํ ํน์ง์ ๋ํด ์ด์ฉ ๋น๋๊ฐ ๋์ ๋จ์ด๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด ๋ ธ๋์ ๋น๋ ์ ๋ณด๋ฅผ ์ ์ฅํ ์๋ ์๋ค.
์ ์ฌ์ง ์ฒ๋ผ ํธ๋ฆฌ ํํ๋ก ์ ์ฅ๋๋ฉฐ, ์์ธํ ์ค๋ช ์ ์ํ ์ฉ์ด๋ฅผ ์ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
p: ์ ๋์ด(prefix)์ ๊ธธ์ด
n: ํธ๋ผ์ด ์์ ์๋ ๋ ธ๋ ๊ฐ์
c: ์ฃผ์ด์ง ๋ ธ๋์ ์์ ๋ ธ๋ ๊ฐ์
ํธ๋ผ์ด ๊ตฌ์กฐ๋ก ์๋์์ฑ์ ๊ตฌํํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
1
ํด๋น ์ ๋์ด๋ฅผ ํํํ๋ ๋ ธ๋ ํ์
O(p)
2
ํด๋น ๋ ธ๋๋ถํฐ ์์ํ๋ ํ์ ํธ๋ฆฌ๋ฅผ ํ์ํ์ฌ ๋ชจ๋ ์ ํจ ๋ ธ๋ ํ์
O(c)
3
์ ํจ ๋ ธ๋๋ค์ ์ ๋ ฌํ์ฌ ์ธ๊ธฐ์๋ ๊ฒ์์ด ํ์
O(c log c)
๋ง์ฝ 'tr' ์ ๋ ฅํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๊ฒ ๋๋ค.
์ ๋์ด ๋ ธ๋ 'tr' ์ฐพ์
ํด๋น ๋ ธ๋๋ถํฐ ์์ํ๋ ํ์ ํธ๋ฆฌ๋ฅผ ํ์ํ์ฌ ๋ชจ๋ ์ ํจ ๋ ธ๋ ํ์
tree: 10 / true: 35 / try: 29๊ฐ ์ ํจ ๋ ธ๋
์ ํจ ๋ ธ๋๋ฅผ ์ ๋ ฌ
true: 35 / try: 29 / tree: 10
์ด ์๊ณ ๋ฆฌ์ฆ์ ์ง๊ด์ ์ด์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ ์ ์ฒด ํธ๋ผ์ด๋ฅผ ๋ค ๊ฒ์ํด์ผ ํ๋ ์ผ์ด ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฐฉ์งํ ์ ์๋ค.
์ ๋์ด ์ต๋ ๊ธธ์ด ์ ํ: ์ฌ์ฉ์๊ฐ ๊ฒ์์ฐฝ์ ๊ธด ๊ฒ์์ด๋ฅผ ์ ๋ ฅํ๋ ์ผ์ด ๊ฑฐ์ ์์ผ๋ฏ๋ก, ์์ ์ ์ซ๊ฐ(์๋ฅผ ๋ค์ด 50)์ผ๋ก ์ ํํ์ฌ O(1) ์๊ฐ ๋ณต์ก๋๋ฅผ ์ ์ง
๋ ธ๋์ ์ธ๊ธฐ ๊ฒ์์ด ์บ์: ๊ฐ ๋ ธ๋์ k๊ฐ์ ์ธ๊ธฐ ๊ฒ์์ด๋ฅผ ์ ์ฅํ๋ฉด ํ์ ํธ๋ฆฌ๋ฅผ ํ์ํ๋ ์๊ฐ์ ์ค์ผ ์ ์์(์ด๋ฏธ ์บ์ฑ๋์ด ์๋ ๊ฒ์์ด๋ O(1) ์๊ฐ์ ๋ฐํ ๊ฐ๋ฅ)
๋ฐ์ดํฐ ์์ง ์๋น์ค
๋ฐ์ดํฐ ์์ง์ ์ค์๊ฐ์ผ๋ก ํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, ์๋ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์กด์ฌํ๋ค.
๋งค์ผ ์์ฒ๋ง ๊ฑด์ ๊ฒ์์ด์ ๋ํด ํธ๋ผ์ด๊ฐ ๊ฐฑ์ ๋๊ธฐ ๋๋ฌธ์ ๋ถํ๊ฐ ์ปค์ง
์ผ๋จ ํธ๋ผ์ด๊ฐ ๋ง๋ค์ด์ง๊ณ ๋๋ฉด ์ธ๊ธฐ ๊ฒ์์ด๋ ์์ฃผ ๋ฐ๋์ง ์์ ์์ฃผ ๊ฐฑ์ ํ ํ์๊ฐ ์์
์ค์๊ฐ ์์ง ๋์ ์ ๋ฐ์ดํฐ ๋ถ์ ์๋น์ค๋ ๋ก๊น ์๋น์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ , ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ์ดํฐ ๋ถ์ ์๋น์ค ๋ก๊ทธ: ์ฌ์ฉ์๊ฐ ๊ฒ์ํ ๊ฒ์์ด๋ฅผ ๋ก๊น
๋ก๊ทธ ์ทจํฉ ์๋ฒ: ์์ง๋ ๋ก๊ทธ๋ฅผ ์ทจํฉํ์ฌ ์ ์ฅ
์ทจํฉ๋ ๋ฐ์ดํฐ: ๊ฒ์์ด / ์์ง ์๊ฐ ๋ ์ง / ๊ฒ์ ํ์์ ํํ๋ก ์ ์ฅ
์์ ์๋ฒ: ์ทจํฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฝ์ด ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ํธ๋ผ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ
ํธ๋ผ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค: ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ ๊ฐ์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ํํ๋ก ๊ตฌํ ๊ฐ๋ฅ
๋ฌธ์ ์ ์ฅ์: ํธ๋ผ์ด๋ฅผ ์ง๋ ฌํํ์ฌ ์ ์ฅ
ํค-๊ฐ ์ ์ฅ์: ํธ๋ผ์ด์ ๋ณด๊ด๋ ๋ชจ๋ ์ ๋์ด๋ฅผ ํด์ ํ ์ด๋ธ ํค๋ก, ๊ฐ ํธ๋ผ์ด ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ผ๋ก ์ ์ฅ
ํธ๋ผ์ด ์บ์: ํธ๋ผ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํ์ฌ ์กฐํ ์ฑ๋ฅ์ ํฅ์(์ผ์ ์ฃผ๊ธฐ๋ก ํธ๋ผ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค๋ ์ท์ ๊ฐ์ ธ์ ๊ฐฑ์ )
์ง์ ์๋น์ค
์ง์ ์๋น์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์๋์ ์์๋ก ์งํํ ์ ์๋ค.
๊ฒ์ ์ง์๊ฐ ๋ก๋๋ฐธ๋ฐ์๋ก ์ ๋ฌ
๋ก๋๋ฐธ๋ฐ์๋ ์์ฒญ์ ์ง์ API ์๋ฒ๋ก ์ ๋ฌ
์ง์ API ์๋ฒ๋ ํธ๋ผ์ด ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ํด๋น ์์ฒญ์ ๋ํ ์๋์์ฑ ๊ฒ์์ด ์ ์ ์๋ต ๊ตฌ์ฑ
๋ฐ์ดํฐ๊ฐ ํธ๋ผ์ด ์บ์์ ์๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ํธ๋ผ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์ ํธ๋ผ์ด ์บ์์ ์ ์ฅ
์ถ๊ฐ์ ์ผ๋ก ์๋ ์ต์ ํ ๋ฐฉ์์ผ๋ก ์ฑ๋ฅ์ ํฅ์ํ ์ ์๋ค.
๋ธ๋ผ์ฐ์ ์บ์ฑ: ๋๋ถ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์๋์์ฑ ๊ฒ์์ด ์ ์ ๊ฒฐ๊ณผ๋ ์์ฃผ ๋ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์บ์ฑ์ ํตํด ์ฑ๋ฅ ํฅ์
๋ฐ์ดํฐ ์ํ๋ง: ๋ชจ๋ ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๋ก๊น ํ๋ฉด CPU ์์๊ณผ ์ ์ฅ ๊ณต๊ฐ์ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋๋ฏ๋ก, N๊ฐ์ ์์ฒญ์ค ํ๋๋ง ๋ก๊น ํ๋๋ก ์ํ๋งํ์ฌ ๋ก๊น
ํธ๋ผ์ด ์ฐ์ฐ
ํธ๋ผ์ด๋ ๊ฒ์์ด ์๋์์ฑ์ ํต์ฌ ์ปดํฌ๋ํธ๋ก, ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค.
ํธ๋ผ์ด ์์ฑ: ํธ๋ผ์ด ์์ฑ์ ๋ด๋นํ๋ ์๋ฒ๊ฐ ์์ฑํ๋ฉฐ, ๋ฐ์ดํฐ ๋ถ์ ์๋น์ค์ ๋ก๊ทธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ์ทจํฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ์์ฑ
ํธ๋ผ์ด ๊ฐฑ์ : ํธ๋ผ์ด๋ฅผ ๊ฐฑ์ ํ๋ ๋ฐ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ์กด์ฌ
๋งค์ฃผ ํ ๋ฒ ๊ฐฑ์ : ์๋ก์ด ํธ๋ผ์ด๋ฅผ ๋ง๋ ํ, ๊ธฐ์กด ํธ๋ผ์ด๋ฅผ ๋์ฒด
ํธ๋ผ์ด์ ๊ฐ ๋ ธ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๊ฐฑ์ : ๊ฐ ๋ ธ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๊ฐฑ์ (ํ๋์ ๋ ธ๋๊ฐ ๊ฐฑ์ ๋ ๋ ์์ ๋ ธ๋๋ค์ ๋ชจ๋ ๊ฐฑ์ ํด์ผํ๋ฏ๋ก, ํธ๋ผ์ด๊ฐ ์์ ๋ ๊ณ ๋ คํด๋ณผ ์ ์์)
๊ฒ์์ด ์ญ์ : ํธ๋ผ์ด ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ํํฐ ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ๋ถ์ ์ ํ ๊ฒ์์ด๋ฅผ ์ ๊ฑฐ(ํ์ค์ฑ/ํญ๋ ฅ์ /์ฑ์ ์ธ ๋จ์ด ๋ฑ)
์ ์ฅ์ ๊ท๋ชจ ํ์ฅ
ํธ๋ผ์ด์ ํฌ๊ธฐ๊ฐ ํ ์๋ฒ์ ๋ฃ๊ธฐ์ ๋๋ฌด ์ปค์ง๋ ๊ฒฝ์ฐ ์ค๋ฉ์ ํตํด ๊ท๋ชจ ํ์ฅ์ ํ ์ ์๋ค.
prefix ๊ธฐ๋ฐ์ผ๋ก ์ค๋ฉ('aa' - 'ag': 1๋ฒ ์ค๋, 'ah' - 'az': 2๋ฒ ์ค๋, ...)
๊ฐ prefix๋ฅผ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ์ฌ ์ค๋์ ์ ์ฅ
๊ฒ์์ด ๋์ ์ค๋ ๊ด๋ฆฌ์๋ฅผ ๋์ด ์ด๋ค ์ค๋์ ์ ์ฅ๋์ด ์๋์ง ํ์ธ
์ถ๊ฐ์ ์ธ ๊ณ ๋ ค์ฌํญ
๋ค๊ตญ์ด ์ง์: ํธ๋ผ์ด์ ์ ๋์ฝ๋ ๋ฌธ์๋ก ์ ์ฅํ์ฌ ๋ค๊ตญ์ด ์ง์
๊ตญ๊ฐ๋ณ ์ธ๊ธฐ ๊ฒ์์ด ์์ ์ง์: ๊ตญ๊ฐ๋ณ๋ก ๋ค๋ฅธ ํธ๋ผ์ด ์ฌ์ฉ ๋ฐ ํธ๋ผ์ด๋ฅผ CDN์ ์ ์ฅํ์ฌ ์ง์ฐ ์๊ฐ์ ์ค์
์ฐธ๊ณ ์๋ฃ
Last updated
Was this helpful?