Router

λͺ¨λ“ˆμ— λΌμš°ν„° μ‚¬μš©ν•˜κΈ°

μ§§μ€μ£Όμ†Œ 적용 λŒ€μƒμ„ κΈ€μ“°κΈ° νŽ˜μ΄μ§€, νšŒμ›μ •λ³΄ 보기 νŽ˜μ΄μ§€ λ“±μœΌλ‘œ ν™•λŒ€ν•˜κ³ , μ„œλ“œνŒŒν‹° λͺ¨λ“ˆμ—μ„œλ„ μ›ν•˜λŠ” ν˜•νƒœμ˜ μ§§μ€μ£Όμ†Œλ₯Ό μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€. 일단 κ²Œμ‹œνŒ λ“± 일뢀 λͺ¨λ“ˆμ—λ§Œ μ μš©ν–ˆμ§€λ§Œ μ•žμœΌλ‘œ 적용 λŒ€μƒμ„ λ”μš± 늘렀갈 μ˜ˆμ •μž…λ‹ˆλ‹€.

κΈ°λ³Έ μ‚¬μš©λ²•

λΌμ΄λ―ΉμŠ€μ—μ„œ μ§€μ›ν•˜λŠ” λͺ¨λ“  μ§§μ€μ£Όμ†ŒλŠ” http://example.com/mid/λ‚˜λ¨Έμ§€/λΆ€λΆ„μ˜ ν˜•νƒœλ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. λΌμ΄λ―ΉμŠ€λŠ” λͺ¨λ“ˆ ꡬ쑰둜 이루어져 μžˆμœΌλ―€λ‘œ, midκ°€ μžˆμ–΄μ•Ό μ–΄λŠ λͺ¨λ“ˆμ—μ„œ μ •μ˜ν•œ μ§§μ€μ£Όμ†Œλ₯Ό μ‚¬μš©ν• μ§€ κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (midκ°€ μ—†λŠ” κ²½μš°μ—λ„ μ΅œμƒμœ„ μ£Όμ†Œλ₯Ό μ»¨νŠΈλ‘€ν•  수 μžˆλ„λ‘ ν•˜λŠ” κΈ°λŠ₯은 μ•„λž˜λ₯Ό μ°Έκ³ ν•˜μ„Έμš”.)

각 λͺ¨λ“ˆμ€ module.xmlμ—μ„œ μ•„λž˜μ™€ 같이 route 속성을 μ‚¬μš©ν•˜μ—¬ "λ‚˜λ¨Έμ§€ λΆ€λΆ„"의 μ§§μ€μ£Όμ†Œ ν˜•νƒœλ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<action name="dispBoardDelete" type="view" route="$document_srl/delete" />

μœ„μ˜ μ˜ˆμ œμ—μ„œ http://example.com/board/123/delete와 같은 μ£Όμ†Œλ₯Ό μš”μ²­ν•˜λ©΄ board에 ν•΄λ‹Ήν•˜λŠ” λͺ¨λ“ˆμ˜ dispBoardDelete μ•‘μ…˜μœΌλ‘œ μ „λ‹¬λ˜κ³ , $document_srl λ³€μˆ˜λŠ” ν‰μ†Œμ²˜λŸΌ Context::get()으둜 κ°€μ Έμ˜¬ 수 있으며 123μ΄λΌλŠ” 값이 λ“€μ–΄κ°‘λ‹ˆλ‹€. 즉, http://example.com/index.php?mid=board&act=dispBoardDelete&document_srl=123 μ£Όμ†Œλ₯Ό μš”μ²­ν•œ 것과 λ™μΌν•œ νš¨κ³Όμž…λ‹ˆλ‹€.

λ§ˆμ°¬κ°€μ§€λ‘œ, μ•„λž˜μ™€ 같은 μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ URL을 μƒμ„±ν•˜λ©΄

getUrl('', 'mid', 'board', 'act', 'dispBoardDelete', 'document_srl', 123)

