๐Ÿš€ Darkwood ๊ธฐ์‚ฌ ๊ฒŒ์‹œ์šฉ PHP MCP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ

๋ฐœํ–‰: (2026๋…„ 3์›” 2์ผ ์˜ค์ „ 05:09 GMT+9)
14 ๋ถ„ ์†Œ์š”
์›๋ฌธ: Dev.to

Source: Dev.to

๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ์€ ์ด๋ฏธ ํ…์ŠคํŠธ ์ƒ์„ฑ์— ์žˆ์–ด ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ ์•„์ง ๋ถ€์กฑํ•œ ๊ฒƒ์€ ์ด ์ƒ์„ฑ ๊ณผ์ •์„ ์ง„์ •ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค: ์ดˆ์•ˆ์„ ์ž‘์„ฑํ•˜๊ณ , ๊ฒ€ํ† ํ•˜๊ณ , ๊ต์ •ํ•˜๊ณ , ๊ฒŒ์‹œํ•˜๊ณ , AI ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ง๊ด€์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ.

๋ฐ”๋กœ ์—ฌ๊ธฐ์„œ MCP(Modelโ€‘Centered Programming) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฅ๋ฏธ๋กœ์›Œ์ง‘๋‹ˆ๋‹ค.

MCP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ค‘์š”ํ•œ ์ด์œ 

MCP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋” ์‹ค์šฉ์ ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค: ๋„๊ตฌ๊ฐ€ ์ž์ฒด ๋‚ด์žฅ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Š” ์ƒํ˜ธ์ž‘์šฉ ๋ชจ๋ธ์„ ํฌ๊ฒŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค:

  • ํ…์ŠคํŠธ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋Œ€์‹ , ๋„๊ตฌ๋Š” ์ด์ œ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์ „์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ž…๋ ฅ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ œ์‹œํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๋ฅผ ์ „์ฒด ํ๋ฆ„์— ๊ฑธ์ณ ์•ˆ๋‚ดํ•˜๊ณ , ์ถ”๊ฐ€ ๋„๊ตฌ ํ˜ธ์ถœ์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋„๊ตฌ๋Š” ๋‹จ์ˆœํ•œ ์›๊ฒฉ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์™„์ „ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ๋Š” ์ด ๋ชจ๋ธ์ด ๋‹จ์ˆœํ•œ ์ˆœ์ˆ˜ ํ…์ŠคํŠธ๋ณด๋‹ค ํ›จ์”ฌ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€: Darkwood ๋ธ”๋กœ๊ทธ ๊ธ€ ๊ฒŒ์‹œ

์ด MCP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Darkwood์— ๋ธ”๋กœ๊ทธ ๊ธ€์„ ๊ฒŒ์‹œํ•˜๋Š” ๊ณผ์ •์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—… ํ๋ฆ„์€ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  1. GenerateDraft โ€“ ์ฃผ์ œ๋‚˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ดˆ๊ธฐ ์ดˆ์•ˆ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. PublishDraft โ€“ ๊ฒŒ์‹œ ๊ณผ์ •์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Note: ์ดˆ์•ˆ์ด ์•„์ง ๋งŒ์กฑ์Šค๋Ÿฝ์ง€ ์•Š๋‹ค๋ฉด, ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ ๊ฒŒ์‹œ๋ฅผ ์‹œ๋„ํ•˜๊ธฐ ์ „์— ๋’ค๋กœ ๋Œ์•„๊ฐ€ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์žฌ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ˜๋ณต ๋ฃจํ”„๋Š” ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ดˆ์•ˆ์€ ์ข…์ข… ๋„ˆ๋ฌด ์กฐ์žกํ•˜๊ณ , ์ผ๋ฐ˜์ ์ด๋ฉฐ, ๊ธธ์ด๊ฐ€ ๊ธธ๊ฑฐ๋‚˜ ํŽธ์ง‘ ์˜๋„์™€ ๋งž์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

MCP ์„œ๋ฒ„, ํ™œ์šฉ ๋ฐฉ๋ฒ• ์—ฌ๋Ÿฌ ๊ฐ€์ง€

์„œ๋ฒ„๋Š” ๋‹ค์–‘ํ•œ ์ „์†ก ๋ฐฉ์‹์„ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

