์ฐธ๊ณ ์˜์ƒ


1. ๋ฌธ์ œ์˜์‹: ์™œ ์œ ์ €๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ๊ฐ€ ์–ด๋ ค์šด๊ฐ€?

  • ์ˆ˜์‹ญ์–ต ๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค์—์„œ๋Š” ๋‹จ์ˆœํ•œ DB ์ฟผ๋ฆฌ๋กœ๋Š” ์„ฑ๋Šฅ, ์ง€์—ฐ, ์‹œ์Šคํ…œ ๋ถ€ํ•˜ ๋ฌธ์ œ ๋ฐœ์ƒ
  • ๋น ๋ฅด๊ณ  ํ™•์žฅ์„ฑ ์žˆ๋Š” ์ฒดํฌ๋ฅผ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ณ ๊ธ‰ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ด ํ•„์š”

2. ์ฃผ์š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ๊ธฐ์ˆ 

2.1 Redis Hashmap (๋ ˆ๋””์Šค ํ•ด์‹œ๋งต)
  • ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ๊ณ„์ธต์—์„œ ์‚ฌ์šฉ.
  • ํ•˜๋‚˜์˜ ํ‚ค ์•„๋ž˜ ์—ฌ๋Ÿฌ ํ•„๋“œ-๊ฐ’ ์Œ ์ €์žฅ ๊ฐ€๋Šฅ.
  • ๊ฐ ํ•„๋“œ๋Š” ์œ ์ €๋„ค์ž„, ๊ฐ’์€ userID๋‚˜ ํ”Œ๋ž˜๊ทธ ๋“ฑ.
  • ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์ฆ‰์‹œ ํ™•์ธ(์บ์‹œ ํžˆํŠธ ์‹œ DB ์ ‘๊ทผ ๋ถˆํ•„์š”).
  • ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„๋กœ ๋ชจ๋“  ์œ ์ €๋„ค์ž„์„ ์˜๊ตฌ ์ €์žฅ ๋ถˆ๊ฐ€.

๋น„์Šทํ•œ ์œ ์ €๋„ค์ž„์„ ์ถ”์ฒœํ•˜๊ฑฐ๋‚˜, ํŠน์ • ์ ‘๋‘์‚ฌ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ์œ ์ €๋„ค์ž„์„ ์ฐพ๋Š” ๊ธฐ๋Šฅ์€? โ†’ Trie

2.2 Trie (ํŠธ๋ผ์ด, Prefix Tree)
  • ๋ฌธ์ž์—ด์˜ ๊ณตํ†ต ์ ‘๋‘์‚ฌ๋ฅผ ๊ณต์œ ํ•˜๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ.
  • O(M) ์‹œ๊ฐ„ ๋ณต์žก๋„(M=๋ฌธ์ž์—ด ๊ธธ์ด)๋กœ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ(๋ฐ์ดํ„ฐ์…‹ ํฌ๊ธฐ์™€ ๋ฌด๊ด€).
  • ์ž๋™์™„์„ฑ, ์ ‘๋‘์‚ฌ ๊ธฐ๋ฐ˜ ์ถ”์ฒœ์— ์ ํ•ฉ.
  • ์ ‘๋‘์‚ฌ๊ฐ€ ๊ฒน์น˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ, ๊ฒน์น˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ ํผ.
  • Radix Trie ๋“ฑ ์••์ถ• ๋ฒ„์ „ ์‚ฌ์šฉ, ์ตœ๊ทผ/์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ์— ํ•œ์ •ํ•ด ์‚ฌ์šฉ.