ν•΄λ‹Ή μ•‘μ…˜μ˜ μ§§μ€μ£Όμ†Œ κ·œμΉ™μ„ μ‚¬μš©ν•˜μ—¬ http://example.com/board/123/deleteλΌλŠ” URL을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ§§μ€μ£Όμ†Œ ν˜•νƒœλŠ” μ •κ·œμ‹μœΌλ‘œ μ·¨κΈ‰λ˜μ§€λ§Œ, μœ„μ™€ 같이 λ‹¨μˆœν•œ 문법 외에 각쒅 특수기호λ₯Ό ν™œμš©ν•˜λŠ” μ •κ·œμ‹μ€ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μš”μ²­ν•œ μ£Όμ†Œλ₯Ό μ •κ·œμ‹μœΌλ‘œ λΆ„μ„ν•˜μ—¬ ν•΄λ‹Ή μ•‘μ…˜μœΌλ‘œ μ—°κ²°μ‹œμΌœ μ£ΌλŠ” 것이 μ „λΆ€κ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. URL을 생성할 λ•Œμ—λŠ” λ³€μˆ˜λ“€μ„ μ§§μ€μ£Όμ†Œ ν˜•νƒœμ— λΌμ›Œλ„£μ–΄ μ£ΌλŠ”λ°, λ³΅μž‘ν•œ μ •κ·œμ‹ 문법을 μ‚¬μš©ν•˜λ©΄ 이것이 정상 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ³ κΈ‰ μ‚¬μš©λ²•

속성이 μ•„λ‹Œ <route> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λ©΄ ν•˜λ‚˜μ˜ μ•‘μ…˜μ— 2개 μ΄μƒμ˜ μ§§μ€μ£Όμ†Œλ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ κ²Œμ‹œνŒ λͺ¨λ“ˆμ˜ dispBoardWrite μ•‘μ…˜μ€ μƒˆ 글을 μ“Έ λ•ŒλŠ” $document_srl이 μ—†κ³ , 글을 μˆ˜μ •ν•  λ•ŒλŠ” $document_srl이 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ•„λž˜μ™€ 같이 2개의 μ§§μ€μ£Όμ†Œλ₯Ό 각각 μ •μ˜ν•©λ‹ˆλ‹€.

<action name="dispBoardWrite" type="view">
    <route route="write" />
    <route route="$document_srl/edit" />
</action>

β€» 이런 ν˜•νƒœλ‘œ μ‚¬μš©ν•  경우 XML νƒœκ·Έ λ‹«λŠ” μœ„μΉ˜μ— μ£Όμ˜ν•˜μ„Έμš”.

μœ„μ˜ 예제처럼 ν•˜λ‚˜μ˜ μ•‘μ…˜μ— 2개 μ΄μƒμ˜ μ§§μ€μ£Όμ†Œκ°€ μ •μ˜λœ 경우, getUrl()을 μ‚¬μš©ν•  λ•Œ $document_srl λ³€μˆ˜λ₯Ό λ„£μœΌλ©΄ $document_srl/edit ν˜•νƒœμ˜ URL을 λ°˜ν™˜ν•˜κ³ , λ„£μ§€ μ•ŠμœΌλ©΄ write ν˜•νƒœμ˜ URL을 λ°˜ν™˜ν•©λ‹ˆλ‹€. 즉, λ™μΌν•œ μ•‘μ…˜μ΄λΌλ„ μ£Όμ–΄μ§„ λ³€μˆ˜λ“€κ³Ό κ°€μž₯ 잘 λ§€μΉ­λ˜λŠ” 것을 μžλ™μœΌλ‘œ μ„ νƒν•©λ‹ˆλ‹€.

μš°μ„ μˆœμœ„

μ—¬λŸ¬ μ§§μ€μ£Όμ†Œκ°€ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜κΉŒμ§€ λͺ¨λ‘ κ°™μ•„μ„œ μžλ™μœΌλ‘œ μ„ νƒν•˜κΈ° μ–΄λ €μš΄ 경우, priority 속성을 μ‚¬μš©ν•˜μ—¬ μš°μ„ μˆœμœ„λ₯Ό μ§€μ •ν•΄ μ£Όλ©΄ μš°μ„ μˆœμœ„κ°€ 높은 것을 μ„ νƒν•©λ‹ˆλ‹€.

<action name="dispBoardExample" type="view">
    <route route="downtown/$baby" priority="20" />
    <route route="hasta/la-vista/$baby" priority="10" />
</action>
λ‚¨λŠ” λ³€μˆ˜ μ²˜λ¦¬λ²•

