• ABOUT
  • PORTFOLIO
  • POSTS
  • GUESTBOOK

ยฉ 2025 BlueCool12 All rights reserved.

2025.09.12์ž๋ฃŒ๊ตฌ์กฐ

๐Ÿ”‘ ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table) ๊ฐœ๋…๊ณผ ์ถฉ๋Œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ •๋ฆฌ

1. ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด๋ž€? 

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ํ‚ค(Key)๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)์— ์ž…๋ ฅํ•˜์—ฌ ์–ป์€ ์ •์ˆ˜ ๊ฐ’์„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค.

๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ์ ‘๊ทผ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‰๊ท ์ ์œผ๋กœ ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์„ O(1) ์‹œ๊ฐ„์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

[๊ด€๋ จ ์ž๋ฃŒ๊ตฌ์กฐ]

  • Map
    ํ‚ค(Key)์™€ ๊ฐ’(Value)์˜ ์Œ์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ถ”์ƒ ์ž๋ฃŒํ˜•
  • Set
    ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ํŠน์ • ๊ฐ’์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ถ”์ƒ ์ž๋ฃŒํ˜•

์ด๋Ÿฌํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋  ๊ฒฝ์šฐ ํ‰๊ท ์ ์œผ๋กœ ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

๋‹จ ํ•ด์‹œ ์ถฉ๋Œ์ด ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์ตœ์•…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜๋Š” ๊ฒฝ์šฐ์—๋„ O(log n)์ด ๋  ์ˆ˜ ์žˆ๋‹ค.


2. ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

- ํ•ด์‹œ ํ•จ์ˆ˜ (Hash Function)

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ๊ฐ’(Key)์„ ๋ฐ›์•„ ์ •์ˆ˜ ํ˜•ํƒœ์˜ ํ•ด์‹œ๊ฐ’(Hash Value)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋‹ค.

์ข‹์€ ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ๋™์ผํ•œ ํ‚ค์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•œ ๋‹ค๋ฅธ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๋„๋ก ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํฌํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค.

ํ•˜์ง€๋งŒ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„์— ๋น„ํ•ด ํ•ด์‹œ๊ฐ’์˜ ๊ณต๊ฐ„์ด ์ œํ•œ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.


- ๋ฒ„ํ‚ท ์ธ๋ฑ์‹ฑ (Bucket Indexing) 

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ํ‚ค๋ฅผ ์ •์ˆ˜ ํ˜•ํƒœ์˜ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋ฟ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด์‹œ๊ฐ’์„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋ฉฐ ์ด๋ฅผ ๋ฒ„ํ‚ท ์ธ๋ฑ์‹ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

index = hash(key) % capacity

ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ์–ป์€ ์ •์ˆ˜๊ฐ’์„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ(capacity)๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ํ•ด์‹œ๊ฐ’์ด ์•„๋ฌด๋ฆฌ ํฐ ๊ฐ’์ด๋”๋ผ๋„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.


- ์ถฉ๋Œ ์ฒ˜๋ฆฌ (Collision Handling) 

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ๋งŽ์€ ํ‚ค๋ฅผ ์ œํ•œ๋œ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด ์ธ๋ฑ์Šค ๊ณต๊ฐ„์— ๋งคํ•‘ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ๋™์ผํ•œ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ์ถฉ๋Œ(Collision)์ด๋ผ๊ณ  ํ•œ๋‹ค.

"dog" -> hash = 42 -> index = 42 % 16 = 10
"god" -> hash = 58 -> index = 58 % 16 = 10 (์ถฉ๋Œ)

์œ„์™€ ๊ฐ™์ด ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ๋™์ผํ•œ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ถฉ๋Œ์„ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฎ์–ด์จ์ง€๊ฑฐ๋‚˜ ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ถฉ๋Œ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋А๋ƒ๊ฐ€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์„ ๊ฒฐ์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ๊ฐ€ ๋œ๋‹ค.


3. ํ•ด์‹œ ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

- ์ฒด์ด๋‹ (Chaining, ๋ถ„๋ฆฌ ์—ฐ๊ฒฐ๋ฒ•)

๊ฐ™์€ ์ธ๋ฑ์Šค์— ๋งคํ•‘๋œ ํ‚ค๋“ค์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(๋˜๋Š” ํŠธ๋ฆฌ) ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰ ๋ฐฐ์—ด์˜ ๊ฐ ๋ฒ„ํ‚ท์ด ํ•˜๋‚˜์˜ ์ฒด์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

bucket[10] -> [("dog", var1)] -> [("god", var2)] -> ...

๊ตฌํ˜„์ด ๋น„๊ต์  ๋‹จ์ˆœํ•˜๋ฉฐ ๋…ธ๋“œ ์—ฐ๊ฒฐ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œ ์—ฐ์‚ฐ์ด ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋˜ *๋กœ๋“œ ํŒฉํ„ฐ(load factor)๊ฐ€ 1์„ ๋„˜์–ด๋„ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


