[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DHX13G8CSHSAD9Y7QVN87W":3,"skill-same:01M6DHX13G8CSHSAD9Y7QVN87W":121},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":52,"linkOnly":53,"markdownContent":54,"markdownBody":55,"frontMatter":56,"refName":73,"commitSha":74,"skillDirectory":75,"forksCount":76,"repositoryHtmlUrl":77,"repositoryHomepageUrl":6,"ownerHtmlUrl":78,"ownerBlogUrl":6,"ownerDescription":79,"updatedAt":80,"install":81,"resources":94},"01M6DHX13G8CSHSAD9Y7QVN87W","domain-driven-design",null,"Use when aligning code structure with business concepts, designing service boundaries, or when domain experts and developers cannot agree on what things mean. Triggers on: \"도메인 모델링\", \"바운디드 컨텍스트\", \"DDD\", \"domain-driven design\", \"bounded context\".","newkayak12\u002Fclaude-skills","newkayak12","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F74722411?v=4","01M6DHQRSHSVM4F2EJACTMC766","Sanghyeon Kim","01M6DHQRX6XQ0XKTD3QB8CGFM9",3,"MIT","https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdomain-driven-design\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"driven","domain driven design","domain","design","business","triggers","define","structure","me","thinking","do","use","model","tool","system","how","sse","ddd","code","MCP","2026-11-10 10:12:30",false,"---\nname: domain-driven-design\ndescription: >-\n  Use when aligning code structure with business concepts, designing service\n  boundaries, or when domain experts and developers cannot agree on what things\n  mean. Triggers on: \"도메인 모델링\", \"바운디드 컨텍스트\", \"DDD\", \"domain-driven design\",\n  \"bounded context\".\nlicense: MIT\nmetadata:\n  version: \"1.0.1\"\nscenarios:\n  - \"help me model this business domain\"\n  - \"how do I define bounded contexts for this system?\"\n  - \"what's the difference between entity and value object?\"\n  - \"도메인 모델 설계해줘\"\n  - \"바운디드 컨텍스트 어떻게 나눠야 해?\"\n  - \"도메인 전문가와 개발자 언어가 달라서 문제야\"\ncompatibility:\n  recommended:\n    - think-tool\n    - sequential-thinking\n  optional:\n    - mcp-reasoner\n  remote_mcp_note: >-\n    think-tool이 있으면 바운디드 컨텍스트 경계 결정과 컨텍스트 매핑 트레이드오프 분석이 더 정확해집니다.\n    Claude 설정 → MCP Servers에서 remote SSE 엔드포인트를 추가하세요.\n---\n\n## Standing Mandates\n\n- NEVER draw a context boundary from a noun list. A border goes where a term changes meaning, and the map quotes both\n  meanings. Contexts cut per noun (`Customer`, `Order`, `Product`) become entity services that call each other on\n  every request — the coupling stays, now over the network, and `develop:service-boundary-validator` then finds it.\n- A business rule nobody stated is marked `[확인 필요: \u003Crule>]`, never invented; an invented invariant ships as code.\n\nGoal: every context on the map cites the term whose meaning changes at its border, every aggregate names the invariant\nit guards, and the closing tally recounts to the tables.\n\n# Domain-Driven Design\n\nKeeps the code shaped like the business: shared words, explicit borders, small aggregates that guard real rules.\n\n**Not for** layering or the dependency rule (`develop:clean-architecture`); checking whether existing service cuts hold\n(`develop:service-boundary-validator`); topology, ADRs, datastore choice (`develop:architecture-designer`); running a\ndiscovery workshop from nothing (`develop:event-storming`). Plain CRUD with no rules → say so and stop.\n\n## Process\n\n1. **Read before asking.** Collect the vocabulary already in the code, docs, tickets and the user's words. Ask at most\n   one line, only for what none of them answers.\n2. **Language.** List each key term with its meaning per speaker or module. A term with two meanings is a border\n   candidate; a technical name (`Manager`, `Helper`, `Processor`) marks an unnamed concept. Detail:\n   `references\u002Fubiquitous-language.md`.\n3. **Contexts.** Draw a border at each meaning change, name the relationship on each edge (ACL, Shared Kernel,\n   Conformist, Open Host \u002F Published Language) and classify each context core \u002F supporting \u002F generic. Detail:\n   `references\u002Fbounded-contexts.md`, `references\u002Fstrategic-design.md`.\n4. **Aggregates.** Per context: entities vs value objects, then aggregates sized to one invariant each, referencing\n   other aggregates by id. An aggregate with no invariant to name is not one — fold it or drop it. Detail:\n   `references\u002Fbuilding-blocks.md`.\n5. **Events and persistence.** Past-tense events each aggregate emits, with consumers; repository interfaces in the\n   domain, factories where construction can fail. Detail: `references\u002Fdomain-events.md`,\n   `references\u002Frepositories-factories.md`.\n6. **Check.** Recount: contexts without a quoted term, aggregates without an invariant, rules left in services over a\n   hollow model, outside systems reached without translation. Fix or list each; then write the tally.\n\n## Output Template\n\n**Context map** — Mermaid or a table: context, type (core\u002Fsupporting\u002Fgeneric), edges with relationship pattern.\n\n| Context | Border term | Meaning here | Meaning across the border |\n|---|---|---|---|\n| Billing | \"account\" | payer with a balance | Identity: login credentials |\n\n| Context | Aggregate | Invariant it guards | Events emitted → consumer |\n|---|---|---|---|\n| Ordering | Order | total = Σ lines; no lines after `placed` | `OrderPlaced` → Billing |\n\nGlossary: term — definition, per context. Open: each `[확인 필요: …]` with who can answer.\n\nTally: `\u003Cn>` contexts (core `\u003Ca>` \u002F supporting `\u003Cb>` \u002F generic `\u003Cc>`) · `\u003Cm>` aggregates, `\u003Cm>` with an invariant ·\n`\u003Ck>` open rules.\n\n## What Claude Does \u002F What You Do\n\n| Claude | You |\n|--------|-----|\n| Extracts terms from code and docs, draws borders where meanings split | Confirm each meaning with a domain expert |\n| Sizes aggregates to named invariants; marks unstated rules | Supply or reject each `[확인 필요]` rule |\n| Names events, consumers and repository interfaces | Decide which context is core and where effort goes |\n\n## Related Skills\n\n- `develop:event-storming` — discover events and terms with the team before modelling\n- `develop:service-boundary-validator` — test whether the drawn borders survive as service cuts\n- `develop:clean-architecture` — layers and the dependency rule inside a context\n- `develop:architecture-designer` — topology and ADRs once the contexts are set\n","## Standing Mandates\n\n- NEVER draw a context boundary from a noun list. A border goes where a term changes meaning, and the map quotes both\n  meanings. Contexts cut per noun (`Customer`, `Order`, `Product`) become entity services that call each other on\n  every request — the coupling stays, now over the network, and `develop:service-boundary-validator` then finds it.\n- A business rule nobody stated is marked `[확인 필요: \u003Crule>]`, never invented; an invented invariant ships as code.\n\nGoal: every context on the map cites the term whose meaning changes at its border, every aggregate names the invariant\nit guards, and the closing tally recounts to the tables.\n\n# Domain-Driven Design\n\nKeeps the code shaped like the business: shared words, explicit borders, small aggregates that guard real rules.\n\n**Not for** layering or the dependency rule (`develop:clean-architecture`); checking whether existing service cuts hold\n(`develop:service-boundary-validator`); topology, ADRs, datastore choice (`develop:architecture-designer`); running a\ndiscovery workshop from nothing (`develop:event-storming`). Plain CRUD with no rules → say so and stop.\n\n## Process\n\n1. **Read before asking.** Collect the vocabulary already in the code, docs, tickets and the user's words. Ask at most\n   one line, only for what none of them answers.\n2. **Language.** List each key term with its meaning per speaker or module. A term with two meanings is a border\n   candidate; a technical name (`Manager`, `Helper`, `Processor`) marks an unnamed concept. Detail:\n   `references\u002Fubiquitous-language.md`.\n3. **Contexts.** Draw a border at each meaning change, name the relationship on each edge (ACL, Shared Kernel,\n   Conformist, Open Host \u002F Published Language) and classify each context core \u002F supporting \u002F generic. Detail:\n   `references\u002Fbounded-contexts.md`, `references\u002Fstrategic-design.md`.\n4. **Aggregates.** Per context: entities vs value objects, then aggregates sized to one invariant each, referencing\n   other aggregates by id. An aggregate with no invariant to name is not one — fold it or drop it. Detail:\n   `references\u002Fbuilding-blocks.md`.\n5. **Events and persistence.** Past-tense events each aggregate emits, with consumers; repository interfaces in the\n   domain, factories where construction can fail. Detail: `references\u002Fdomain-events.md`,\n   `references\u002Frepositories-factories.md`.\n6. **Check.** Recount: contexts without a quoted term, aggregates without an invariant, rules left in services over a\n   hollow model, outside systems reached without translation. Fix or list each; then write the tally.\n\n## Output Template\n\n**Context map** — Mermaid or a table: context, type (core\u002Fsupporting\u002Fgeneric), edges with relationship pattern.\n\n| Context | Border term | Meaning here | Meaning across the border |\n|---|---|---|---|\n| Billing | \"account\" | payer with a balance | Identity: login credentials |\n\n| Context | Aggregate | Invariant it guards | Events emitted → consumer |\n|---|---|---|---|\n| Ordering | Order | total = Σ lines; no lines after `placed` | `OrderPlaced` → Billing |\n\nGlossary: term — definition, per context. Open: each `[확인 필요: …]` with who can answer.\n\nTally: `\u003Cn>` contexts (core `\u003Ca>` \u002F supporting `\u003Cb>` \u002F generic `\u003Cc>`) · `\u003Cm>` aggregates, `\u003Cm>` with an invariant ·\n`\u003Ck>` open rules.\n\n## What Claude Does \u002F What You Do\n\n| Claude | You |\n|--------|-----|\n| Extracts terms from code and docs, draws borders where meanings split | Confirm each meaning with a domain expert |\n| Sizes aggregates to named invariants; marks unstated rules | Supply or reject each `[확인 필요]` rule |\n| Names events, consumers and repository interfaces | Decide which context is core and where effort goes |\n\n## Related Skills\n\n- `develop:event-storming` — discover events and terms with the team before modelling\n- `develop:service-boundary-validator` — test whether the drawn borders survive as service cuts\n- `develop:clean-architecture` — layers and the dependency rule inside a context\n- `develop:architecture-designer` — topology and ADRs once the contexts are set\n",{"name":5,"license":15,"metadata":57,"scenarios":59,"description":7,"compatibility":66},{"version":58},"1.0.1",[60,61,62,63,64,65],"help me model this business domain","how do I define bounded contexts for this system?","what's the difference between entity and value object?","도메인 모델 설계해줘","바운디드 컨텍스트 어떻게 나눠야 해?","도메인 전문가와 개발자 언어가 달라서 문제야",{"optional":67,"recommended":69,"remote_mcp_note":72},[68],"mcp-reasoner",[70,71],"think-tool","sequential-thinking","think-tool이 있으면 바운디드 컨텍스트 경계 결정과 컨텍스트 매핑 트레이드오프 분석이 더 정확해집니다. Claude 설정 → MCP Servers에서 remote SSE 엔드포인트를 추가하세요.","main","cdb89e1460a1035ae4d122ee0b33344216b2cbfe","develop\u002Fskills\u002Fdomain-driven-design",1,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills","https:\u002F\u002Fgithub.com\u002Fnewkayak12","그냥 하는 사람\r\n","2026-11-11 21:29:03",{"source":8,"skillName":5,"commands":82,"prompt":92,"zipAvailable":93},[83,86,89],{"tool":84,"command":85},"npx","npx skills add newkayak12\u002Fclaude-skills --skill domain-driven-design",{"tool":87,"command":88},"bunx","bunx skills add newkayak12\u002Fclaude-skills --skill domain-driven-design",{"tool":90,"command":91},"pnpm","pnpm dlx skills add newkayak12\u002Fclaude-skills --skill domain-driven-design","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdomain-driven-design\u002FSKILL.md",true,[95,101,105,109,113,117],{"path":96,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":99,"sourceHtmlUrl":100},"references\u002Fbounded-contexts.md","REFERENCE","参考文档",3031,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdomain-driven-design\u002Freferences\u002Fbounded-contexts.md",{"path":102,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002Fbuilding-blocks.md",3175,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdomain-driven-design\u002Freferences\u002Fbuilding-blocks.md",{"path":106,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":107,"sourceHtmlUrl":108},"references\u002Fdomain-events.md",2762,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdomain-driven-design\u002Freferences\u002Fdomain-events.md",{"path":110,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":111,"sourceHtmlUrl":112},"references\u002Frepositories-factories.md",3095,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdomain-driven-design\u002Freferences\u002Frepositories-factories.md",{"path":114,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":115,"sourceHtmlUrl":116},"references\u002Fstrategic-design.md",2472,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdomain-driven-design\u002Freferences\u002Fstrategic-design.md",{"path":118,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":119,"sourceHtmlUrl":120},"references\u002Fubiquitous-language.md",2370,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdomain-driven-design\u002Freferences\u002Fubiquitous-language.md",[122,145,170,191,216,235],{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":52},"01M6DJ9KATAGNQ28QRQWG32PNG","diagram","Use when something must be drawn as a checked figure, not Mermaid: page layout, B-tree, lock timeline, ER, benchmark chart, architecture, sequence. SVG + PNG. Triggers: \"도식화해줘\", \"그림으로 그려줘\", \"책에 넣을 그림\", \"시퀀스 다이어그램\", \"draw this as a figure\".","https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fwrite\u002Fskills\u002Fdiagram\u002FSKILL.md",[],[124,129,130,131,132,133,134,135,136,45,137,43,138,139,140,141,37,142,143,144],"web","architecture","mermaid","browser","cache","redis","api","b-tree","page","er","postgres","query","layout","as","chart","SVG",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":155,"publishedAt":52},"01M6DJ0RNQFTMCJFZ0F90TKV6X","test-master","Use when writing, improving, or auditing tests, or writing case specs with expected results from a spec. Triggers: \"테스트 작성\", \"테스트 케이스 작성\", \"test case writing\", \"단위 테스트\", \"커버리지 분석\", \"test plan\", \"defect report\".","https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Ftest-master\u002FSKILL.md",[151,154],{"categoryNo":152,"categoryName":153,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[156,157,158,159,51,160,161,162,163,48,164,165,45,166,167,43,168,41,169,37],"test","master","test master","testing","writing","unit tests","development","qa","test plan","plan","analyze","coverage","only","tests",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":177,"publishedAt":52},"01M6DJ0HNBTK0C266899VBY25J","sre-engineer","Use when setting up production reliability practices. Triggers on: \"SLO 정하고 싶어\", \"에러 버짓\", \"알람 피로\", \"반복 작업(toil) 줄이기\", \"golden signals dashboard\", \"burn-rate alert\". Not for active incidents or chaos tests.","https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fsre-engineer\u002FSKILL.md",[176],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[178,179,180,51,181,182,45,183,43,184,185,186,187,188,189,41,190,38,169,37],"sre","engineer","sre engineer","observability","SET","fix","reliability","slo","sli","burn-rate","alert","up","call",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":204,"publishedAt":52},"01M6DJ0D2M8JP3K67HF3EPWRXC","sql-pro","Use when someone needs help writing or rewriting SQL — authoring complex joins, CTEs, window functions, or recursive queries — or designing a schema from scratch, normalizing an existing one, or migrating queries between database dialects.","https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fsql-pro\u002FSKILL.md",[197,200,201],{"categoryNo":198,"categoryName":199,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":202,"categoryName":203,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000033","数据分析师",[205,206,35,51,160,207,208,50,209,48,45,210,211,212,43,213,179,214,140,215],"sql","sql pro","oracle","boot","database","explain","spring","strategy","schema","functions","optimizer",{"skillNo":217,"name":218,"nameZh":6,"description":219,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":220,"categories":221,"keywords":227,"publishedAt":52},"01M6DJ07ZKVJXBHFF6F1KE8SF9","spring-boot-engineer","Use when building or extending a Spring Boot 3.x Java backend — REST, Spring Security, JPA, WebFlux, Actuator. Triggers on: \"Spring Boot API\", \"스프링 시큐리티 설정\", \"JPA 연동\". Not for service decomposition or query tuning.","https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fspring-boot-engineer\u002FSKILL.md",[222,223,224],{"categoryNo":198,"categoryName":199,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":225,"categoryName":226,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师",[208,228,211,179,229,51,130,50,230,209,231,135,232,45,233,43,140,234,215,37],"spring boot","spring boot engineer","authentication","java","configure","kotlin","caching",{"skillNo":236,"name":237,"nameZh":6,"description":238,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":239,"categories":240,"keywords":242,"publishedAt":52},"01M6DJ036MK4ESPPFEY6WY8FWZ","spec-driven-development","Use when a feature should be specified before it is coded — stories, acceptance criteria, tasks, a per-criterion check. Triggers: \"스펙 먼저\", \"명세부터 쓰고 구현\", \"수용 기준 먼저\", \"spec first\", \"spec-driven development\".","https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fspec-driven-development\u002FSKILL.md",[241],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[243,244,162,245,32,51,246,247,248,249,48,45,250,43,251,42,41,252,253,37],"spec","spec driven development","spec driven","implement","tasks","acceptance","first","write","think","acceptance criteria","feature"]