Home
>
Backend Development
>
π[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 λκΈ μ λ ¬ λ° μ‘°ν μ±λ₯μ μ΅μ νν μ μλ κ°μ₯ ν¨κ³Όμ μΈ λ°©λ² μ€ νλμ
λλ€.