λ³€μˆ˜κ°€ λ§Žμ•„μ„œ μ§§μ€μ£Όμ†Œμ— λ‹€ λ“€μ–΄κ°€μ§€ μ•ŠλŠ” κ²½μš°λ„ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚¨λŠ” λ³€μˆ˜λŠ” 쿼리슀트링으둜 λΆ™μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μœ„μ˜ μ˜ˆμ œμ— $comment_srlκΉŒμ§€ λ„£μ–΄μ„œ URL을 μƒμ„±ν•˜λ©΄ http://example.com/board/123/edit?comment_srl=456κ³Ό 같은 κ²°κ³Όκ°€ λ‚˜μ˜΅λ‹ˆλ‹€. 이런 μ£Όμ†Œλ‘œ μ ‘μ†ν•˜λ”λΌλ„ λ¬Έμ œλŠ” μ—†μŠ΅λ‹ˆλ‹€.

λ³€μˆ˜ νƒ€μž… μ§€μ •

각 λ³€μˆ˜μ— λ“€μ–΄κ°ˆ 수 μžˆλŠ” κ°’μ˜ νƒ€μž…μ„ μ œν•œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ•„λž˜μ™€ 같이 μ“°λ©΄

<action name="dispBoardMyAction" route="$name:alpha/$number:int" />

$nameμ—λŠ” 영문 μ•ŒνŒŒλ²³λ§Œ λ“€μ–΄κ°ˆ 수 있고, $numberμ—λŠ” (0보닀 ν¬κ±°λ‚˜ 같은) μ •μˆ˜λ§Œ λ“€μ–΄κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©ν•  수 μžˆλŠ” ν˜•νƒœλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • int: μ •μˆ˜ (0보닀 ν¬κ±°λ‚˜ 같은)
  • float: μ†Œμˆ˜ (0보닀 ν¬κ±°λ‚˜ 같은)
  • alpha: 영문 λŒ€μ†Œλ¬Έμž
  • alnum: 영문 λŒ€μ†Œλ¬Έμž 및 숫자
  • hex: 16μ§„μˆ˜ (0~9, a-f)
  • word: λ³€μˆ˜λͺ…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” κΈ€μž (영문 λŒ€μ†Œλ¬Έμž, 숫자, 언더바)
  • any: μŠ¬λž˜μ‹œ(/)λ₯Ό μ œμ™Έν•œ λͺ¨λ“  문자
  • delete: 아무 것도 λ§€μΉ­ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. getUrl()을 ν–ˆμ„ λ•Œ ν•΄λ‹Ή λ³€μˆ˜λŠ” μ‚­μ œλ©λ‹ˆλ‹€. μΏΌλ¦¬μŠ€νŠΈλ§μœΌλ‘œλ„ λ…ΈμΆœμ‹œν‚€κ³  μ‹Άμ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό URLμ—μ„œ μ‚­μ œν•˜λ €κ³  ν•  λ•Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œλ“€κ³Ό 같이 νƒ€μž…μ„ μ§€μ •ν•˜μ§€ μ•Šκ³  λ³€μˆ˜λͺ…λ§Œ λ„£μ–΄μ„œ μ§§μ€μ£Όμ†Œλ₯Ό μ •μ˜ν•œ 경우, _srl둜 λλ‚˜λŠ” λ³€μˆ˜λŠ” intκ°€ 기본값이며 κ·Έ λ°–μ˜ λ³€μˆ˜λŠ” anyκ°€ κΈ°λ³Έκ°’μž…λ‹ˆλ‹€. μ½”μ–΄μ—μ„œλ„ _srl둜 λλ‚˜λŠ” λ³€μˆ˜μ—λŠ” 숫자 μ΄μ™Έμ˜ 값을 ν—ˆμš©ν•˜μ§€ μ•Šκ³  μžˆμŠ΅λ‹ˆλ‹€.

404 μ—λŸ¬ 처리

midλŠ” λ§žλŠ”λ° λ‚˜λ¨Έμ§€ μ£Όμ†Œκ°€ μ–΄λ–€ μ§§μ€μ£Όμ†Œ ν˜•νƒœμ™€λ„ λ§€μΉ­λ˜μ§€ μ•ŠλŠ” 경우 404 Not Found μ—λŸ¬κ°€ ν‘œμ‹œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. μ½”μ–΄μ—μ„œ μΌκ΄„μ μœΌλ‘œ μ²˜λ¦¬ν•œλ‹€λ©΄ 각 λͺ¨λ“ˆμ˜ νŠΉμ„±μ— λ§žλŠ” μ—λŸ¬ 화면을 μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•˜κΈ° μ–΄λ €μš°λ―€λ‘œ, 각 λͺ¨λ“ˆμ—μ„œ 404 μ—λŸ¬ ν•Έλ“€λŸ¬λ₯Ό μ§€μ •ν•  수 μžˆλ„λ‘ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

