Home > Backend Development > ๐Ÿ“š[Backend Development] ๋ฌดํ•œ Depth ๋Œ“๊ธ€ ์ •๋ ฌ ๊ตฌ์กฐ์˜ 'Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹'์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ“š[Backend Development] ๋ฌดํ•œ Depth ๋Œ“๊ธ€ ์ •๋ ฌ ๊ตฌ์กฐ์˜ 'Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹'์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?
Backend Ddevelopment

โ€œ๐Ÿ“š[Backend Development] ๋ฌดํ•œ Depth ๋Œ“๊ธ€ ์ •๋ ฌ ๊ตฌ์กฐ์˜ โ€˜Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹โ€™์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?โ€

โœ… ๋ฌดํ•œ Depth ๋Œ“๊ธ€ ์ •๋ ฌ ๊ตฌ์กฐ์˜ โ€œPath Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹โ€ ์„ค๋ช….

  • Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹์€ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๊ณ„์ธต์„ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜์—ฌ ์ •๋ ฌ ๋ฐ ๊ฒ€์ƒ‰์„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ์ด ๋ฐฉ์‹์€ ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋น ๋ฅด๊ฒŒ ์ •๋ ฌ ๋ฐ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

๐Ÿ—๏ธ1๏ธโƒฃ Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹์ด๋ž€?

  • Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹์—์„œ๋Š” ๊ฐ ๋Œ“๊ธ€์˜ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ๋ฌธ์ž์—ด ๊ฒฝ๋กœ(path)๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ฆ‰, ๊ฐ ๋Œ“๊ธ€์ด ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ์–ด๋–ค ์œ„์น˜์— ์žˆ๋Š”์ง€ ๊ฒฝ๋กœ๋ฅผ ๋ฏธ๋ฆฌ ๊ธฐ๋กํ•˜์—ฌ ์ •๋ ฌ ๋ฐ ๊ฒ€์ƒ‰์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ—๏ธ2๏ธโƒฃ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ.

  • Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€์ ์ธ path ์ปฌ๋Ÿผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
ํ•„๋“œ๋ช… ์„ค๋ช…
comment_id ๋Œ“๊ธ€์˜ ๊ณ ์œ  ID (PK)
parent_comment_id ๋ถ€๋ชจ ๋Œ“๊ธ€์˜ ID (์ตœ์ƒ์œ„ ๋Œ“๊ธ€์ด๋ฉด NULL)
article_id ํ•ด๋‹น ๋Œ“๊ธ€์ด ์†ํ•œ ๊ฒŒ์‹œ๊ธ€ ID
content ๋Œ“๊ธ€ ๋‚ด์šฉ
created_at ๋Œ“๊ธ€ ์ž‘์„ฑ ์‹œ๊ฐ„
path ๋Œ“๊ธ€์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด (์˜ˆ: โ€œ00001.00002.00005โ€
  • ๐Ÿ“Œ path ํ•„๋“œ๋Š” ๊ฐ ๋Œ“๊ธ€์ด ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ์–ด๋””์— ์†ํ•˜๋Š”์ง€ ๋‚˜ํƒ€๋ƒ„
  • ๐Ÿ“Œ ์ด ๊ฐ’์„ ํ™œ์šฉํ•˜๋ฉด ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ์ •๋ ฌ ๋ฐ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ด ์‰ฌ์›Œ์ง

๐Ÿ—๏ธ3๏ธโƒฃ Path ๊ฐ’ ์ €์žฅ ๋ฐฉ์‹.

  • path ๊ฐ’์€ ๋Œ“๊ธ€์ด ํŠธ๋ฆฌ์—์„œ ์–ด๋–ค ์œ„์น˜์— ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ๊ฐ comment_id๋ฅผ 5์ž๋ฆฌ ๋ฌธ์ž์—ด(00001, 00002 ๋“ฑ)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ Path ๊ฐ’ ์˜ˆ์‹œ

comment_id parent_comment_id path
1 NULL 00001
2 1 00001.00002
3 NULL 00003
4 2 00001.00002.00004
5 4 00001.00002.00004.00005
6 NULL 00006
  • ๐Ÿ“Œ ๊ฐ ๋Œ“๊ธ€์€ ๋ถ€๋ชจ path๋ฅผ ์ƒ์†๋ฐ›๊ณ , ์ž์‹ ์˜ ID๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ path๋ฅผ ์ƒ์„ฑ
  • ๐Ÿ“Œ ๋ถ€๋ชจ ๋Œ“๊ธ€์ด ์‚ญ์ œ๋˜๋”๋ผ๋„ path๋ฅผ ํ†ตํ•ด ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ์œ ์ง€ ๊ฐ€๋Šฅ

๐Ÿ—๏ธ4๏ธโƒฃ Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ)์„ ํ™œ์šฉํ•œ ์ •๋ ฌ.

  • Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ)์„ ํ™œ์šฉํ•˜๋ฉด ๊ฒฝ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๋ฉด ๋Œ“๊ธ€์„ ๊ณ„์ธต ๊ตฌ์กฐ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
