Home > Backend Development > πŸ“š[Backend Development] Path Enumeration λ°©μ‹μ—μ„œ λŒ“κΈ€μ˜ 경둜(Path) κ²°μ • κ³Όμ •.

πŸ“š[Backend Development] Path Enumeration λ°©μ‹μ—μ„œ λŒ“κΈ€μ˜ 경둜(Path) κ²°μ • κ³Όμ •.
Backend Ddevelopment

β€œπŸ“š[Backend Development] Path Enumeration λ°©μ‹μ—μ„œ λŒ“κΈ€μ˜ 경둜(Path) κ²°μ • κ³Όμ •.”

πŸ“Œ1️⃣ μ‹ κ·œ λŒ“κΈ€μ˜ 경둜λ₯Ό κ²°μ •ν•˜λŠ” κ³Όμ •

  • Path Enumeration(경둜 μ—΄κ±°) 방식을 μ‚¬μš©ν•  λ•Œ, μƒˆλ‘œμš΄ λŒ“κΈ€μ΄ 좔가될 경우 ν•΄λ‹Ή λŒ“κΈ€μ˜ pathλ₯Ό μ–΄λ–»κ²Œ κ²°μ •ν•  것인지가 μ€‘μš”ν•©λ‹ˆλ‹€.
  • 이 κΈ€μ—μ„œλŠ” 이미 μ‘΄μž¬ν•˜λŠ” κ³„μΈ΅ν˜• λŒ“κΈ€ νŠΈλ¦¬μ—μ„œ μƒˆλ‘œμš΄ λŒ“κΈ€μ΄ 좔가될 λ•Œ, pathλ₯Ό μ–΄λ–»κ²Œ μƒμ„±ν•˜λŠ”μ§€μ— λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

πŸ—οΈ2️⃣ κΈ°μ‘΄ λŒ“κΈ€ ꡬ쑰 확인

βœ… κΈ°μ‘΄ λŒ“κΈ€ 트리

  • 초기 λŒ“κΈ€ κ΅¬μ‘°λŠ” μœ„μ™€ κ°™μŠ΅λ‹ˆλ‹€.
    • μ΅œμƒμœ„ λŒ“κΈ€ 00a0z μ•„λž˜μ— μ—¬λŸ¬ 개의 ν•˜μœ„ λŒ“κΈ€μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€.
    • 각 λŒ“κΈ€μ˜ path 계측 ꡬ쑰λ₯Ό 따라 λΆ€λͺ¨ λŒ“κΈ€μ˜ pathλ₯Ό μƒμ†λ°›μœΌλ©°, μƒˆλ‘œμš΄ λŒ“κΈ€μ΄ 좔가될 λ•Œλ§ˆλ‹€ μˆ«μžκ°€ μ¦κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ •λ ¬λ©λ‹ˆλ‹€.
    • κ°€μž₯ 졜근의 ν•˜μœ„ λŒ“κΈ€μ€ 00a0z 00002이며, 00a0z 00002의 ν•˜μœ„ λŒ“κΈ€λ‘œ 00a0z 00002 00000이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

πŸ—οΈ3️⃣ μ‹ κ·œ λŒ“κΈ€ μΆ”κ°€ μš”μ²­.

βœ… μƒˆλ‘œμš΄ λŒ“κΈ€ μš”μ²­

  • μ–΄λ–€ μ‚¬μš©μžκ°€ 00a0z λŒ“κΈ€μ˜ ν•˜μœ„μ— μƒˆλ‘œμš΄ λŒ“κΈ€μ„ μž‘μ„±ν•˜λ €κ³  ν•©λ‹ˆλ‹€.
  • ν•˜μ§€λ§Œ, ν˜„μž¬ 00a0z의 ν•˜μœ„ λŒ“κΈ€λ“€μ€ 이미 μ‘΄μž¬ν•˜κ³  μžˆμœΌλ―€λ‘œ, μƒˆλ‘œμš΄ λŒ“κΈ€μ΄ λ“€μ–΄κ°ˆ μ˜¬λ°”λ₯Έ pathλ₯Ό κ²°μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

πŸ—οΈ4️⃣ ν˜„μž¬ μ‘΄μž¬ν•˜λŠ” ν•˜μœ„ λŒ“κΈ€ 쀑 κ°€μž₯ 큰 path μ°ΎκΈ°

βœ… childrenTopPath μ°ΎκΈ°

  • μƒˆλ‘œμš΄ λŒ“κΈ€μ„ μΆ”κ°€ν•  λ•ŒλŠ”, ν˜„μž¬ μ‘΄μž¬ν•˜λŠ” ν•˜μœ„ λŒ“κΈ€ 쀑 κ°€μž₯ 큰 path(childrenTopPath)λ₯Ό μ°Ύμ•„μ„œ κ·Έ 값에 +1을 ν•˜μ—¬ μƒˆλ‘œμš΄ λŒ“κΈ€μ˜ pathλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
    • ν˜„μž¬ 00a0z의 ν•˜μœ„ λŒ“κΈ€ μ€‘μ—μ„œ κ°€μž₯ 큰 pathλŠ” 00a0z 00002μž…λ‹ˆλ‹€.
    • λ”°λΌμ„œ, μƒˆλ‘œμš΄ λŒ“κΈ€μ˜ pathλŠ” 00a0z 00003이 λ©λ‹ˆλ‹€.