<action name="dispBoardNotFound" type="view" error-handlers="404" />

μ΄λ ‡κ²Œ ν•˜λ©΄ μœ νš¨ν•˜μ§€ μ•Šμ€ μ§§μ€μ£Όμ†Œλ₯Ό μš”μ²­ν•œ 경우 dispBoardNotFound λ©”μ†Œλ“œκ°€ ν˜ΈμΆœλ©λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•˜κ±°λ‚˜ λ‹€λ₯Έ 곳으둜 λ¦¬λ‹€μ΄λ ‰νŠΈν•˜λŠ” λ“± 상황에 λ§žλŠ” 처리λ₯Ό ν•˜λ©΄ λ©λ‹ˆλ‹€. ν˜„μž¬λŠ” 404 μ—λŸ¬ ν•Έλ“€λŸ¬λ§Œ μ§€μ •ν•  수 μžˆμ§€λ§Œ, μ•žμœΌλ‘œλŠ” 403 μ—λŸ¬ ν•Έλ“€λŸ¬λ„ μ§€μ •ν•  수 μžˆλ„λ‘ ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

404 μ—λŸ¬ ν•Έλ“€λŸ¬λ₯Ό 잘 ν™œμš©ν•˜λ©΄ μΌμ’…μ˜ catch-all ν•¨μˆ˜λ‘œ ν™œμš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“ˆμ—μ„œ μ—λŸ¬ ν•Έλ“€λŸ¬λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•˜κ±°λ‚˜, mid 정보가 μ—†μ–΄μ„œ μ–΄λŠ λͺ¨λ“ˆμ„ ν˜ΈμΆœν•΄μ•Ό ν• μ§€ 찾을 수쑰차 μ—†λŠ” κ²½μš°μ—λŠ” μ½”μ–΄μ˜ 404 μ—λŸ¬ νŽ˜μ΄μ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

μ „μ—­ μ§§μ€μ£Όμ†Œ μ •μ˜

ν†΅ν•©κ²€μƒ‰μ²˜λŸΌ midκ°€ 없어도 μž‘λ™ν•˜λŠ” μ•‘μ…˜μ˜ 경우, global route둜 μ§€μ •ν•˜λ©΄ http://example.com/search와 같이 midκ°€ μ—†λŠ” μ£Όμ†Œμ—μ„œλ„ μ—°κ²°λ˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<action name="IS" type="view" global-route="true">
    <route route="search" />
</action>

이 κΈ°λŠ₯을 ν™œμš©ν•˜λ©΄ http://example.com/@μ•„μ΄λ””μ²˜λŸΌ κ°„λ‹¨ν•œ μ£Όμ†Œλ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ „μ—­ μ§§μ€μ£Όμ†Œλ₯Ό λ‚¨μš©ν•˜κ²Œ 되면 λ‹€λ₯Έ λͺ¨λ“ˆλ“€μ΄ μ‚¬μš©ν•˜λŠ” mid와 μΆ©λŒν•˜μ—¬ λ‚œκ°ν•œ 상황이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ½”μ–΄μ—μ„œλŠ” rss λ“± 기쑴에 μ§€μ›ν•˜λ˜ 것 μ™Έμ—λŠ” μ „μ—­ μ§§μ€μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ„ μ˜ˆμ •μ΄λ©°, μ„œλ“œνŒŒν‹° μžλ£Œμ—μ„œλ„ 가급적 midλ₯Ό μƒμ„±ν•˜κ³  κ·Έ λ’·λΆ€λΆ„λ§Œ μ»¨νŠΈλ‘€ν•˜λŠ” μ§§μ€μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜μ‹œκΈ°λ₯Ό 적극 ꢌμž₯ν•©λ‹ˆλ‹€.