SELECT * FROM comment
WHERE article_id = ?
ORDER BY path ASC;
  • ๐Ÿ“Œ ORDER BY path ASC๋ฅผ ์ ์šฉํ•˜๋ฉด ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ •๋ ฌ๋จ
  • ๐Ÿ“Œ ์ผ๋ฐ˜์ ์ธ ORDER BY parent_comment_id, comment_id๋ณด๋‹ค ํŠธ๋ฆฌ ๊ตฌ์กฐ ์ •๋ ฌ์ด ์ •ํ™•ํ•จ

๐Ÿ—๏ธ5๏ธโƒฃ Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹์œผ๋กœ ์กฐํšŒ

๐Ÿ“Œ ์˜ˆ์ œ ๋ฐ์ดํ„ฐ

comment_id parent_comment_id path
1 NULL 00001
2 1 00001.00002
3 NULL 00003
4 2 00001.00002.00004
5 4 000001.00002.00004.00005
6 NULL 00006

๐Ÿ“Œ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ.

SELECT * FROM comment
WHERE article_id = ?
ORDER BY path ASC;

โœ… ์ถœ๋ ฅ ๊ฒฐ๊ณผ

1. ๋Œ“๊ธ€1
    โ”œโ”€โ”€ ๋Œ“๊ธ€2
        โ”œโ”€โ”€ ๋Œ“๊ธ€4
            โ”œโ”€โ”€ ๋Œ“๊ธ€5
2. ๋Œ“๊ธ€3
3. ๋Œ“๊ธ€6
  • ๐Ÿ“Œ ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ์œ ์ง€๋˜๋ฉด์„œ ์ •๋ ฌ๋จ.

๐Ÿ—๏ธ6๏ธโƒฃ ํŠน์ • ๋Œ“๊ธ€์˜ ํ•˜์œ„ ๋Œ“๊ธ€ ์กฐํšŒ.

  • Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹์—์„œ๋Š” ํŠน์ • ๋Œ“๊ธ€์˜ ๋ชจ๋“  ํ•˜์œ„ ๋Œ“๊ธ€์„ ์†์‰ฝ๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
SELECT * FROM comment
WHERE path LIKE '00001.00002%'
ORDER BY path ASC;
  • ๐Ÿ“Œ ๊ฒฐ๊ณผ: 00001.00002๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ํ•˜์œ„ ๋Œ“๊ธ€์„ ์กฐํšŒ (๋Œ“๊ธ€2, ๋Œ“๊ธ€4, ๋Œ“๊ธ€5 ํฌํ•จ)

๐Ÿ—๏ธ7๏ธโƒฃ Path Enumeration ๋ฐฉ์‹์˜ ์žฅ์ ๊ณผ ๋‹จ์ .

โœ… ์žฅ์ .