์ „์†ก ๋ฐฉ์‹์„ค๋ช…์ „ํ˜•์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€
Stdioํ˜ธ์ŠคํŠธ๊ฐ€ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํ‘œ์ค€ ์ž…๋ ฅ์„ ํ†ตํ•ด JSONโ€‘RPC ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉฐ ํ‘œ์ค€ ์ถœ๋ ฅ์„ ํ†ตํ•ด ์‘๋‹ต์„ ์ฝ์Šต๋‹ˆ๋‹ค.Claude Desktop ํ™•์žฅ, ๋กœ์ปฌ ํ†ตํ•ฉ, Claude Desktop ํŒจํ‚ค์ง•.
HTTP์„œ๋ฒ„๊ฐ€ HTTP API๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ „์šฉ ๋ฐ ์ง€์†์ ์ธ ํ”„๋กœ์„ธ์Šค(์˜ˆ: flow worker)์— ์˜ํ•ด ์ œ๊ณต๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ํ˜ธ์ŠคํŠธ, ๋กœ์ปฌ ํ…Œ์ŠคํŠธ, HTTP ์ œํ•œ์ด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ํŽธ๋ฆฌํ•œ ํ™˜๊ฒฝ.

์ฐธ๊ณ : MCP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฌํ•จ๋  ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค๋ฅธ JSONโ€‘RPC ์ฑ„๋„(๋ณดํ†ต postMessage)์„ ํ†ตํ•ด ํ˜ธ์ŠคํŠธ์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‘ ๋‹จ๊ณ„์˜ ํ†ต์‹ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค:

  • ํ˜ธ์ŠคํŠธ โ†” ์„œ๋ฒ„ via MCP,
  • UI ์ธํ„ฐํŽ˜์ด์Šค โ†” ํ˜ธ์ŠคํŠธ via postMessage.