기타

  1. μ•„νŒŒμΉ˜ μ‚¬μš©μžλŠ” .htaccess νŒŒμΌμ„ μ—…λ°μ΄νŠΈν•˜λ©΄ μƒˆλ‘œμš΄ ν˜•νƒœμ˜ μ§§μ€μ£Όμ†Œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. nginx μ‚¬μš©μžλŠ” μ„œλ²„ μ„€μ • νŒŒμΌμ„ ꡐ체해야 ν•©λ‹ˆλ‹€. μ„€μ • νŒŒμΌμ„ κ΅μ²΄ν•˜κΈ° μ „μ—λŠ” μƒˆ μ§§μ€μ£Όμ†Œκ°€ λͺ¨λ‘ 였λ₯˜λ₯Ό 뿜게 λ˜λ―€λ‘œ, ν˜Έν™˜μ„± μœ μ§€λ₯Ό μœ„ν•΄ μ§§μ€μ£Όμ†Œ μ‚¬μš© μ˜΅μ…˜μ„ 3λ‹¨κ³„λ‘œ κ΅¬λΆ„ν–ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ 1이 기본값이며 2λŠ” μ‚¬μš©μžκ°€ 직접 선택해야 ν™œμ„±ν™”λ©λ‹ˆλ‹€.
    • μ‚¬μš©ν•˜μ§€ μ•ŠμŒ (0)
    • XE와 ν˜Έν™˜λ˜λŠ” μ£Όμ†Œ ν˜•νƒœλ§Œ μ‚¬μš© (1)
    • λͺ¨λ“  μ£Όμ†Œ ν˜•νƒœλ₯Ό μ‚¬μš© (2)
  2. μ§§μ€μ£Όμ†Œλ₯Ό μ •μ˜ν•˜μ§€ μ•Šμ€ 경우 mid/act ν˜•νƒœμ˜ μ§§μ€μ£Όμ†Œκ°€ μž„μ˜λ‘œ μƒμ„±λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ κ²Œμ‹œνŒ 섀정화면에 ν•΄λ‹Ήν•˜λŠ”index.php?mid=board&act=dispBoardAdminBoardInfoλΌλŠ” μ£Όμ†ŒλŠ” board/dispBoardAdminBoardInfo둜 쀄어듀고, λ‚¨λŠ” λ³€μˆ˜λ“€μ€ 쿼리슀트링으둜 λΆ™μŠ΅λ‹ˆλ‹€.
  3. λ‹€λ₯Έ λͺ¨λ“ˆμ—μ„œ μ •μ˜ν•œ μ§§μ€μ£Όμ†Œλ„ 적용이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ index.php?mid=board&act=dispMemberLoginForm은 board/login으둜 λ³€ν™˜λ©λ‹ˆλ‹€. κ²Œμ‹œνŒ λͺ¨λ“ˆμ—λŠ” ν•΄λ‹Ή μ§§μ€μ£Όμ†Œκ°€ μ—†μ§€λ§Œ, νšŒμ› λͺ¨λ“ˆμ—μ„œ dispMemberLoginForm μ•‘μ…˜μ˜ μ§§μ€μ£Όμ†Œλ₯Ό login으둜 μ •μ˜ν–ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 단, λ‹€λ₯Έ λͺ¨λ“ˆμ—μ„œ λŒμ–΄λ‹€ 쓰도둝 ν—ˆμš©λœ (즉, standalone이 falseκ°€ μ•„λ‹Œ) μ•‘μ…˜λ§Œ μ΄λ ‡κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 기쑴에 거의 μ‚¬μš©λ˜μ§€ μ•Šλ˜ action forward κΈ°λŠ₯을 μž¬ν™œμš©ν•˜μ—¬, 이런 μ‹μœΌλ‘œ λŒμ–΄λ‹€ μ“Έ 수 μžˆλŠ” ν•¨μˆ˜λ“€ 쀑 μ§§μ€μ£Όμ†Œλ₯Ό μ •μ˜ν•œ 것은 λͺ¨λ‘ action forward에 μžλ™ λ“±λ‘λ˜λ„λ‘ λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“ˆ μ—…λ°μ΄νŠΈλ₯Ό ν΄λ¦­ν•˜λ©΄ λ©λ‹ˆλ‹€.
    • 이 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ 각 λͺ¨λ“ˆμ˜ module.xml을 νŒŒμ‹±ν•˜λŠ” κΈ°λŠ₯을 μ™„μ „νžˆ λ‹€μ‹œ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. SimpleXML을 μ‚¬μš©ν•˜μ—¬ κΈ°μ‘΄ 방식보닀 κ°„κ²°ν•˜κ³  μ•ˆμ •μ μ΄λ©°, μΊμ‹œλ„ ν™œμš©ν•˜λ„λ‘ λ³€κ²½ν•˜μ—¬ μ„±λŠ₯ ν–₯상 νš¨κ³Όκ°€ μžˆμ„ κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€.
μ°Έκ³ λ¬Έν—Œ