์žฅ์  ์„ค๋ช…
ํŠธ๋ฆฌ ๊ตฌ์กฐ ์œ ์ง€๊ฐ€ ์‰ฌ์›€ ORDER BY path ASC๋งŒ์œผ๋กœ ๊ณ„์ธต ๊ตฌ์กฐ ์ •๋ ฌ ๊ฐ€๋Šฅ
ํ•˜์œ„ ๋Œ“๊ธ€ ์กฐํšŒ๊ฐ€ ๋น ๋ฆ„ LIKE โ€˜๊ฒฝ๋กœ%โ€™๋กœ ์†์‰ฝ๊ฒŒ ํ•˜์œ„ ๋Œ“๊ธ€ ์กฐํšŒ ๊ฐ€๋Šฅ
๋ถ€๋ชจ ๋Œ“๊ธ€ ์‚ญ์ œ ์‹œ ๊ณ„์ธต ๊ตฌ์กฐ ์œ ์ง€ ๊ฐ€๋Šฅ path๋ฅผ ํ†ตํ•ด ์ƒ์œ„ ๋Œ“๊ธ€์„ ์‹๋ณ„ ๊ฐ€๋Šฅ

โŒ ๋‹จ์ .

๋‹จ์  ์„ค๋ช…
๋Œ“๊ธ€ ์ด๋™ ์‹œ path ์—…๋ฐ์ดํŠธ ํ•„์š” ๋Œ“๊ธ€์„ ๋‹ค๋ฅธ ๋ถ€๋ชจ๋กœ ์ด๋™ํ•˜๋ฉด path๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ
path ๊ธธ์ด ์ฆ๊ฐ€ ๊ฐ€๋Šฅ์„ฑ ๋Œ“๊ธ€์ด ๊นŠ์–ด์งˆ์ˆ˜๋ก path ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Œ
INSERT ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ์„ฑ ์ƒˆ๋กœ์šด ๋Œ“๊ธ€ ์ถ”๊ฐ€ ์‹œ path๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•จ

๐Ÿ—๏ธ8๏ธโƒฃ Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹์—์„œ ๋Œ“๊ธ€ ์ €์žฅ ๊ทœ์น™.

  • ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด, ๊ฐ depth(๊ณ„์ธต)๋ณ„๋กœ 5๊ฐœ์˜ ๋ฌธ์ž์—ด๋กœ ๊ฒฝ๋กœ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • 1 depth๋Š” 5์ž๋ฆฌ ๋ฌธ์ž์—ด, 2 depth๋Š” 10์ž๋ฆฌ, 3 depth๋Š” 15์ž๋ฆฌ N depth๋Š” (N * 5)์ž๋ฆฌ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๋Œ“๊ธ€์˜ ๊ฒฝ๋กœ๋Š” ๋ชจ๋“  ์ƒ์œ„ ๋Œ“๊ธ€์—์„œ ํ•ด๋‹น ๋Œ“๊ธ€๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•˜๋„๋ก ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ๋กœ๋Š” ๋ถ€๋ชจ ๊ฒฝ๋กœ๋ฅผ ์ƒ์†ํ•˜๋ฉฐ, ๋…๋ฆฝ์ ์ด๋ฉด์„œ ์ˆœ์ฐจ์ ์ธ ํ˜•ํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ“Œ ์ด ๋ฐฉ์‹์€ ๋Œ“๊ธ€์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ , ์ •๋ ฌ ๋ฐ ๊ฒ€์ƒ‰์„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

๐Ÿ—๏ธ9๏ธโƒฃ Path Enumeration ๋ฐฉ์‹์˜ ๊ณ„์ธตํ˜• ๋Œ“๊ธ€ ๊ตฌ์กฐ ์˜ˆ์‹œ

  • ์ขŒ์ธก ๊ทธ๋ฆผ์˜ ๊ณ„์ธตํ˜• ๋Œ“๊ธ€ ๊ตฌ์กฐ๋Š”, ์šฐ์ธก ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ ์ •๋ณด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ๊ฒฝ๋กœ๋Š” ๋ถ€๋ชจ ๋Œ“๊ธ€์˜ ๊ฒฝ๋กœ๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉฐ, ๊ฐ ๋Œ“๊ธ€๋งˆ๋‹ค ๋…๋ฆฝ์ ์ด๊ณ  ์ˆœ์ฐจ์ ์ธ ๊ฒฝ๋กœ(๋ฌธ์ž์—ด ์ •๋ ฌ ๊ธฐ์ค€)๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ“Œ ์ด ๋ฐฉ์‹์€ ๋Œ“๊ธ€์„ ๊ณ„์ธต์ ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ , ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