*๋กœ๋“œ ํŒฉํ„ฐ(Load Factor)๋ž€?
ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์–ผ๋งˆ๋‚˜ ์ฑ„์›Œ์ ธ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„์œจ
๊ณต์‹) ๋กœ๋“œ ํŒฉํ„ฐ ฮฑ = ์ €์žฅ๋œ ์›์†Œ ์ˆ˜ / ์ „์ฒด ๋ฒ„ํ‚ท ์ˆ˜


๋‹ค๋งŒ ๊ฐ ๋…ธ๋“œ๊ฐ€ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹œ ํšจ์œจ์ด ๋‚ฎ๋‹ค๋Š” ๋‹จ์ ๋„ ์กด์žฌํ•œ๋‹ค.


- ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ (Open Addressing, ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•)

์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ ๋นˆ ๋ฒ„ํ‚ท์„ ์ฐพ์•„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฐ์—ด ๋‚ด๋ถ€์— ์ง์ ‘ ์ €์žฅ๋œ๋‹ค.

bucket[10] -> ์ด๋ฏธ ์‚ฌ์šฉ์ค‘
bucket[11] ํ™•์ธ -> ๋น„์–ด์žˆ์Œ -> ์ €์žฅ

๋ณ„๋„์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋‚˜ ํฌ์ธํ„ฐ ๊ตฌ์กฐ๊ฐ€ ํ•„์š” ์—†๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฐ์—ด์— ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜๋ฏ€๋กœ ์บ์‹œ ํšจ์œจ์ด ๋†’๋‹ค.

์ฃผ์˜ํ•  ์ ์€ ์‚ญ์ œ ์‹œ ๊ฐ’์„ ๋‹จ์ˆœํžˆ ์ œ๊ฑฐํ•˜๋ฉด ํƒ์ƒ‰ ๊ฒฝ๋กœ๊ฐ€ ๋Š์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณดํ†ต ์‚ญ์ œ ํ‘œ์‹œ(tombstone) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ํ…Œ์ด๋ธ”์ด ์ฑ„์›Œ์งˆ์ˆ˜๋ก ๋นˆ ๋ฒ„ํ‚ท์„ ์ฐพ๊ธฐ ์œ„ํ•œ ํƒ์ƒ‰ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ ๋กœ๋“œ ํŒฉํ„ฐ๊ฐ€ ๋‚ฎ๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ์„ฑ๋Šฅ์ด ์•ˆ์ •์ ์ด๋‹ค.


4. ๋ฆฌ์‚ฌ์ด์ฆˆ (Resize) / ๋ฆฌํ•ด์‹œ (Rehash)

ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๋กœ๋“œ ํŒฉํ„ฐ๊ฐ€ ์„ค์ •๋œ ์ž„๊ณ„๊ฐ’(threshold)์„ ์ดˆ๊ณผํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋Š” ์ž‘์—…์ด ์ˆ˜ํ–‰๋œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

  1. ์ƒˆ๋กœ์šด ๋” ํฐ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค. (๋ณดํ†ต ๊ธฐ์กด์˜ 2๋ฐฐ ํฌ๊ธฐ)
  2. ๊ธฐ์กด์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋‹ค์‹œ ์‚ฝ์ž…ํ•œ๋‹ค.
  3. ์ด ๊ณผ์ •์—์„œ ํ•ด์‹œ๊ฐ’์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์—ฌ ์žฌ๋ฐฐ์น˜ํ•œ๋‹ค.

์ด ๊ณผ์ •์„ ๋ฆฌ์‚ฌ์ด์ฆˆ ๋˜๋Š” ๋ฆฌํ•ด์‹œ๋ผ๊ณ  ํ•œ๋‹ค.

๋ฆฌ์‚ฌ์ด์ฆˆ๋Š” ํ•œ ๋ฒˆ ์ˆ˜ํ–‰๋  ๋•Œ O(n)์˜ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ฒƒ์ด ์˜ˆ์ƒ๋˜๋Š” ๊ฒฝ์šฐ ์ดˆ๊ธฐ ์šฉ๋Ÿ‰์„ ์ถฉ๋ถ„ํžˆ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์— ์œ ๋ฆฌํ•˜๋‹ค.

์ด์ „ ๊ธ€
๐Ÿž ๊ฒ€์ƒ‰์—”์ง„ ํƒ€์ž„์•„์›ƒ ๋ฌธ์ œ ํ•ด๊ฒฐ - Sitemap ์„ฑ๋Šฅ ์ตœ์ ํ™”
๋‹ค์Œ ๊ธ€
๐Ÿค– Next.js MetadataRoute ์ •๋ณต: Robots, Sitemap, Manifest๊นŒ์ง€ ํ•œ ๋ฒˆ์—
์žฅ์‹์šฉ ๋กœ๊ณ