1"use strict";(self.webpackChunkmegabrain_kr=self.webpackChunkmegabrain_kr||[]).push([[4763],{4358:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>u});var s=t(4848),i=t(8453);const a={authors:"puleugo",date:"Fri, 12 Sep 2025 00:05:25 +0900"},r="AI\ub97c \ub354 \uba85\ud655\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 3-File System",o={permalink:"/blog/puleugo/puleugo1",editUrl:"https://github.com/inje-megabrain/megabrain.kr/tree/main/blog/puleugo/puleugo1.md",source:"@site/blog/puleugo/puleugo1.md",title:"AI\ub97c \ub354 \uba85\ud655\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 3-File System",description:"3-File System\uc740 AI\uc5d0\uac8c \uc5c5\ubb34 \uc694\uccad\ud560 \ub54c, \uc2e4\uc81c\ub85c \uc8fc\ub2c8\uc5b4 \uac1c\ubc1c\uc790\uc5d0\uac8c \uc77c\uc744 \uc2dc\ud0a4\ub4ef\uc774 \uc694\uad6c\uc0ac\ud56d, \uccb4\ud06c\ub9ac\uc2a4\ud2b8, \ubcf4\uace0 \ubc29\uc2dd\uc5d0 \ub300\ud574 \uc9c0\uc2dc\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.",date:"2025-09-12T00:05:25.000Z",tags:[],readingTime:9.87,hasTruncateMarker:!1,authors:[{name:"\uc784\ucc44\uc131(Puleugo)",title:"2024 \ud300\uc7a5, \ubc31\uc5d4\ub4dc",url:"https://github.com/puleugo",socials:{github:"https://github.com/puleugo"},imageURL:"https://github.com/puleugo.png",key:"puleugo",page:null}],frontMatter:{authors:"puleugo",date:"Fri, 12 Sep 2025 00:05:25 +0900"},unlisted:!1,nextItem:{title:"AI\ub97c \ub098\ub9cc\uc758 \uc8fc\ub2c8\uc5b4 \ub178\uc608\ub85c \uad74\ub9b4 \uc218 \uc788\ub294 3-File System",permalink:"/blog/puleugo/puleugo2"}},l={authorsImageUrls:[void 0]},u=[{value:"1. \uc81c\ud488 \uc694\uad6c\uc0ac\ud56d \uba85\uc138\uc11c(PRD)",id:"1-\uc81c\ud488-\uc694\uad6c\uc0ac\ud56d-\uba85\uc138\uc11cprd",level:2},{value:"2. \uc5c5\ubb34 \uc0dd\uc131 \uaddc\uce59 File",id:"2-\uc5c5\ubb34-\uc0dd\uc131-\uaddc\uce59-file",level:2},{value:"3. \uc5c5\ubb34 \ubaa9\ub85d \uad00\ub9ac File",id:"3-\uc5c5\ubb34-\ubaa9\ub85d-\uad00\ub9ac-file",level:2}];function d(e){const n={a:"a",br:"br",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"3-file-system",children:"3-File System"}),"\n",(0,s.jsxs)(n.p,{children:["3-File System\uc740 AI\uc5d0\uac8c \uc5c5\ubb34 \uc694\uccad\ud560 \ub54c, \uc2e4\uc81c\ub85c \uc8fc\ub2c8\uc5b4 \uac1c\ubc1c\uc790\uc5d0\uac8c \uc77c\uc744 \uc2dc\ud0a4\ub4ef\uc774 ",(0,s.jsx)(n.strong,{children:"\uc694\uad6c\uc0ac\ud56d, \uccb4\ud06c\ub9ac\uc2a4\ud2b8, \ubcf4\uace0 \ubc29\uc2dd"}),"\uc5d0 \ub300\ud574 \uc9c0\uc2dc\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4."]}),"\n",(0,s.jsx)(n.h2,{id:"1-\uc81c\ud488-\uc694\uad6c\uc0ac\ud56d-\uba85\uc138\uc11cprd",children:"1. \uc81c\ud488 \uc694\uad6c\uc0ac\ud56d \uba85\uc138\uc11c(PRD)"}),"\n",(0,s.jsxs)(n.p,{children:["\uccab\ubc88\uc9f8\ub85c PRD\ub294 Product Requirements Documents, ",(0,s.jsx)(n.strong,{children:"\uc81c\ud488 \uc694\uad6c\uc0ac\ud56d \uba85\uc138\uc11c"}),"\uc785\ub2c8\ub2e4.",(0,s.jsx)(n.br,{}),"\n","PRD \ud30c\uc77c\uc740 AI\uc5d0\uac8c \uc5ec\ub7ec\uac00\uc9c0 \uc694\uccad\uc744 \ubc18\ubcf5\ud558\ub2e4\uac00 AI\uac00 ",(0,s.jsx)(n.strong,{children:"\ucd94\ub860\uc744 \ubc18\ubcf5\ud558\ub2e4 \uc774\uc0c1\ud55c \uae30\ud68d\uc73c\ub85c \uac00\ub294 \uac83\uc744 \uc0ac\uc804\uc5d0 \ub9c9\ub294 \uc5ed\ud560"}),"\uc744 \ud569\ub2c8\ub2e4.",(0,s.jsx)(n.br,{}),"\n","\uc800\ub3c4 \uc5c5\ubb34\ub97c \uacfc\ub3c4\ud558\uac8c \ubd84\uc11d\ud558\ub2e4\uac00 \ubcf8\uc9c8\uc744 \ub193\uce58\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc73c\ub2c8\uae4c\uc694."]}),"\n",(0,s.jsx)(n.p,{children:"\uc694\uc57d:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"markdown \ud3ec\ub9f7\uc73c\ub85c PRD\ub97c \uc791\uc131\ud558\ub77c."}),"\n",(0,s.jsx)(n.li,{children:"PRD\ub294 \uba85\ud655\ud558\uace0 \uc2e4\ud589 \uac00\ub2a5\ud558\uba70 \uc8fc\ub2c8\uc5b4 \uac1c\ubc1c\uc790\uac00 \uc774\ud574\ud558\uace0 \uad6c\ud604\ud558\uae30\uc5d0 \uc801\ud569\ud574\uc57c\ud55c\ub2e4."}),"\n",(0,s.jsx)(n.li,{children:"\uc0ac\uc6a9\uc790\ub294 \uc0c8\ub85c\uc6b4 \uae30\ub2a5, \uae30\ub2a5\uc5d0 \ub300\ud55c \uac04\ub2e8\ud55c \uc124\uba85/\uc694\uccad\uc744 \uc81c\uacf5\ud55c\ub2e4."}),"\n",(0,s.jsxs)(n.li,{children:["PRD \uc791\uc131 \uc804 ",(0,s.jsx)(n.strong,{children:"\uc0c1\uc138\ud55c \uc9c8\ubb38"}),"\uc744 \ud558\uc5ec \uad6c\uccb4\ud654\ub97c \uc9c4\ud589\ud55c\ub2e4."]}),"\n",(0,s.jsx)(n.li,{children:"PRD \uc0dd\uc131 \ubc0e \uc800\uc7a5: \uc0dd\uc131\ub41c \ubb38\uc11c\ub97c `/task` \ub514\ub809\ud1a0\ub9ac\uc5d0 `prd-[feature-name].md` \ubc29\uc2dd\uc73c\ub85c \uc800\uc7a5\ud55c\ub2e4."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"creat-prd.mdc:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:'# Rule: Generating a Product Requirements Document (PRD)\n\n## Goal\n\nTo guide an AI assistant in creating a detailed Product Requirements Document (PRD) in Markdown format, based on an initial user prompt.\nThe PRD should be clear, actionable, and suitable for a junior developer to understand and implement the feature.\n\n## Process\n\n1. **Receive Initial Prompt:** The user provides a brief description or request for a new feature or functionality.\n2. **Ask Clarifying Questions:** Before writing the PRD, the AI *must* ask clarifying questions to gather sufficient detail. The goal is to understand the "what" and "why" of the feature, not necessarily the "how" (which the developer will figure out).\n3. **Generate PRD:** Based on the initial prompt and the user\'s answers to the clarifying questions, generate a PRD using the structure outlined below.\n4. **Save PRD:** Save the generated document as `prd-[feature-name].md` inside the `/tasks` directory.\n\n## Clarifying Questions Format\n\nWhen asking clarifying questions, the AI *must* format them as a numbered list. This list should support nested sub-questions using dot notation (e.g., 1, 2, 2.1, 2.2, 3).\n\nExample format:\n1. Top-level question 1?\n2. Top-level question 2?\n 2.1. Sub-question related to question 2?\n 2.2. Another sub-question related to question 2?\n3. Top-level question 3?\n\nThere should only be one atomic question per list item.\n\nThe AI should adapt its *actual questions* based on the user\'s initial prompt, aiming to cover relevant areas like:\n\n- **Problem/Goal:** What problem does this feature solve? What is the primary goal?\n- **Target User:** Who is this feature for?\n- **Core Functionality:** What are the essential actions the user must be able to perform?\n- **User Stories:** Can you provide examples like "As a [user], I want to [action] so that [benefit]"?\n- **Acceptance Criteria:** How do we define success for this feature?\n- **Scope/Boundaries:** What should this feature explicitly *not* do?\n- **Data:** What information needs to be displayed or managed?\n- **Design/UI:** Are there mockups or specific UI preferences?\n- **Edge Cases:** What potential errors or unusual situations should be considered?\n\n# PRD Structure\n\nThe generated PRD should include the following sections:\n\n1. **Introduction/Overview:** Briefly describe the feature and the problem it solves. State the goal.\n2. **Goals:** List the specific, measurable objectives for this feature.\n3. **User Stories:** Detail the user narratives describing feature usage and benefits.\n4. **Functional Requirements:** List the specific functionalities the feature must have. Use clear, concise language (e.g., "The system must allow users to upload a profile picture."). Number these requirements.\n5. **Non-Goals (Out of Scope):** Clearly state what this feature will *not* include to manage scope.\n6. **Design Considerations (Optional):** Link to mockups, describe UI/UX requirements, or mention relevant components/styles if applicable.\n7. **Technical Considerations (Optional):** Mention any known technical constraints, dependencies, or suggestions (e.g., "Should integrate with the existing Auth module").\n8. **Success Metrics:** How will the success of this feature be measured? (e-g., "Increase user engagement by 10%", "Reduce support tickets related to x*).\n9. **Open Questions:** List any remaining questions or areas needing further clarification.\n\n# Target Audience\n\nAssume the primary reader of the PRD is a **junior developer**.\nTherefore, requirements should be explicit, unambiguou
1s, and avoid jargon where possible. Provide enough detail for them to understand the feature\'s purpose and core logic.\n\n## Output\n\n- **Format:** Markdown (* md* )\n- **Location:** */tasks/*\n- **Filename:** prd-[meaningful-feature-name].md* (e.g., prd-user-profile-editing.md* )\n\n## Final instructions\n\n1. Do NOT start implmenting the PRD\n2. Make sure to ask the user clarifying questions\n3. Take the user\'s answers to the clarifying questions and improve the PRD\n'})}),"\n",(0,s.jsx)(n.p,{children:"\uc694\uccad \uc608\uc2dc:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"@creat-prd.mdc \ud68c\uc6d0\ub4e4\uc758 \ubaa8\ub4e0 \ubcf4\ud2b8 \uc774\ub984\uacfc \uc5bc\ub9c8\ub098 \ub9ce\uc740 \uc774\uba54\uc77c\uc774 \ubc1c\uc1a1\ub418\uc5c8\ub294\uc9c0 \ubcf4\uc5ec\uc8fc\ub294 \ubcf4\uace0\uc11c\ub97c \ucd94\uac00\ud558\uace0 \uc2f6\ub2e4.\n"})}),"\n",(0,s.jsxs)(n.p,{children:["\uc124\uba85: \uc694\uccad\uc0ac\ud56d\uc744 \uc81c\uacf5\ud558\uba74 \uba87\uac00\uc9c0 \uc9c8\ubb38 \uc774\ud6c4 \uc81c\ud488 \uc694\uad6c\uc0ac\ud56d \uba85\uc138\uc11c\ub97c \uc791\uc131\ud574\uc90d\ub2c8\ub2e4. (e.g. ",(0,s.jsx)(n.code,{children:"prd-member-email-interface.md"}),") \uc791\uc131\ub41c \uc694\uad6c\uc0ac\ud56d \uba85\uc138\uc11c\ub97c \uae30\ubc18\uc73c\ub85c \uc5c5\ubb34\ub97c \uc0c8\uc5b4"]}),"\n",(0,s.jsx)(n.h2,{id:"2-\uc5c5\ubb34-\uc0dd\uc131-\uaddc\uce59-file",children:"2. \uc5c5\ubb34 \uc0dd\uc131 \uaddc\uce59 File"}),"\n",(0,s.jsx)(n.p,{children:"\uc694\uc57d:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"\uc791\uc131\ub41c PRD\ub97c \uae30\ubc18\uc73c\ub85c markdown \ud3ec\ub9f7\uc73c\ub85c \uc138\ubd80 \ub2e8\uacc4\ubcc4 \uc791\uc5c5 \ubaa9\ub85d\uc744 \uc791\uc131\ud558\ub77c."}),"\n",(0,s.jsx)(n.li,{children:"\uac1c\ubc1c\uc790\uac00 \uad6c\ud604\uc744 \uc704\ud574 \ud314\ub85c\uc6b0\ud558\uae30\uc5d0 \uc801\ud569\ud574\uc57c \ud55c\ub2e4."}),"\n",(0,s.jsxs)(n.li,{children:["\ub2e4\uc74c\uacfc \uac19\uc740 \uacfc\uc815\uc744 \uac70\uce5c\ub2e4.","\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"\uc0ac\uc6a9\uc790\uac00 \ud2b9\uc815 PRD\ub97c \uc81c\uacf5\ud55c\ub2e4."}),"\n",(0,s.jsx)(n.li,{children:"PRD\ub97c \ubd84\uc11d\ud558\uc5ec \uc0c1\uc704 \uc5c5\ubb34\ub97c \uc0dd\uc131\ud55c\ub2e4."}),"\n",(0,s.jsx)(n.li,{children:"\uc0dd\uc131\ud55c \uc0c1\uc704\uc5c5\ubb34\ub97c \uc0ac\uc6a9\uc790\uc5d0\uac8c \ucee8\ud38c\ubc1b\ub294\ub2e4."}),"\n",(0,s.jsx)(n.li,{children:'"Go"\ub77c\ub294 \uc751\ub2f5\uc774 \uc624\uba74 \ud558\uc704 \uc791\uc5c5\uc744 \uc0dd\uc131\ud55c\ub2e4.'}),"\n",(0,s.jsx)(n.li,{children:"\uc791\uc5c5 \ubaa9\ub85d\uc744 `tasks/tasks-[prd-file-name].md`\uc5d0 \uc800\uc7a5\ud558\ub77c."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:'"Go"\ub77c\ub294 \uc785\ub825\uc744\xa0'}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"generate-tasks.mdc:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:'# Rule: Generating a Task List from a PRD\n\n## Goal\n\nTo guide an Al assistant in creating a detailed, step-by-step task list in Markdown format based on an existing Product Requirements Document (PRD). The task list should be suitable for a developer to follow for implementation.\n\n## Output\n\n- **Format:** Markdown (`.md`)\n- **Location:** `/tasks/`\n- **Filename:** `tasks-[prd-file-name].md` (e.g., `tasks-prd-user-profile-editing.md`)\n\n## Process\n\n1. **Receive PRD Reference:** The user points the Al to a specific PRD file.\n2. **Analyze PRD:** The AI reads and analyzes the functional requirements, user stories, and other sections of the specified PRD.\n3. **Phase 1: Generate Parent Tasks:** Based on the PRD analysis, create the file and generate the main, high-level tasks required to implement the feature. Use your judgement on how many high-level tasks to use. It\'s likely to be 3-5. Present these tasks to the user in the specified format (without sub-tasks yet). Inform the user: "I have generated the high-level tasks based on the PRD. Ready to generate the sub-tasks? Respond with \'Go\' to proceed."\n4. **Wait for Confirmation:** Pause and wait for the user to respond with "Go".\n5. **Phase 2: Generate Sub-Tasks:** Once the user confirms, break down each parent task into smaller. actionable sub-tasks. Ensure sub-tasks logically follow from the parent task and cover the implementation details implied by the PRD.\n6. **Identify Relevant Files:** Based on the tasks and PRD. identify potential files that will need to be created or modified. List these under the `Relevant Files` section with a brief description of their purpose in relation to the tasks.\n7. **Generate Final Output:** Combine the parent tasks, sub-tasks, and relevant files into the final Markdown structure.\n8. **Save Task List:** Save the generated document in the `/tasks/` directory with the filename `tasks-[prd-file-name].md`, where [prd-file-name] matches the base name of the input PRD file (e.g., if the input was `prd-user-profile-editing.md`, the output is `tasks-prd-user-profile-editing.md`).\n\n## Output Format\n\nThe generated task list _must_ follow this structure:\n\\`\\`\\`markdown\n\n### Relevant Files\n\n- `path/to/potential/file.ts` - Brief description of why this file is relevant (e.g., Contains the main component for this feature).\n- `path/to/another/file.tsx` - Brief description (e.g., API route handler for data submission).\n- `lib/utils/helpers.ts` - Brief description (e.g., Utility functions needed for calculations).\n\n## Tasks\n\n- [ ] 1.0 Parent Task Title\n - [ ] 1.1 Sub-task description\n - [ ] 1.2 Sub-task description\n- [ ] 2.0 Parent Task Title\n - [ ] 2.1 Sub-task description\n - [ ] 2.2 Sub-task description\n - [ ] 2.3 Sub-task description\n- [ ] 3.0 Parent Task Title (may not have sub-tasks if simple enough)\n\\`\\`\\`\n\n## Interaction Model\n\nThe process explicitly requires a pause after generating parent tasks to get user confirmation ("Go") before proceeding to generate sub-tasks. This ensures the high-level plan aligns with user expectations before diving into details.\n\n## Target Audience\n\nAssume the primary reader of the task list is a **developer** who will implement the feature.\n'})}),"\n",(0,s.jsx)(n.h2,{id:"3-\uc5c5\ubb34-\ubaa9\ub85d-\uad00\ub9ac-file",children:"3. \uc5c5\ubb34 \ubaa9\ub85d \uad00\ub9ac File"}),"\n",(0,s.jsx)(n.p,{children:"\uc5c5\ubb34\ub97c \uc9c0\uc2dc\ud560 \ub54c \ub2e4\uc74c \uc9c0\uc2dc\uc0ac\ud56d\uc744 \ub530\ub77c \uc791\uc5c5\ud558\uc138\uc694."}),"\n",(0,s.jsx)(n.p,{children:"\uc694\uc57d:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"\ud55c\ubc88\uc5d0 \ud558\ub098\uc758 \uc791\uc5c5\ub9cc \uc218\ud589\ud558\uc138\uc694."}),"\n",(0,s.jsx)(n.li,{children:"\uc5c5\ubb34 \uc644\ub8cc \uc989\uc2dc []\ub97c [x]\ub85c \ubcc0\uacbd\ud558\uc138\uc694."}),"\n",(0,s.jsx)(n.li,{children:"\ud070 \uc791\uc5c5\uc744 \uc2dc\uc791\ud558\uae30 \uc804\uc5d0 \ud558\uc704 \uc791\uc5c5\uc744 \ud655\uc778\ud558\uc138\uc694."}),"\n",(0,s.jsx)(n.li,{children:"\ud558\ub098\uc758 \uc791\uc5c5\uc744 \uc218\ud589\ud55c \ud6c4 \uc0ac\uc6a9\uc790\uc758 \uc2b9\uc778\uc744 \ub300\uae30\ud558\uc138\uc694."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"task-list.mdc:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:'# Task List Management\n\nGuidelines for managing task lists in markdown files to track progress on completing a PRD\n\n## Task Implementation\n\n- **One sub-task at a time:
1** Do **NOT** start the next subtask until you ask the user for permission and they say "yes" or "y"\n- **Completion protocol:**\n 1. When you fifish a **subtask**, immediately mark it as completed by changing \'\\[ \\]\' to \'\\[x\\]\\*.\n 2. If **all** subtasks underneath a parent task are now \'\\[x\\]", also mark the **parent task** as completed.\n- Stop after each subtask and wait for the users goahead.\n\n## Task List Maintenance\n\n1. **Update the task list as you work:**\n - Mark tasks and subtasks as completed (`[x]`) per the protocol above.\n - Add new tasks as they emerge.\n2. **Maintain the "Relevant Files" section:**\n - List every file created or modified.\n - Give each file a one-line description of its purpose.\n\n## AI Instructions\n\nWhen working with task lists, the AI must:\n\n1. Regularly update the task list file after finishing any significant work.\n2. Follow the completion protocol:\n - Mark each finished **sub-task** `[x]`.\n - Mark the **parent task** `[x]` once **all** its subtasks are `[x]`\n3. Add newly discovered tasks.\n4. Keep "Relevant Files" accurate and up to date.\n5. Before starting work, check which sub-task is next.\n6. After implementing a sub-task, update the file and then pause for user approval.\n'})}),"\n",(0,s.jsx)(n.h1,{id:"\uc624\ub9ac\uc9c0\ub110",children:"\uc624\ub9ac\uc9c0\ub110"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/fD4ktSkNCw4?si=JqbJ1oyn1_nG7WtD",children:"https://youtu.be/fD4ktSkNCw4?si=JqbJ1oyn1_nG7WtD"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>o});var s=t(6540);const i={},a=s.createContext(i);function r(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.