๐Ÿ’ป [Theory] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค(index)

๐Ÿ’ป [Theory] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค(index)

์ด๋ฒˆ์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ธ๋ฑ์Šค(index)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค(index)๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ธ๋ฑ์Šค(์˜์–ด: index)๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ„์•ผ์— ์žˆ์–ด์„œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋™์ž‘์˜ ์†๋„๋ฅผ ๋†’์—ฌ์ฃผ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ผ์ปซ๋Š”๋‹ค.

์ธ๋ฑ์Šค๋ž€ ์ถ”๊ฐ€์ ์ธ ์“ฐ๊ธฐ ์ž‘์—…๊ณผ ์ €์žฅ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ฑ…์—์„œ ์›ํ•˜๋Š” ๋‚ด์šฉ์„ ์ฐพ๋Š”๋‹ค๊ณ  ํ•˜๋ฉด, ์ฑ…์˜ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•„ ๋ณด๋Š”๊ฒƒ์€ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฑ…์˜ ์ €์ž๋“ค์€ ์ฑ…์˜ ๋งจ ์•ž ๋˜๋Š” ๋งจ ๋’ค์— ์ƒ‰์ธ์„ ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ index ๋Š” ์ฑ…์˜ ์ƒ‰์ธ๊ณผ ๊ฐ™๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋„ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ํฌํ•จํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ณ  ์žˆ๋‹ค.

index

์ธ๋ฑ์Šค(index)์˜ ํ•„์š”์„ฑ?

๊ทธ๋Ÿผ ์ธ๋ฑ์Šค(index)์˜ ํ•„์š”์„ฑ์€ ๋ฌด์—‡์ผ๊นŒ?

์ธ๋ฑ์Šค์˜ ์˜๋ฏธ์™€ ๋ฐ€์ ‘ํ•˜๋‹ค. ๋ฐ”๋กœ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์™œ๋ƒํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์—ฐ์‚ฐ์€ ๊ฒ€์ƒ‰ ์—ฐ์‚ฐ์ด๋‹ค.

์ฆ‰, ๊ทธ๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ผ์ด ๊ฐ€์žฅ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋น ๋ฅธ ์กฐํšŒ๋ฅผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ ์€ ๋ฐ์ดํ„ฐ์—์„œ๋Š” ์ƒ๊ด€์ด ์—†๊ฒ ์ง€๋งŒ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์—์„œ ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ ํƒ์ƒ‰ํ•˜๋Š” Full Table Scan์€ ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ

๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ธ๋ฑ์Šค(index)์˜ ๊ด€๋ฆฌ

DBMS๋Š” index๋ฅผ ํ•ญ์ƒ ์ตœ์‹ ์œผ๋กœ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ด์•ผ ์›ํ•˜๋Š” ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๊ฐ€ ์ ์šฉ๋œ ์ปฌ๋Ÿผ์— INSERT, UPDATE, DELETE๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค๋ฉด ๊ฐ๊ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • INSERT : ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ
  • DELETE : ์‚ญ์ œํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•จ
  • UPDATE : ๋”ฑํžˆ UPDATE ๊ฐœ๋…์ด ์—†์Œ!!! ๊ธฐ์กด์˜ ์ธ๋ฑ์Šค๋ฅผ โ€˜์‚ฌ์šฉํ•˜์ง€ ์•Š์Œโ€™ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฐฑ์‹ ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ. (DELETE+INSERT)

์ธ๋ฑ์Šค(index)์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

์žฅ์ 

  • ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋Š” ์†๋„์™€ ๊ทธ์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  • ์ „๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • ์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด DB์˜ ์•ฝ 10%์— ํ•ด๋‹นํ•˜๋Š” ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.

  • ์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

  • ์ธ๋ฑ์Šค๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ์—ญํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • DML์— ์ทจ์•ฝ

๋งŒ์•ฝ CREATE, DELETE, UPDATE๊ฐ€ ๋นˆ๋ฒˆํ•œ ์†์„ฑ์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๊ฒŒ ๋˜๋ฉด ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋น„๋Œ€ํ•ด์ ธ์„œ ์„ฑ๋Šฅ์ด ์˜คํžˆ๋ ค ์ €ํ•˜๋˜๋Š” ์—ญํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” DELETE์™€ UPDATE ์—ฐ์‚ฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•ž์—์„œ ์„ค๋ช…ํ•œ๋Œ€๋กœ, UPDATE์™€ DELETE๋Š” ๊ธฐ์กด์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  โ€˜์‚ฌ์šฉํ•˜์ง€ ์•Š์Œโ€™ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค๊ณ  ํ•˜์˜€๋‹ค. ๋งŒ์•ฝ ์–ด๋–ค ํ…Œ์ด๋ธ”์— UPDATE์™€ DELETE๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒ๋œ๋‹ค๋ฉด ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” 10๋งŒ๊ฑด์ด์ง€๋งŒ ์ธ๋ฑ์Šค๋Š” 100๋งŒ ๊ฑด์ด ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜์–ด, SQL๋ฌธ ์ฒ˜๋ฆฌ ์‹œ ๋น„๋Œ€ํ•ด์ง„ ์ธ๋ฑ์Šค์— ์˜ํ•ด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