๐Ÿ—๏ธ1๏ธโƒฃ0๏ธโƒฃ Path Enumeration ๋ฐฉ์‹์—์„œ ๊ฒฝ๋กœ ํ‘œํ˜„ ๋ฒ”์œ„ ํ™•์žฅ ๋ฐฉ๋ฒ•

  • ๊ฐ ๊ฒฝ๋กœ๋Š” depth(๊ณ„์ธต)๋งˆ๋‹ค 5์ž๋ฆฌ์˜ ๋ฌธ์ž๋กœ ํ‘œํ˜„๋˜๋ฏ€๋กœ, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜์—๋Š” ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์ˆซ์ž (0~9)๋กœ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ํ•œ depth๋‹น 10โต = 100,000๊ฐœ(00000 ~ 99999)์˜ ๊ฒฝ๋กœ๋งŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ˜๋“œ์‹œ ์ˆซ์ž(0~9)๋งŒ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • ๊ฐ ์ž๋ฆฟ์ˆ˜๋Š” 0~9(10๊ฐœ), A~Z(26๊ฐœ), a~z(26๊ฐœ) ์ด 62๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฌธ์ž์—ด์˜ ์ •๋ ฌ ์ˆœ์„œ๋Š” ์ˆซ์ž(0~9) โžž ๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ(A~Z) โžž ์†Œ๋ฌธ์ž ์•ŒํŒŒ๋ฒณ(a~z) ์ˆœ์„œ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ, ๊ฒฝ๋กœ๋Š” 00000๋ถ€ํ„ฐ zzzzz๊นŒ์ง€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ์ด ๋ฐฉ์‹์—์„œ๋Š” ํ•œ depth๋‹น 62โต = 16,132,832๊ฐœ์˜ ๊ฒฝ๋กœ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๐Ÿ“Œ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฒฝ๋กœ ํ‘œํ˜„ ๋ฒ”์œ„๋ฅผ ํ™•์žฅํ•˜๋ฉด, ๋” ๋งŽ์€ ๋Œ“๊ธ€์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋”์šฑ ์œ ์—ฐํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ ์ •๋ฆฌ.

  • โœ… Path Enumeration(๊ฒฝ๋กœ ์—ด๊ฑฐ) ๋ฐฉ์‹์€ ๋Œ“๊ธ€์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ฌธ์ž์—ด(path)๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
  • โœ… ORDER BY path ASC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ •๋ ฌ ๊ฐ€๋Šฅ
  • โœ… ํ•˜์œ„ ๋Œ“๊ธ€ ์กฐํšŒ ์‹œ LIKE โ€˜๊ฒฝ๋กœ%โ€™๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ
  • โœ… ๋ถ€๋ชจ ๋Œ“๊ธ€์ด ์‚ญ์ œ๋˜๋”๋ผ๋„ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์œ ๋ฆฌ
  • โœ… ๋Œ“๊ธ€ ์ด๋™์ด ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ path ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์กฐ์‹ฌํ•ด์•ผ ํ•จ
  • โœ… Path Enumeration ๋ฐฉ์‹์€ ๋ฌดํ•œ Depth ๋Œ“๊ธ€ ์ •๋ ฌ ๋ฐ ์กฐํšŒ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
  • โœ… ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ORDER BY path ASC๋งŒ์œผ๋กœ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.
  • โœ… ๊ฒฝ๋กœ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ง€๋Š” ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Base62์™€ ๊ฐ™์€ ๋ฐฉ์‹์„ ๊ณ ๋ คํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๐Ÿ“Œ ๋ฌดํ•œ Depth ๋Œ“๊ธ€ ์ •๋ ฌ ๋ฐ ์กฐํšŒ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.