--- id: execution-model-inversion-guide---comfyui title: "Execution Model Inversion Guide - ComfyUI" category: "10_Wiki/Topics" status: "draft" verification_status: "conceptual" canonical_id: "" aliases: [] duplicate_of: "" source_trust_level: "B" confidence_score: 0.8 created_at: 2026-05-20 updated_at: 2026-05-20 review_reason: "" merge_history: [] tags: ["web", "wikify"] raw_sources: ["https://docs.comfy.org/development/comfyui-server/execution_model_inversion_guide"] applied_in: [] github_commit: "" --- # [[Execution Model Inversion Guide - Com๋ฎฌUI]] ## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) PR #2666์„ ํ†ตํ•ด ์‹คํ–‰ ๋ชจ๋ธ์ด ๊ธฐ์กด์˜ ์—ญ๋ฐฉํ–ฅ ์žฌ๊ท€ ๋ชจ๋ธ์—์„œ ์ˆœ๋ฐฉํ–ฅ ์œ„์ƒ ์ •๋ ฌ(front-to-back topological sort) ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ๋จ์— ๋”ฐ๋ฅธ ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ์ž์šฉ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค. ## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) * **์‹คํ–‰ ๋ชจ๋ธ ์ „ํ™˜**: [[PR #2666]]์„ ํ†ตํ•ด ์‹คํ–‰ ๋ชจ๋ธ์ด back-to-front recursive model์—์„œ front-to-back topological sort๋กœ ๋ฐ˜์ „๋˜์—ˆ์Šต๋‹ˆ๋‹ค. * **์„ ํƒ์  ์ž…๋ ฅ ๊ฒ€์ฆ (Optional Input Validation)**: ๊ธฐ์กด์—๋Š” "required" ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฒ€์ฆ์ด ์ด๋ฃจ์–ด์กŒ์œผ๋‚˜, ์ด์ œ๋Š” "optional" ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ๊ฒ€์ฆ ๊ทœ์น™๊ณผ ๋Œ€์‘ ๋ฐฉ์•ˆ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. * **์‹คํ–‰ ์ˆœ์„œ์˜ ๋น„๊ฒฐ์ •์„ฑ (Execution Order)**: ์‹คํ–‰ ์ˆœ์„œ๋Š” ๋…ธ๋“œ์˜ ID๋‚˜ ์บ์‹œ๋œ ๊ฐ’์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ ์™ธ์˜ ์š”์†Œ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. * **์ง€์—ฐ ํ‰๊ฐ€ (Lazy Evaluation)**: ์ž…๋ ฅ๊ฐ’์ด ํ•„์š”ํ•œ ์‹œ์ ๊นŒ์ง€ ํ‰๊ฐ€๋ฅผ ๋ฏธ๋ฃจ๋Š” ๊ธฐ๋Šฅ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ## ๐Ÿ“Œ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) * **Monkey Patching์˜ ์œ„ํ—˜์„ฑ**: ์‹คํ–‰ ๋ชจ๋ธ์„ [[Monkey Patching]]ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ƒˆ๋กœ์šด ๋ชจ๋ธ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. * **๊ฒ€์ฆ ์‹คํŒจ ๋Œ€์‘ ์ „๋žต**: ์ปค์Šคํ…€ ๋…ธ๋“œ ์ž‘์„ฑ ์‹œ ๊ฒ€์ฆ ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด `VALIDATE_INPUTS` ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(์˜ˆ: ๋ฆฌ์ŠคํŠธ ๋Œ€์‹  ๋”•์…”๊ณ„ ์‚ฌ์šฉ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. * **ํ™•์žฅ์„ฑ (Node Expansion)**: ๋Ÿฐํƒ€์ž„์— ๋…ธ๋“œ๊ฐ€ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๋กœ ํ™•์žฅ๋˜์–ด ๋ฃจํ”„ ๊ตฌํ˜„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) ### 1. ์ž…๋ ฅ ๊ฒ€์ฆ ์˜ค๋ฅ˜ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (Optional Input Validation) ์ปค์Šคํ…€ ๋…ธ๋“œ ์ž‘์„ฑ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ฆ ์‹คํŒจ ์‚ฌ๋ก€์™€ ๊ถŒ์žฅ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. | ๋ฐœ์ƒ ์›์ธ | ์ƒ์„ธ ๋‚ด์šฉ | ๊ถŒ์žฅ ์†”๋ฃจ์…˜/๋Œ€์‘ | | :--- | :--- | :--- | | **์˜ˆ์•ฝ๋œ ์ถ”๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ ์˜ค์šฉ** | ๋น„๊ต ๋ถˆ๊ฐ€๋Šฅํ•œ ํƒ€์ž…(์˜ˆ: ๋”•์…”๋„ˆ๋ฆฌ)์— `min`, `max` ๊ฐ™์€ ์˜ˆ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉ | `uiMin`, `uiMax`์™€ ๊ฐ™์€ ๋น„์˜ˆ์•ฝ ํ‚ค๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์‚ฌ์šฉ | | **๋ณตํ•ฉ ํƒ€์ž… (Composite Types)** | `CUSTOM_A, CUSTOM_B`์™€ ๊ฐ™์€ ํ˜•ํƒœ์˜ ์ถœ๋ ฅ/์ž…๋ ฅ ์‚ฌ์šฉ ์‹œ ๊ฒ€์ฆ ๋ฌธ์ œ ๋ฐœ์ƒ | ์ถœ๋ ฅ ์‹œ์—๋Š” `MakeSmartType`๊ณผ ๊ฐ™์€ ๋ž˜ํผ(Wrapper)๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ž…๋ ฅ ์‹œ์—๋Š” `VALIDATE_INPUTS`๋ฅผ ํ†ตํ•ด ๊ฒ€๊ธฐ ์Šคํ‚ต | | **์ƒ์ˆ˜ ๋ฆฌ์ŠคํŠธ ์‚ฌ์šฉ** | ๊ทธ๋ž˜ํ”„ ์ •์˜ ๋‚ด์—์„œ `[1, 2, 3]`๊ณผ ๊ฐ™์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์ˆ˜๋กœ ์‚ฌ์šฉ (์ด์ „์—๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํ™•์žฅ์ด ํ•„์š”ํ–ˆ์Œ) | ๋ฆฌ์ŠคํŠธ๋ฅผ `{ "value": [1, 2, 3] }`์™€ ๊ฐ™์ด ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉ | ### 2. VALIDATE_INPUTS ํ•จ์ˆ˜์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฒ€์ฆ ์˜ค๋ฅ˜ ์˜ํ–ฅ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ๋“ค์ž…๋‹ˆ๋‹ค. * **๊ธฐ๋ณธ ๊ฒ€์ฆ ์Šคํ‚ต**: `VALIDATE_INPUTS` ํ•จ์ˆ˜์— ์˜ํ•ด ์ˆ˜์‹ ๋œ ์ž…๋ ฅ์€ ๊ธฐ๋ณธ ๊ฒ€์ฆ์ด ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค. * **kwargs ์ง€์›**: `**kwargs`๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด, ๋…ธ๋“œ ์ž‘์„ฑ์ž๊ฐ€ ๋ชจ๋“  ์ž…๋ ฅ์„ ๊ฒ€์ฆ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * **input_types ์ธ์ž**: ์ด ์ธ์ž๊ฐ€ ์กด์žฌํ•˜๋ฉด ์—ฐ๊ฒฐ๋œ ์ถœ๋ ฅ ํƒ€์ž…๊ณผ ์ž…๋ ฅ ํƒ€์ž…์„ ๋งคํ•‘ํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๋•Œ ํƒ€์ž… ๊ฒ€์ฆ์ด ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค. ### 3. ๊ธฐํƒ€ ๊ธฐ๋Šฅ์  ๋ณ€ํ™” * **Lazy Evaluation**: ๋…ธ๋“œ์™€ ๊ทธ ์กฐ์ƒ(ancestors) ๋…ธ๋“œ๋ฅผ ํ‰๊ฐ€ํ•˜๊ธฐ ์ „์— ํ•„์š” ์—ฌ๋ถ€๋ฅผ ๋จผ์ € ํ™•์ธํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. * **Node Expansion**: ๋Ÿฐํƒ€์ž„ ์‹œ ๋…ธ๋“œ๊ฐ€ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๋กœ ํ™•์žฅ๋˜์–ด [[tail-recursion]]์„ ํ†ตํ•œ ๋ฃจํ”„ ๊ตฌํ˜„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) * **์—…๋ฐ์ดํŠธ**: ์‹คํ–‰ ๋ชจ๋ธ์ด ๊ธฐ์กด์˜ back-to-front ์žฌ๊ท€ ๋ฐฉ์‹์—์„œ front-to-back ์œ„์ƒ ์ •๋ ฌ ๋ฐฉ์‹์œผ๋กœ ์™„์ „ํžˆ ๋’ค์ง‘ํ˜”์Šต๋‹ˆ๋‹ค(Inverted)๋Š” ์ ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ์ˆ ์  ๋ณ€ํ™”์ž…๋‹ˆ๋‹ค. * **์ฃผ์˜์‚ฌํ•ญ**: ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์บ์‹œ ๊ฐ’์— ๋”ฐ๋ผ ๋ณ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ ์ด์™ธ์˜ ์š”์†Œ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•˜๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) * **์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ์ž**: ์ƒˆ๋กœ์šด ์‹คํ–‰ ๋ชจ๋ธ ํ•˜์—์„œ ๊ธฐ์กด ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๊นจ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด `uiMin/uiMax` ์‚ฌ์šฉ, `VALIDATE_INPUTS` ์ •์˜, ๋ฆฌ์ŠคํŠธ์˜ ๋”•์…”๋„ˆ๋ฆฌํ™” ๋“ฑ์˜ ๋Œ€์‘์ฑ…์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ - **์ƒํƒœ:** draft - **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Primary Source โ€” ์›น์‚ฌ์ดํŠธ ๋ณธ๋ฌธ ์ง์ ‘ ์ถ”์ถœ) - **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) ## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) * [[PR #2666]] : ์‹คํ–‰ ๋ชจ๋ธ์˜ ๊ตฌ์กฐ์  ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚จ ํ•ต์‹ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. * [[Monkey Patching]] : ์‹คํ–‰ ๋ชจ๋ธ์„ ์ˆ˜์ •ํ•˜๋ ค๋Š” ์‹œ๋„๊ฐ€ ์ƒˆ๋กœ์šด ๋ชจ๋ธ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. * [[Lazy Evaluation]] : ์ž…๋ ฅ๊ฐ’ ํ‰๊ฐ€ ์‹œ์ ์„ ์กฐ์ ˆํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. * [[Node Expansion]] : ๋…ธ๋“œ๊ฐ€ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๋กœ ํ™•์žฅ๋˜์–ด ๋ณต์žกํ•œ ๋กœ์ง(๋ฃจํ”„ ๋“ฑ)์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) - 2026-05-20: Astra /wikify ๋กœ https://docs.comfy.org/development/comfyui-server/execution_model_inversion_guide ๋ณธ๋ฌธ์—์„œ ์ดˆ์•ˆ ์ƒ์„ฑ.