[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DHVXS2N6GWCBNMD8QR4BWF":3,"skill-same:01M6DHVXS2N6GWCBNMD8QR4BWF":129},{"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":77,"commitSha":78,"skillDirectory":79,"forksCount":80,"repositoryHtmlUrl":81,"repositoryHomepageUrl":6,"ownerHtmlUrl":82,"ownerBlogUrl":6,"ownerDescription":83,"updatedAt":84,"install":85,"resources":98},"01M6DHVXS2N6GWCBNMD8QR4BWF","database-optimizer",null,"Use when DB slowness is server-side, not query text. Triggers on: \"락 경합\", \"VACUUM 밀림\", \"shared_buffers 튜닝\", \"파티셔닝 설계\", \"lock contention\", \"stale statistics\", \"InnoDB buffer pool\". Not for SQL rewrites or pool sizing.","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\u002Fdatabase-optimizer\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"database","database optimizer","optimizer","engineer","database queries","triggers","db","server-side","statistics","shared","query","thinking","MCP","sre","use","explain","tool","sse","Optimization","performance","2026-11-10 10:12:30",false,"---\nname: database-optimizer\ndescription: >-\n  Use when DB slowness is server-side, not query text. Triggers on: \"락 경합\", \"VACUUM 밀림\", \"shared_buffers 튜닝\", \"파티셔닝\n  설계\", \"lock contention\", \"stale statistics\", \"InnoDB buffer pool\". Not for SQL rewrites or pool sizing.\nscenarios:\n  - \"Our database queries are slow and we're hitting performance bottlenecks\"\n  - \"Help me optimize this SQL query that takes 30 seconds on a 10M row table\"\n  - \"Need to scale our PostgreSQL database — it can't handle current load\"\n  - \"DB 쿼리가 너무 느려서 서비스 응답시간이 30초야\"\n  - \"PostgreSQL 성능 최적화 방법을 알려줘\"\ncompatibility:\n  recommended:\n    - think-tool\n  optional:\n    - sequential-thinking\n  remote_mcp_note: >-\n    think-tool이 있으면 병목 원인 분석과 최적화 우선순위 결정을 더 체계적으로 수행합니다.\n    sequential-thinking은 베이스라인 캡처 → 변경 → 검증 순서를 강제합니다.\n    Claude 설정 → MCP Servers에서 remote SSE 엔드포인트를 추가하세요.\nlicense: MIT\nmetadata:\n  version: \"1.1.0\"\n  domain: infrastructure\n  triggers: server-side database tuning, vacuum lag, lock waits, buffer pool sizing, partitioning, EXPLAIN ANALYZE reading\n  role: specialist\n  scope: optimization\n  output-format: findings-with-config-and-sql\n  related-skills: sql-pro, connection-pool-tuner, sre-engineer\n---\n\n## Standing Mandates\n\n- NEVER change anything before a baseline is recorded (`EXPLAIN (ANALYZE, BUFFERS)`, latency, cache hit rate), and\n  never make two changes in one round. Two changes at once make the net number unattributable. No baseline supplied is `[확인 필요: baseline]` and the tuning stops there.\n- NEVER run `ALTER SYSTEM` or edit `my.cnf` on a managed database (RDS, Cloud SQL, Aurora); use the parameter group.\n  Deployment type unknown is `[확인 필요: deployment]`.\n- Do NOT add an index that duplicates another's leading columns or serves no measured query; each index taxes every write.\n- A gain not shown by a before\u002Fafter measurement is `unverified`, never \"should be faster\".\n- Goal: each change has a baseline number, an after number, and a keep or revert; stop at the target or after 3 rounds\n  with no gain, reporting what remains. The closing tally recounts to the change lines.\n\n# Database Optimizer\n\nFinds the server-side cause of database slowness (memory, VACUUM, locks, statistics, partitioning) and changes it one\nmeasured step at a time.\n\n**Not for** rewriting the query text (`develop:sql-pro`) or pool sizing (`develop:connection-pool-tuner`).\n\n## Process\n\n1. **Triage.** Engine and version, deployment type (self-managed or cloud-managed), direct access or not.\n2. **Baseline.** `EXPLAIN (ANALYZE, BUFFERS)`, latency, buffer hit rate.\n3. **Bottleneck.** Read the plan and server stats: costly nodes, absent indexes, stale statistics, lock waits, VACUUM lag.\n4. **One change.** Index, parameter, or partition; PostgreSQL indexes `CONCURRENTLY`; rehearse outside production.\n5. **Measure.** Re-run the baseline; keep or revert. Revert if writes slow or replicas fall behind. Then the next change. Before sending, recount the tally against the change lines; fix the header if they differ.\n\n| Plan signal | Suggests | Usual first move |\n|-------------|----------|------------------|\n| `Seq Scan` over a big table | Few rows kept, nothing indexed | B-tree index on the filtered column |\n| `Nested Loop`, large outer side | Inner re-probed per outer row | Index the inner join key, or let a hash join win |\n| Estimated `rows=1`, actual 50000 | Statistics out of date | `ANALYZE` the table |\n| `Buffers: hit=40 read=120000` | Pages mostly from disk | Grow `shared_buffers`, or add a covering index |\n| `Sort Method: external merge  Disk` | Sort overflowed memory | Raise `work_mem` for that session or role |\n\n| Area | File | Read when |\n|------|------|-----------|\n| Plans and query shape | `references\u002Fquery-optimization.md` | Reading EXPLAIN output, slow statements |\n| Index design | `references\u002Findex-design-patterns.md` | B-tree, covering, partial, expression |\n| PostgreSQL memory and WAL | `references\u002Fpostgresql-memory-wal.md` | shared_buffers, work_mem, WAL |\n| PostgreSQL VACUUM and locking | `references\u002Fpostgresql-vacuum-locking.md` | VACUUM, locks, SKIP LOCKED, advisory locks, lock order |\n| MySQL memory and I\u002FO | `references\u002Fmysql-memory-io.md` | InnoDB memory, I\u002FO |\n| Monitoring | `references\u002Fmonitoring-postgresql.md`, `references\u002Fmonitoring-mysql.md` | pg_stat_statements, locks; performance schema, InnoDB status |\n\n## Output Template\n\n```\n## DB tuning — \u003Csystem> (\u003Cengine> \u003Cversion>, \u003Cself-managed | managed>)\n\nBaseline: \u003Clatency, plan cost, hit rate>\nChange \u003Cn>: \u003Cwhat> → after \u003Cnumbers> → keep | revert\nMonitoring to keep: \u003Cmetrics>\n\n\u003Cn> changes · \u003Ck> kept · \u003Cr> reverted · \u003Cu> unverified\n```\n\n## What Claude Does \u002F What You Do\n\n| Claude | You |\n|--------|-----|\n| Reads EXPLAIN, names the bottleneck, proposes one change | Provide the actual EXPLAIN output and engine\u002Fdeployment facts |\n| Writes the parameter or index change and the validation queries | Apply via parameter group or `ALTER SYSTEM`; run `CREATE INDEX CONCURRENTLY` |\n| Flags managed-platform constraints | Confirm the gain on production-sized data |\n\n## Related Skills\n\n- `develop:sql-pro` — rewrite slow queries once the server is configured\n- `develop:connection-pool-tuner` — pool sizing after server config is validated\n- `develop:sre-engineer` — monitoring and alerting on database golden signals\n","## Standing Mandates\n\n- NEVER change anything before a baseline is recorded (`EXPLAIN (ANALYZE, BUFFERS)`, latency, cache hit rate), and\n  never make two changes in one round. Two changes at once make the net number unattributable. No baseline supplied is `[확인 필요: baseline]` and the tuning stops there.\n- NEVER run `ALTER SYSTEM` or edit `my.cnf` on a managed database (RDS, Cloud SQL, Aurora); use the parameter group.\n  Deployment type unknown is `[확인 필요: deployment]`.\n- Do NOT add an index that duplicates another's leading columns or serves no measured query; each index taxes every write.\n- A gain not shown by a before\u002Fafter measurement is `unverified`, never \"should be faster\".\n- Goal: each change has a baseline number, an after number, and a keep or revert; stop at the target or after 3 rounds\n  with no gain, reporting what remains. The closing tally recounts to the change lines.\n\n# Database Optimizer\n\nFinds the server-side cause of database slowness (memory, VACUUM, locks, statistics, partitioning) and changes it one\nmeasured step at a time.\n\n**Not for** rewriting the query text (`develop:sql-pro`) or pool sizing (`develop:connection-pool-tuner`).\n\n## Process\n\n1. **Triage.** Engine and version, deployment type (self-managed or cloud-managed), direct access or not.\n2. **Baseline.** `EXPLAIN (ANALYZE, BUFFERS)`, latency, buffer hit rate.\n3. **Bottleneck.** Read the plan and server stats: costly nodes, absent indexes, stale statistics, lock waits, VACUUM lag.\n4. **One change.** Index, parameter, or partition; PostgreSQL indexes `CONCURRENTLY`; rehearse outside production.\n5. **Measure.** Re-run the baseline; keep or revert. Revert if writes slow or replicas fall behind. Then the next change. Before sending, recount the tally against the change lines; fix the header if they differ.\n\n| Plan signal | Suggests | Usual first move |\n|-------------|----------|------------------|\n| `Seq Scan` over a big table | Few rows kept, nothing indexed | B-tree index on the filtered column |\n| `Nested Loop`, large outer side | Inner re-probed per outer row | Index the inner join key, or let a hash join win |\n| Estimated `rows=1`, actual 50000 | Statistics out of date | `ANALYZE` the table |\n| `Buffers: hit=40 read=120000` | Pages mostly from disk | Grow `shared_buffers`, or add a covering index |\n| `Sort Method: external merge  Disk` | Sort overflowed memory | Raise `work_mem` for that session or role |\n\n| Area | File | Read when |\n|------|------|-----------|\n| Plans and query shape | `references\u002Fquery-optimization.md` | Reading EXPLAIN output, slow statements |\n| Index design | `references\u002Findex-design-patterns.md` | B-tree, covering, partial, expression |\n| PostgreSQL memory and WAL | `references\u002Fpostgresql-memory-wal.md` | shared_buffers, work_mem, WAL |\n| PostgreSQL VACUUM and locking | `references\u002Fpostgresql-vacuum-locking.md` | VACUUM, locks, SKIP LOCKED, advisory locks, lock order |\n| MySQL memory and I\u002FO | `references\u002Fmysql-memory-io.md` | InnoDB memory, I\u002FO |\n| Monitoring | `references\u002Fmonitoring-postgresql.md`, `references\u002Fmonitoring-mysql.md` | pg_stat_statements, locks; performance schema, InnoDB status |\n\n## Output Template\n\n```\n## DB tuning — \u003Csystem> (\u003Cengine> \u003Cversion>, \u003Cself-managed | managed>)\n\nBaseline: \u003Clatency, plan cost, hit rate>\nChange \u003Cn>: \u003Cwhat> → after \u003Cnumbers> → keep | revert\nMonitoring to keep: \u003Cmetrics>\n\n\u003Cn> changes · \u003Ck> kept · \u003Cr> reverted · \u003Cu> unverified\n```\n\n## What Claude Does \u002F What You Do\n\n| Claude | You |\n|--------|-----|\n| Reads EXPLAIN, names the bottleneck, proposes one change | Provide the actual EXPLAIN output and engine\u002Fdeployment facts |\n| Writes the parameter or index change and the validation queries | Apply via parameter group or `ALTER SYSTEM`; run `CREATE INDEX CONCURRENTLY` |\n| Flags managed-platform constraints | Confirm the gain on production-sized data |\n\n## Related Skills\n\n- `develop:sql-pro` — rewrite slow queries once the server is configured\n- `develop:connection-pool-tuner` — pool sizing after server config is validated\n- `develop:sre-engineer` — monitoring and alerting on database golden signals\n",{"name":5,"license":15,"metadata":57,"scenarios":65,"description":7,"compatibility":71},{"role":58,"scope":59,"domain":60,"version":61,"triggers":62,"output-format":63,"related-skills":64},"specialist","optimization","infrastructure","1.1.0","server-side database tuning, vacuum lag, lock waits, buffer pool sizing, partitioning, EXPLAIN ANALYZE reading","findings-with-config-and-sql","sql-pro, connection-pool-tuner, sre-engineer",[66,67,68,69,70],"Our database queries are slow and we're hitting performance bottlenecks","Help me optimize this SQL query that takes 30 seconds on a 10M row table","Need to scale our PostgreSQL database — it can't handle current load","DB 쿼리가 너무 느려서 서비스 응답시간이 30초야","PostgreSQL 성능 최적화 방법을 알려줘",{"optional":72,"recommended":74,"remote_mcp_note":76},[73],"sequential-thinking",[75],"think-tool","think-tool이 있으면 병목 원인 분석과 최적화 우선순위 결정을 더 체계적으로 수행합니다. sequential-thinking은 베이스라인 캡처 → 변경 → 검증 순서를 강제합니다. Claude 설정 → MCP Servers에서 remote SSE 엔드포인트를 추가하세요.","main","cdb89e1460a1035ae4d122ee0b33344216b2cbfe","develop\u002Fskills\u002Fdatabase-optimizer",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":86,"prompt":96,"zipAvailable":97},[87,90,93],{"tool":88,"command":89},"npx","npx skills add newkayak12\u002Fclaude-skills --skill database-optimizer",{"tool":91,"command":92},"bunx","bunx skills add newkayak12\u002Fclaude-skills --skill database-optimizer",{"tool":94,"command":95},"pnpm","pnpm dlx skills add newkayak12\u002Fclaude-skills --skill database-optimizer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdatabase-optimizer\u002FSKILL.md",true,[99,105,109,113,117,121,125],{"path":100,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002Findex-design-patterns.md","REFERENCE","参考文档",3942,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdatabase-optimizer\u002Freferences\u002Findex-design-patterns.md",{"path":106,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":107,"sourceHtmlUrl":108},"references\u002Fmonitoring-mysql.md",2248,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdatabase-optimizer\u002Freferences\u002Fmonitoring-mysql.md",{"path":110,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":111,"sourceHtmlUrl":112},"references\u002Fmonitoring-postgresql.md",3355,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdatabase-optimizer\u002Freferences\u002Fmonitoring-postgresql.md",{"path":114,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":115,"sourceHtmlUrl":116},"references\u002Fmysql-memory-io.md",4326,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdatabase-optimizer\u002Freferences\u002Fmysql-memory-io.md",{"path":118,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":119,"sourceHtmlUrl":120},"references\u002Fpostgresql-memory-wal.md",3529,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdatabase-optimizer\u002Freferences\u002Fpostgresql-memory-wal.md",{"path":122,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":123,"sourceHtmlUrl":124},"references\u002Fpostgresql-vacuum-locking.md",5091,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdatabase-optimizer\u002Freferences\u002Fpostgresql-vacuum-locking.md",{"path":126,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":127,"sourceHtmlUrl":128},"references\u002Fquery-optimization.md",4156,"https:\u002F\u002Fgithub.com\u002Fnewkayak12\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fdevelop\u002Fskills\u002Fdatabase-optimizer\u002Freferences\u002Fquery-optimization.md",[130,152,177,197,217,236],{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"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",[],[132,137,138,139,140,141,142,143,144,48,145,46,146,147,42,148,37,149,150,151],"web","architecture","mermaid","browser","cache","redis","api","b-tree","page","er","postgres","layout","as","chart","SVG",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":162,"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",[158,161],{"categoryNo":159,"categoryName":160,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[163,164,165,166,44,167,168,169,170,49,171,172,48,173,174,46,175,43,176,37],"test","master","test master","testing","writing","unit tests","development","qa","test plan","plan","analyze","coverage","only","tests",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":184,"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",[183],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[45,35,185,44,186,187,48,188,46,189,190,191,192,193,194,43,195,196,176,37],"sre engineer","observability","SET","fix","reliability","slo","sli","burn-rate","alert","up","call","define",{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":206,"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",[203,204,205],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},[207,208,209,44,167,210,211,212,32,49,48,47,213,214,46,215,35,216,42,34],"sql","sql pro","design","oracle","boot","code","spring","strategy","schema","functions",{"skillNo":218,"name":219,"nameZh":6,"description":220,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":221,"categories":222,"keywords":228,"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",[223,224,225],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":226,"categoryName":227,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师",[211,229,213,35,230,44,138,212,231,32,232,143,233,48,234,46,42,235,34,37],"spring boot","spring boot engineer","authentication","java","configure","kotlin","caching",{"skillNo":237,"name":238,"nameZh":6,"description":239,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":240,"categories":241,"keywords":243,"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",[242],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[244,245,169,246,247,44,248,249,250,251,49,48,252,46,253,254,43,255,256,37],"spec","spec driven development","spec driven","driven","implement","tasks","acceptance","first","write","think","do","acceptance criteria","feature"]