πŸ—οΈ5️⃣ λͺ¨λ“  μžμ‹ λŒ“κΈ€μ„ κ³ λ €ν•œ descendantsTopPath μ°ΎκΈ°

  • ν•˜μ§€λ§Œ, λ‹¨μˆœνžˆ childrenTopPath만 κ³ λ €ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€. μžμ‹ λŒ“κΈ€μ΄ μžˆλŠ” 경우, κ°€μž₯ κΉŠμ€ depth에 μžˆλŠ” μžμ‹ λŒ“κΈ€κΉŒμ§€ κ³ λ €ν•˜μ—¬ pathλ₯Ό κ²°μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • descendantsTopPathλŠ” λΆ€λͺ¨ λŒ“κΈ€μ„ ν¬ν•¨ν•œ λͺ¨λ“  μžμ‹ λŒ“κΈ€ 쀑 κ°€μž₯ 큰 pathλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
    • 즉, 00a0z의 λͺ¨λ“  ν•˜μœ„ λŒ“κΈ€ 쀑 κ°€μž₯ κΉŠμ€ depthλ₯Ό κ°€μ§€λ©΄μ„œλ„ κ°€μž₯ 큰 pathλ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.

πŸ—οΈ6️⃣ descendantsTopPathμ—μ„œ μ‹ κ·œ λŒ“κΈ€μ˜ depth에 λ§žλŠ” childrenTopPath 계산

βœ… descendantsTopPathλ₯Ό 기반으둜 path 생성

  • κΈ°μ‘΄ λŒ“κΈ€ 쀑 κ°€μž₯ κΉŠμ€ depthλ₯Ό κ°€μ§€λŠ” descendantsTopPathλ₯Ό μ°Ύκ³ , μ‹ κ·œ λŒ“κΈ€μ΄ λ“€μ–΄κ°ˆ depth만큼의 pathλ₯Ό 남기고 λ‚˜λ¨Έμ§€λŠ” μž˜λΌλƒ…λ‹ˆλ‹€.
    • descendantsTopPath = 00a0z 00002 00000
    • ν•˜μ§€λ§Œ μ‹ κ·œ λŒ“κΈ€μ΄ λ“€μ–΄κ°ˆ depthλŠ” 2μ΄λ―€λ‘œ, (depth * 5)만큼의 문자만 λ‚¨κΉλ‹ˆλ‹€.
    • 결과적으둜 childrenTopPath = 00a0z 00002κ°€ λ©λ‹ˆλ‹€.

πŸ—οΈ7️⃣ μ΅œμ’…μ μœΌλ‘œ childrenTopPathλ₯Ό μ°Ύμ•„ μ‹ κ·œ λŒ“κΈ€μ˜ path 생성

βœ… μ΅œμ’… path κ²°μ •

  • 1. parentPathλ₯Ό κ°€μ§€λŠ” λͺ¨λ“  μžμ‹ λŒ“κΈ€μ„ 쑰회
  • 2. κ°€μž₯ 큰 descendantsTopPathλ₯Ό 찾음
  • 3. μ‹ κ·œ λŒ“κΈ€μ΄ λ“€μ–΄κ°ˆ depth만큼 pathλ₯Ό 남기고 μžλ¦„ β†’ childrenTopPath 생성
  • 4. λ§ˆμ§€λ§‰ μˆ«μžμ— +1을 ν•˜μ—¬ μ΅œμ’… path κ²°μ •
  • πŸ“Œ 결과적으둜, μƒˆλ‘œμš΄ λŒ“κΈ€μ˜ pathλŠ” 00a0z 00003이 λ©λ‹ˆλ‹€.

πŸš€8️⃣ κ²°λ‘ .

  • βœ… Path Enumeration 방식을 μ‚¬μš©ν•˜λ©΄, λŒ“κΈ€μ˜ 계측 ꡬ쑰λ₯Ό λͺ…ν™•ν•˜κ²Œ μœ μ§€ν•˜λ©΄μ„œλ„ μ •λ ¬ 및 쑰회λ₯Ό λΉ λ₯΄κ²Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • βœ… μ‹ κ·œ λŒ“κΈ€μ΄ 좔가될 λ•ŒλŠ”, ν˜„μž¬ μ‘΄μž¬ν•˜λŠ” ν•˜μœ„ λŒ“κΈ€ 쀑 κ°€μž₯ 큰 path(descendantsTopPath)λ₯Ό μ°Ύμ•„μ„œ μƒˆλ‘œμš΄ pathλ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.
  • βœ… 이 방식은 λ¬΄ν•œ Depth λŒ“κΈ€μ—μ„œλ„ μ •λ ¬ μˆœμ„œλ₯Ό μœ μ§€ν•˜λ©΄μ„œ λΉ λ₯΄κ²Œ λŒ“κΈ€μ„ μΆ”κ°€ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.