์ธ๋ฑ์Šค(index)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒฝ์šฐ

  • ๊ทœ๋ชจ๊ฐ€ ์ž‘์ง€ ์•Š์€ ํ…Œ์ด๋ธ”
  • INSERT, UPDATE, DELETE๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์ปฌ๋Ÿผ
  • JOIN์ด๋‚˜ WHERE ์ ˆ์ด ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ - ํŠน์ • ์กฐ๊ฑด๋ถ€ํ„ฐ ์Šค์บ”ํ•˜๋ฏ€๋กœ
  • ์ธ๋ฑ์Šค๋Š” ์ •๋ ฌ์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ORDER BY์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์— ์šฉ์ด
  • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ์€ ์ปฌ๋Ÿผ (== ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ)

์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋งŒํผ์ด๋‚˜ ์ƒ์„ฑ๋œ ์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค๋Š” ๋ฐ”๋กœ ์ œ๊ฑฐ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

์ธ๋ฑ์Šค(index)์˜ ๋Œ€ํ‘œ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ

์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”๊ณผ B+Tree ๊ฐ€ ์žˆ๋‹ค.

ํ•ด์‹œ ํ…Œ์ด๋ธ” (Hash Table)

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ (Key, Value)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ณ ์œ ํ•œ index(key) ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ทธ index์— ์ €์žฅ๋œ ๊ฐ’์„ ๊บผ๋‚ด์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค. ๊ณ ์œ ํ•œ index(key)๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๊บผ๋‚ด์˜ค๋ฏ€๋กœ O(1)์˜ ๋งค์šฐ ๋น ๋ฅธ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•˜์ง€๋งŒ DB ์ธ๋ฑ์Šค์—์„œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์ œํ•œ์ ์ธ๋ฐ, ๊ทธ๋Ÿฌํ•œ ์ด์œ ๋Š” ํ•ด์‹œ๊ฐ€ ๋“ฑํ˜ธ(=) ์—ฐ์‚ฐ์—๋งŒ ํŠนํ™”๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ๊ฐ’์ด 1์ด๋ผ๋„ ๋‹ฌ๋ผ์ง€๋ฉด ์™„์ „ํžˆ ๋‹ค๋ฅธ ํ•ด์‹œ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ํŠน์„ฑ์— ์˜ํ•ด

๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ(>, <)์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฒ€์ƒ‰์„ ์œ„ํ•ด์„œ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

์ฆ‰, ์˜ˆ๋ฅผ ๋“ค๋ฉด โ€œ๋‚˜๋Š”โ€์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ๋ฌธ์€ ์ธ๋ฑ์Šค์˜ ํ˜œํƒ์„ ์ „ํ˜€ ๋ฐ›์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ธ๋ฑ์Šค์—์„œ๋Š” B+Tree๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

B+Tree

B+Tree๋Š” DB์˜ ์ธ๋ฑ์Šค๋ฅผ ์œ„ํ•ด ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ B-Tree๋ฅผ ๊ฐœ์„ ์‹œํ‚จ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. B+Tree๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ(Value)๋ฅผ ์ €์žฅํ–ˆ๋˜ BTree์™€ ๋‹ค๋ฅธ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๋ฆฌํ”„๋…ธ๋“œ(๋ฐ์ดํ„ฐ๋…ธ๋“œ)๋งŒ ์ธ๋ฑ์Šค์™€ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ(Value)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‚˜๋จธ์ง€ ๋…ธ๋“œ(์ธ๋ฑ์Šค๋…ธ๋“œ)๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์ธ๋ฑ์Šค(Key)๋งŒ์„ ๊ฐ–๋Š”๋‹ค. ๋ฆฌํ”„๋…ธ๋“œ๋“ค์€ LinkedList๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ํฌ๊ธฐ๋Š” ์ธ๋ฑ์Šค ๋…ธ๋“œ์˜ ํฌ๊ธฐ์™€ ๊ฐ™์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์€ ๋ถ€๋“ฑํ˜ธ๋ฅผ ์ด์šฉํ•œ ์ˆœ์ฐจ ๊ฒ€์ƒ‰ ์—ฐ์‚ฐ์ด ์ž์ฃผ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ BTree์˜ ๋ฆฌํ”„๋…ธ๋“œ๋“ค์„ LinkedList๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ˆœ์ฐจ๊ฒ€์ƒ‰์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๋“ฑ BTree๋ฅผ ์ธ๋ฑ์Šค์— ๋งž๊ฒŒ ์ตœ์ ํ™”ํ•˜์˜€๋‹ค. (๋ฌผ๋ก  Best Case์— ๋Œ€ํ•ด ๋ฆฌํ”„๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€์ง€ ์•Š์•„๋„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” BTree์— ๋น„ํ•ด ๋ฌด์กฐ๊ฑด ๋ฆฌํ”„๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€์•ผํ•œ๋‹ค๋Š” ๋‹จ์ ๋„ ์žˆ๋‹ค.)

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋น„๋ก B+Tree๋Š” O(log2n) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–์ง€๋งŒ ํ•ด์‹œํ…Œ์ด๋ธ”๋ณด๋‹ค ์ธ๋ฑ์‹ฑ์— ๋”์šฑ ์ ํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๋‹ค.

๋

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ธ๋ฑ์Šค(index)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ™

Reference

https://mangkyu.tistory.com/96

Written on June 1, 2021