2.3 B+ Tree (B+ํŠธ๋ฆฌ)
  • ์ •๋ ฌ๋œ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์…‹์—์„œ ํšจ์œจ์  ๊ฒ€์ƒ‰.
  • ๊ด€๊ณ„ํ˜•/NoSQL DB์˜ ์ธ๋ฑ์Šค ๊ตฌ์กฐ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ.
  • O(logN) ์‹œ๊ฐ„ ๋ณต์žก๋„, ์–•์€ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ˆ˜์‹ญ์–ต ๊ฐœ ๋ฐ์ดํ„ฐ๋„ ์ˆ˜์‹ญ ๋ฒˆ ์ด๋‚ด ํƒ์ƒ‰.
  • ๋ฒ”์œ„ ์ฟผ๋ฆฌ, ์•ŒํŒŒ๋ฒณ์ˆœ ์ถ”์ฒœ ๋“ฑ์— ์ ํ•ฉ.
  • ๋‹จ์ผ ๋จธ์‹  ํ•œ๊ณ„ โ†’ Google Spanner ๋“ฑ ๋ถ„์‚ฐ DB์—์„œ ์ˆ˜ํ‰ ํ™•์žฅ.
2.4 Bloom Filter (๋ธ”๋ฃธ ํ•„ํ„ฐ)
  • ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ , ํ™•๋ฅ ์  ์กด์žฌ ์—ฌ๋ถ€ ์ฒดํฌ.
  • ์—ฌ๋Ÿฌ ํ•ด์‹œํ•จ์ˆ˜์™€ ๋น„ํŠธ ๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑ.
  • โ€œ์—†์Œโ€์€ 100% ํ™•์‹ค, No false negative
  • โ€œ์žˆ์Œโ€์€ ์˜คํƒ(false positive) ๊ฐ€๋Šฅ.
    • Why? ์—ฌ๋Ÿฌ ๊ฐ’์ด ๊ฐ™์€ ๋น„ํŠธ ์นธ์„ ๊ณต์œ 
      • ํ•ด์‹œํ•จ์ˆ˜ ๊ฒฐ๊ณผ๊ฐ€ ๊ฒน์น˜๋ฉด, ์‹ค์ œ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ ๊ฐ’๋„ ๋ชจ๋“  ์นธ์ด 1์ด ๋  ์ˆ˜ ์žˆ์Œ
    • ์˜ˆ์‹œ
      • โ€œcatโ€์ถ”๊ฐ€ โ†’ 2, 5, 7 bit โ†’ 1
      • โ€œdogโ€์ถ”๊ฐ€ โ†’ 1, 5, 8 bit โ†’ 1
      • โ€œratโ€ ์ถ”๊ฐ€ โ†’ 2, 5, 8 bit โ†’ ๋ชจ๋‘ 1์ด๊ธฐ ๋•Œ๋ฌธ์— โ€œratโ€์ด ์žˆ๋‹ค๊ณ  ์ž˜๋ชป ํŒ๋‹จ
  • 1%์˜ ์˜คํƒ ํ—ˆ์šฉ ์‹œ 10์–ต ๊ฐœ ์œ ์ €๋„ค์ž„๋„ 1.2GB ๋‚ด์™ธ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ.
  • ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ DB ๋ถˆํ•„์š” ์ ‘๊ทผ ์ตœ์†Œํ™”์— ํ™œ์šฉ.
Data Structure ย Lookup Speedย  ย  ย Memory Usageย  ย  ย Supports Prefix/AutocompleteFalse PositivesBest Use Caseย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย 
Redis Hashmapย  ย Very Fastย  ย  ย  ย High (in-memory)ย No ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย Noย  ย  ย  ย  ย  ย  ย Exact match, recent lookups cacheย  ย 
Trie ย  ย  ย  ย  ย  ย Fast (O(M))ย  ย  ย Moderate~High ย  ย Yesย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย Noย  ย  ย  ย  ย  ย  ย Prefix search, autocomplete, suggest
B+ Treeย  ย  ย  ย  ย Fast (O(logN)) ย Moderateย  ย  ย  ย  ย No (but supports range)ย  ย  ย Noย  ย  ย  ย  ย  ย  ย Sorted/range queries, DB index ย  ย  ย 
Bloom Filter ย  ย Very Fastย  ย  ย  ย Very Lowย  ย  ย  ย  ย No ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย Yes ย  ย  ย  ย  ย  ย First-line filter, reduce DB hitsย  ย 

3. ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์˜ ์‹ค์ œ ์•„ํ‚คํ…์ฒ˜

1. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
  • ๊ธ€๋กœ๋ฒŒ(์˜ˆ: DNS, Anycast) โ†’ ์ง€์—ญ ๋ฐ์ดํ„ฐ์„ผํ„ฐ โ†’ ๋กœ์ปฌ(์˜ˆ: Nginx, AWS ELB)๋กœ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ.
2. Bloom Filter
  • ๊ฐ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋ธ”๋ฃธ ํ•„ํ„ฐ ๋ณต์ œ๋ณธ ์œ ์ง€, ์ฃผ๊ธฐ์  ๋™๊ธฐํ™”.
  • โ€œ์—†์Œโ€์ด๋ฉด ์ฆ‰์‹œ ์ข…๋ฃŒ, โ€œ์žˆ์Œโ€์ด๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ.
3. In-memory Cache (Redis/Memcached)
  • ์ตœ๊ทผ/์ž์ฃผ ์กฐํšŒ๋œ ์œ ์ €๋„ค์ž„์€ ์ดˆ๊ณ ์† ์‘๋‹ต.
  • ์บ์‹œ ๋ฏธ์Šค ์‹œ๋งŒ DB ์ ‘๊ทผ.
4. ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • Apache Cassandra, DynamoDB, Spanner ๋“ฑ.
  • ๋ฐ์ดํ„ฐ ์ƒค๋”ฉ, ์ผ๊ด€์„ฑ, ์ˆ˜ํ‰ ํ™•์žฅ์œผ๋กœ ์ˆ˜์‹ญ์–ต ๊ฑด๋„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ.
5. ์ตœ์ข… ์‘๋‹ต
  • ๊ฒฐ๊ณผ๋ฅผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜.

4. ๊ฐ ์ž๋ฃŒ๊ตฌ์กฐ ๋น„๊ต ์š”์•ฝ

์ž๋ฃŒ๊ตฌ์กฐ์žฅ์ ๋‹จ์ /ํŠธ๋ ˆ์ด๋“œ์˜คํ”„์ฃผ์š” ์šฉ๋„
Redis Hashmap์ดˆ๊ณ ์†, ์ •ํ™•ํ•œ ์ผ์น˜๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„, ์ „์ฒด ์ €์žฅ ๋ถˆ๊ฐ€์ตœ๊ทผ/์ž์ฃผ ์กฐํšŒ ์บ์‹œ
Trie์ ‘๋‘์‚ฌ ๊ฒ€์ƒ‰, ์ž๋™์™„์„ฑ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ, ์••์ถ• ํ•„์š”์ถ”์ฒœ, ์ž๋™์™„์„ฑ
B+ Tree์ •๋ ฌ/๋ฒ”์œ„ ์ฟผ๋ฆฌ, ํ™•์žฅ์„ฑ๋ถ„์‚ฐ ๊ด€๋ฆฌ ๋ณต์žก, ๋‹จ์ผ ๋จธ์‹  ํ•œ๊ณ„DB ์ธ๋ฑ์Šค, ์•ŒํŒŒ๋ฒณ์ˆœ ์ถ”์ฒœ
Bloom Filter๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ, ๋น ๋ฅธ ๋ถ€์ •ํ™•์ธ์˜คํƒ ๊ฐ€๋Šฅ, ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ €์žฅ X1์ฐจ ํ•„ํ„ฐ, DB ์ ‘๊ทผ ์ตœ์†Œํ™”

5. ๊ฒฐ๋ก 

  • ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค๋Š” ์—ฌ๋Ÿฌ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๊ณ„์ธต์ ์œผ๋กœ ์กฐํ•ฉํ•ด โ€œ์œ ์ €๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌโ€๋ฅผ ์ˆ˜ ms ๋‚ด์— ์ฒ˜๋ฆฌ.
  • Bloom Filter โ†’ In-memory Cache โ†’ ๋ถ„์‚ฐ DB ์ˆœ์œผ๋กœ ํšจ์œจ์  ํ•„ํ„ฐ๋ง.
  • ์ด ๋ชจ๋“  ์‹œ์Šคํ…œ์ด โ€œ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ์œ ์ €๋„ค์ž„โ€ ๋ฉ”์‹œ์ง€ ๋’ค์— ์ˆจ์–ด ์žˆ์Œ.