MCP ์—ฐ๊ฒฐ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ

  1. ์ดˆ๊ธฐํ™” โ€“ ํ˜ธ์ŠคํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋””์Šค์ปค๋ฒ„๋ฆฌ โ€“ ํ˜ธ์ŠคํŠธ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ์™€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.
  3. ํ˜ธ์ถœ โ€“ ์‚ฌ์šฉ์ž๊ฐ€ ๋„๊ตฌ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉด ํ˜ธ์ŠคํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  4. UI ๋ฆฌ์†Œ์Šค โ€“ ๋„๊ตฌ์— ์ธํ„ฐํŽ˜์ด์Šค ๋ฆฌ์†Œ์Šค(ui://โ€ฆ)๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ํ˜ธ์ŠคํŠธ๊ฐ€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๊ฒฉ๋ฆฌ๋œ iframe์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  5. ์ƒํ˜ธ์ž‘์šฉ โ€“ MCP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•ด์ง‘๋‹ˆ๋‹ค: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ, ํ˜ธ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€ ์ž‘์—…์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

Darkwood ์ž‘์—… ํ๋ฆ„์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€(๋˜๋Š” ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€) ์ดˆ์•ˆ ์ƒ์„ฑ์—์„œ ๊ฒŒ์‹œ๋กœ ์ด๋™ํ•œ ๋’ค, ์ˆ˜์ • ๋ฃจํ”„๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ „์ฒด ๊ณผ์ •์ด MCP ์ธํ„ฐ๋ž™์…˜ ๋ชจ๋ธ์„ ๋– ๋‚˜์ง€ ์•Š๊ณ  ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜

๊ฐœ์š”

+-------------------+        +-------------------+
|   Hรดte MCP        |  |   Serveur PHP     |
| (client)          |        | (MCP server)      |
+-------------------+        +-------------------+
        ^                               ^
        |                               |
        | JSONโ€‘RPC (Stdio / HTTP)       |
        |                               |
        v                               v
+-------------------+        +-------------------+
|   Interface UI   |  |   Ressources UI   |
+-------------------+        +-------------------+

Un hรดte MCP se connecte au serveur PHP.
MCP ํ˜ธ์ŠคํŠธ๊ฐ€ PHP ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Cette sรฉparation permet de conserver une interface utilisateur portable sur les hรดtes compatibles tout en prรฉservant un contrat MCP propre cรดtรฉ serveur.
์ด ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ํœด๋Œ€ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์„œ๋ฒ„ ์ธก์—์„œ MCP ๊ณ„์•ฝ์„ ๊น”๋”ํ•˜๊ฒŒ ๋ณด์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์„ธ ์ „์†ก ๋ฐฉ์‹

Stdio

  • Idรฉal pour les extensions Claude Desktop.
    Claude Desktop ํ™•์žฅ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.
  • Lโ€™hรดte lance le serveur, รฉchange des messages JSONโ€‘RPC via stdin/stdout.
    ํ˜ธ์ŠคํŠธ๊ฐ€ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ  stdin/stdout์„ ํ†ตํ•ด JSONโ€‘RPC ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Simple, local et efficace lorsque le client gรจre les processus.
    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ๊ฐ„๋‹จํ•˜๊ณ  ๋กœ์ปฌ์ด๋ฉฐ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

HTTP

  • Utile pour les hรดtes orientรฉs navigateur, les tests locaux ou toute configuration oรน une limite HTTP est plus pratique.
    ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ํ˜ธ์ŠคํŠธ, ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ๋˜๋Š” HTTP ์ œํ•œ์ด ๋” ํŽธ๋ฆฌํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Deux modes dโ€™implรฉmentationโ€ฏ:
    1. Processus dรฉdiรฉ et persistant (ex.โ€ฏ: flow worker).
      ์ „์šฉ ์ง€์† ํ”„๋กœ์„ธ์Šค (์˜ˆ: flow worker).
    2. Serveur HTTP classique (ex.โ€ฏ: Symfony Server).
      ์ „ํ†ต์ ์ธ HTTP ์„œ๋ฒ„ (์˜ˆ: Symfony Server).

Importantโ€ฏ: ยซโ€ฏprend en charge HTTPโ€ฏยป ne signifie pas automatiquement ยซโ€ฏprend en charge le mรชme modรจle dโ€™exรฉcution partoutโ€ฏยป.
์ค‘์š”: โ€œHTTP๋ฅผ ์ง€์›ํ•œ๋‹คโ€๋Š” ๊ฒƒ์ด ์ž๋™์œผ๋กœ โ€œ๋ชจ๋“  ๊ณณ์—์„œ ๋™์ผํ•œ ์‹คํ–‰ ๋ชจ๋ธ์„ ์ง€์›ํ•œ๋‹คโ€๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

  • Avec Stdio ou un worker HTTP persistant, on peut envisager un processus persistant, ouvrant la voie ร  des fonctionnalitรฉs asynchrones, des boucles dโ€™รฉvรฉnements et une orchestration continue.
    Stdio ๋˜๋Š” ์ง€์† HTTP ์›Œ์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ง€์† ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋น„๋™๊ธฐ ๊ธฐ๋Šฅ, ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋ฐ ์ง€์†์ ์ธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Avec Symfony Server, chaque requรชte est traitรฉe dans un cycle HTTP synchroneโ€ฏ: plus simple ร  mettre en ล“uvre, mais lโ€™orchestration du workflow doit รชtre dรฉlรฉguรฉe (ex.โ€ฏ: couche Flow ou coordination externe).
    Symfony Server๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ฐ ์š”์ฒญ์ด ๋™๊ธฐ HTTP ์‚ฌ์ดํด์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค: ๊ตฌํ˜„์€ ๋” ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์›Œํฌํ”Œ๋กœ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์€ (์˜ˆ: Flow ๋ ˆ์ด์–ด ๋˜๋Š” ์™ธ๋ถ€ ์กฐ์ •)์œผ๋กœ ์œ„์ž„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ ํ๋ฆ„ ๊ด€๋ฆฌ

  1. ์ดˆ๊ธฐํ™” โ€“ ํ˜ธ์ŠคํŠธ๋Š” ์ „์†ก, ๋ Œ๋”๋ง ๋ฐ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ โ€“ Flow ๋ ˆ์ด์–ด๋Š” ์—ฌ๋Ÿฌ ์ž‘์—… ๋ฐ ์ƒํƒœ ์ „ํ™˜์ด ํฌํ•จ๋œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ ํ๋ฆ„์€ ์ข…์ข… ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž‘์—… ๋ฐ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ƒํƒœ ์ „ํ™˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค; Flow ๋ ˆ์ด์–ด๋Š” ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์กฐ์ •๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

MCP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ†ตํ•ฉ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋‹จ์ˆœ ํ…์ŠคํŠธ ์ƒ์„ฑ์„ ์ „์ฒด ์›Œํฌํ”Œ๋กœ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค: ์ž‘์„ฑ, ๊ฒ€ํ† , ์ถœํŒ ๋ฐ ๋ฐ˜๋ณต.
Darkwood ์ƒํ™ฉ์—์„œ ์ด๋Š” ๋‹ค์Œ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค:

  • ์ฒซ ๋ฒˆ์งธ ์ดˆ์•ˆ์„ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • MCP ํ™˜๊ฒฝ์„ ๋– ๋‚˜์ง€ ์•Š๊ณ  ์‰ฝ๊ฒŒ ๋ฐ˜๋ณต(์ˆ˜์ •, ๊ฒ€ํ† )ํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์ข… ์ฝ˜ํ…์ธ ๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ถœํŒํ•ฉ๋‹ˆ๋‹ค.

Stdio์™€ HTTP ์ „์†ก ๋ฐฉ์‹์„ ๋ช…ํ™•ํ•œ ์•„ํ‚คํ…์ฒ˜(ํ˜ธ์ŠคํŠธ โ†” ์„œ๋ฒ„ โ†” UI)์™€ ๊ฒฐํ•ฉํ•จ์œผ๋กœ์จ, ๊ฐœ๋ฐœ์ž๋Š” ํ’๋ถ€ํ•˜๊ณ  ๋ฐ˜์‘์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ ์‰ฝ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํŽธ์ง‘ ๊ฒฝํ—˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์„ค๊ณ„๊ฐ€ ์ถœํŒ ์›Œํฌํ”Œ๋กœ์— ํšจ๊ณผ์ ์ธ๊ฐ€?

๋‹จ์ˆœํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋„ ์•„๋‹ˆ๊ณ , ์™„์ „ํ•œ ๋ฐฑ์˜คํ”ผ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ์•„๋‹™๋‹ˆ๋‹ค.
์ƒํƒœ์™€ ์˜์‚ฌ๊ฒฐ์ •์„ ๊ด€๋ฆฌํ•  ์ถฉ๋ถ„ํ•œ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉด์„œ๋„, AI์™€์˜ ๋Œ€ํ™”๋กœ ํŠธ๋ฆฌ๊ฑฐ๋  ์ˆ˜ ์žˆ์„ ๋งŒํผ ๊ฐ€๋ฒผ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”๋กœ MCP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—ฌ๊ธฐ์„œ ์™„๋ฒฝํ•˜๊ฒŒ ๋งž๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๊ฐ ๊ณ„์ธต์˜ ์—ญํ• 

  • ๋„๊ตฌ ์ธํ„ฐํŽ˜์ด์Šค โ€“ ๋ชจ๋ธ์— ์ƒํ˜ธ์ž‘์šฉ ํ‘œ๋ฉด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค โ€“ ์‚ฌ์šฉ์ž ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์›Œํฌํ”Œ๋กœ์˜ ์ œ์–ด๋œ ๋ทฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ํ”Œ๋กœ์šฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ โ€“ ์‹œ์Šคํ…œ์ด ๋‹ค๋‹จ๊ณ„ ์ „ํ™˜์„ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ด ์กฐํ•ฉ์ด ํšจ๊ณผ์ ์ธ ์ด์œ ๋Š” ๊ฐ ๊ณ„์ธต์ด ๋ช…ํ™•ํ•œ ๋ชฉ์ ์— ์ง‘์ค‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค:

  • ๋ชจ๋ธ์ด ์–ธ์ œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ณ ,
  • ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‹จ์ˆœํžˆ ๋กœ์ปฌ ํ”„๋กœํ† ํƒ€์ž…์ด๋‚˜ ๋ธŒ๋ผ์šฐ์ € ๋ฐ๋ชจ์— ๊ทธ์น˜์ง€ ์•Š๊ณ ; Claude์— ์„ค์น˜๋˜์–ด ์‹ค์ œ ๋„๊ตฌ ํ†ตํ•ฉ์œผ๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ

  1. ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๋งค๋‹ˆํŽ˜์ŠคํŠธ โ€“ Claude๊ฐ€ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ”„๋กœํ† ํƒ€์ž…์—์„œ ์‹ค์ œ ํŽธ์ง‘ ๋„๊ตฌ๋กœ โ€“ ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ ํŽธ์ง‘ ๋„๊ตฌ๋ฅผ ์œ„ํ•œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:
    • ์ดˆ์•ˆ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋„๊ตฌ,
    • ์ด ๊ตฌ์กฐ๊ฐ€ ๋งˆ๋ จ๋˜๋ฉด ์ž‘์—… ํ๋ฆ„ ๊ฐœ์„ ์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค:
      • ์ƒ์„ฑ ํ’ˆ์งˆ ์ตœ์ ํ™”,
      • ์ถœํŒ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐ•ํ™”,
      • ๊ฒ€์ฆ ์ถ”๊ฐ€,
      • ์‹ค์ œ CMS ํ†ตํ•ฉ.

ํ˜ธ์ŠคํŒ… ์ œ๊ณต์ž, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ์„œ๋ฒ„ ๊ฐ„์˜ ๊ณ„์•ฝ์€ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์˜คํ”ˆ ์†Œ์Šค

https://github.com/darkwood-com/darkwood-publish-article-mcp-apps

๊ฒฐ๋ก 

Darkwood์˜ ๊ฒฝ์šฐ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์ ์€ PHP๊ฐ€ MCP์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,
PHP MCP ์„œ๋ฒ„๊ฐ€ ์ด์ œ AI ํด๋ผ์ด์–ธํŠธ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ž‘์€ ํŽธ์ง‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฑ์—”๋“œ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์ด๋•Œ:

  • ๋„๊ตฌ์˜ ์˜๋ฏธ๋ก ,
  • ํ†ตํ•ฉ๋œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค

๋ฅผ ๋™์‹œ์— ์ œ๊ณตํ•œ๋‹ค.

์ด๋Š” โ€œ๋ชจ๋ธ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹คโ€๋Š” ํ†ตํ•ฉ์„ โ€œ๋ชจ๋ธ์ด ์ œ์–ด๋œ ์ถœํŒ ์›Œํฌํ”Œ๋กœ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋‹คโ€๋Š” ์ˆ˜์ค€์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฐ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ํ›จ์”ฌ ๋” ์œ ์šฉํ•œ ์˜์—ญ์ด๋‹ค.

์ถœ์ฒ˜

  • MCP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋น ๋ฅธ ์‹œ์ž‘ โ€“ README.md
  • phpโ€‘mcpโ€‘apps์˜ MVP ์•„ํ‚คํ…์ฒ˜ โ€“ php-mcp-apps-mvp-architecture.md
0 ์กฐํšŒ
Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

์™œ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์˜์‚ฌ๊ฒฐ์ • ์‹œ์Šคํ…œ์ด ๋˜๊ณ  ์žˆ๋Š”๊ฐ€

๊ตฌํ˜• ๋ชจ๋ธ: Software as Deterministic Logic ์ „ํ†ต์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํŒจํ„ด์„ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค: - ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ทœ์น™์„ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. - ์ž…๋ ฅ์ด logic์„ ํŠธ๋ฆฌ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์…‹์—์„œ Laravel Eloquent ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ•ด๊ฒฐ

๋ฌธ์ œ: ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์…‹์„ ์ฒ˜๋ฆฌํ•  ๋•Œ, Eloquent ์†์„ฑ์„ ํ†ตํ•ด ๊ด€๊ณ„์— ์ ‘๊ทผํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๊ณ„์† ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ชจ๋ธ ์ธ์Šคํ„ด์Šค๋Š” ๋กœ๋“œ๋œ ๊ด€๊ณ„๋ฅผ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค.

LLM์— ์ •ํ™•ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•˜๋Š” CLI๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค โ€” MCP ์„œ๋ฒ„๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค

๋ฌธ์ œ: Next.js 15๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  AI ์–ด์‹œ์Šคํ„ดํŠธ์—๊ฒŒ API ๋ผ์šฐํŠธ๋ฅผ ์ž‘์„ฑํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด AI๋Š” Next.js 12์˜ Pages Router ํŒจํ„ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ Rโ€ฆ