misc/skills/erd/SKILL.md
ERD(Entity-Relationship Diagram)를 Mermaid .mmd 파일로 생성·갱신하는 스킬. 요구사항 문서(PRD, DDD 산출물, 러프한 설명)로 초안을 작성하거나, 기존 소스코드(TypeORM, Prisma, Drizzle, JPA, SQL DDL, Django 등)를 읽어 실제 테이블 구조와 ERD를 동기화한다. 개념·논리·물리 3종 ERD를 지원하며 다크 테마 + handDrawn 스타일로 출력한다. "ERD 만들어줘", "테이블 관계도", "DB 설계 시각화", "엔티티 관계 다이어그램", "코드에서 ERD 뽑아줘", "ERD 동기화", "스키마 시각화", "데이터 모델링", "개념 ERD", "논리 ERD", "물리 ERD", "mermaid ERD", "DB 스키마 그려줘", "테이블 설계", "ORM 엔티티 ERD" 등의 요청에 트리거한다. 다른 스킬이나 외부 환경에 의존하지 않고 독립 실행된다.
npx skillsauth add dev-goraebap/skills erdInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
ERD를 Mermaid .mmd 파일로 생성하고 지속 관리하는 스킬. 요구사항 단계의 초안 작성부터 구현 이후 코드 동기화까지 ERD의 전체 생명주기를 담당한다.
references/에 HR 플랫폼 도메인 완성 예제 3종이 있다. ERD 생성 시 해당 수준의 파일을 읽고 구조·문법·스타일링을 그대로 따른다.
| 수준 | 파일 | 설명 |
|------|------|------|
| Conceptual | references/conceptual-erd-example.mmd | 엔티티 + 관계만, 속성 없음 |
| Logical | references/logical-erd-example.mmd | 한글 속성명 + 추상 타입 + PK/FK |
| Physical | references/physical-erd-example.mmd | 영문 컬럼명 + DB 종속 타입 + 인덱스 |
⚠️ 미정으로 기록.스킬 시작 시 항상 먼저 묻는다:
ERD를 어떻게 만들까요?
1) 요구사항 기반 — PRD·DDD 산출물·러프한 설명으로 초안 작성
2) 코드 동기화 — 소스코드에서 테이블 구조를 읽어 ERD 생성·갱신
3) 기존 ERD 수정 — .mmd 파일을 열어 수정·수준 전환·색상 변경
모드 선택 후 아래 항목을 순서대로 확인한다.
어떤 수준의 ERD를 원하시나요?
1) 개념(Conceptual) — 엔티티와 관계만 (속성 없음)
2) 논리(Logical) — 한글 속성명 + 추상 타입 + PK/FK
3) 물리(Physical) — 영문 컬럼명 + DB 종속 타입 + 인덱스
수준 미정이면 ⚠️ 미정으로 두고 논리를 기본값으로 사용한다.
ERD 파일을 어디에 저장할까요?
1) docs/
2) design/
3) docs/erd/
4) 직접 입력
폴더가 없으면 생성한다.
파일명 프리픽스를 알려주세요.
(예: "hr-platform" → hr-platform-logical-erd.mmd)
미입력 시 erd 를 기본값으로 사용한다 (erd-logical-erd.mmd).
다음 형태를 모두 수용한다:
.md, .pdf, .txt — PRD, 요구사항 정의서, DDD 산출물)도출 결과를 사용자에게 표로 보여주고 확인받는다:
아래 엔티티와 관계를 도출했습니다. 맞나요?
엔티티: 회원, 주문, 상품, 결제, 배송
주요 관계:
- 회원 1:N 주문
- 주문 N:M 상품 (주문상품 연결 테이블)
- 주문 1:1 결제
- 주문 1:1 배송
추가하거나 수정할 것이 있으면 알려주세요.
소스코드에서 테이블 구조를 읽어 ERD를 생성하거나 기존 ERD를 갱신한다.
테이블 정의가 있는 파일 또는 폴더 경로를 알려주세요.
예시:
- src/entities/ (TypeORM 엔티티 폴더)
- prisma/schema.prisma (Prisma 스키마 파일)
- src/db/schema.ts (Drizzle 스키마 파일)
- src/main/java/.../domain/ (JPA 엔티티 폴더)
- db/migrations/ (SQL DDL 마이그레이션 폴더)
- 여러 경로는 쉼표로 구분
파일을 읽은 뒤 아래 패턴으로 엔티티·컬럼·관계를 식별한다.
| ORM / 방식 | 엔티티 식별 | 컬럼 식별 | 관계 식별 |
|-----------|-----------|---------|---------|
| TypeORM | @Entity() 데코레이터 클래스 | @Column(), @PrimaryGeneratedColumn(), @CreateDateColumn() | @ManyToOne(), @OneToMany(), @OneToOne(), @ManyToMany() |
| Prisma | model Xxx { } 블록 | 필드 정의 라인 (id Int @id 등) | @relation(), 필드 타입이 다른 model인 경우 |
| Drizzle | pgTable(), mysqlTable(), sqliteTable() 호출 | text(), integer(), boolean(), timestamp() 등 | references: () => |
| JPA (Java/Kotlin) | @Entity, @Table 어노테이션 클래스 | @Column, @Id, @GeneratedValue | @ManyToOne, @OneToMany, @JoinColumn |
| SQL DDL | CREATE TABLE 테이블명 | 컬럼 정의 라인 | FOREIGN KEY ... REFERENCES |
| Django | models.Model 상속 클래스 | models.CharField(), models.IntegerField() 등 | models.ForeignKey(), models.ManyToManyField() |
파싱이 불확실한 부분은 사용자에게 확인한다.
소스코드에서 아래 구조를 추출했습니다.
테이블 목록:
- users (id, email, name, created_at)
- posts (id, user_id, title, body, published_at)
- comments (id, post_id, user_id, content, created_at)
관계:
- users 1:N posts
- users 1:N comments
- posts 1:N comments
맞나요? 누락되거나 잘못 읽힌 테이블이 있으면 알려주세요.
확인 후 선택한 수준의 ERD를 생성한다.
기존 .mmd 파일이 있으면:
기존 ERD 파일이 있습니다: ./docs/erd-logical-erd.mmd
코드와 비교한 결과:
추가된 테이블: refresh_tokens
삭제된 테이블: (없음)
변경된 컬럼: users.nickname 추가
기존 ERD를 갱신할까요?
1) 갱신한다 (변경 사항만 반영)
2) 새 파일로 생성한다
.mmd 파일 경로를 제공받아 열고, 아래 작업을 수행한다:
| 변환 | 처리 | |------|------| | 개념 → 논리 | 각 엔티티에 한글 속성명 + 추상 타입 추가 | | 논리 → 물리 | 속성명 → 영문 snake_case, 타입 → DB 종속 타입, 인덱스/DEFAULT 추가 | | 물리 → 논리 | 영문→한글, DB 타입→추상 타입으로 역변환 | | 논리 → 개념 | 속성 블록 비움 |
| 수준 | 엔티티 | 속성명 | 타입 | PK/FK | 인덱스/DDL | 관계 라벨 |
|------|--------|--------|------|-------|-----------|----------|
| Conceptual | O | X | X | X | X | 한글 동사 |
| Logical | O | 한글 | 추상 (Long, String, Enum 등) | O | X | 한글 동사 |
| Physical | O | 영문 snake_case | DB 종속 (BIGINT, VARCHAR(50) 등) | O | O | 영문 동사 |
추상 타입 목록 (논리 ERD 전용): Long, String, Int, Float, Boolean, Date, DateTime, Text, Enum
---
config:
theme: dark
look: handDrawn
layout: elk
---
erDiagram
direction BT
엔티티 정의들...
관계 정의들...
엔티티:::클래스 적용들...
classDef 정의들...
순서가 중요하다: 엔티티 → 관계 → 클래스 적용 → classDef 정의 순으로 작성해야 스타일이 적용된다.
type name [PK|FK|UK] ["comment"]
PK, FK, UK, 복합은 PK, FK (선택)"")%% 논리 예시
Long 직원ID PK ""
String 이메일 "UQ"
Enum 재직상태 "NN"
%% 물리 예시
BIGINT employee_id PK "AUTO_INCREMENT"
VARCHAR(255) email "UQ, NN"
TIMESTAMP created_at "NN, DEFAULT NOW()"
개념 ERD에서는 엔티티 블록을 비워둔다:
직원 :::blue {
}
엔티티A||--o{엔티티B:"관계동사"
| 카디널리티 | Mermaid 표기 |
|-----------|-------------|
| 1:1 | \|\|--\|\| |
| 1:N | \|\|--o{ |
| N:1 | }o--\|\| |
| N:M | }o--o{ |
| 0..1 | \|\|--o\| |
classDef blue stroke-width:1px,stroke-dasharray:none,stroke:#5b6ef5,fill:#1a2040,color:#a4b0ff
classDef teal stroke-width:1px,stroke-dasharray:none,stroke:#2dd4bf,fill:#0d2926,color:#7eecd8
classDef gold stroke-width:1px,stroke-dasharray:none,stroke:#f0c040,fill:#2a2408,color:#f5d87a
classDef green stroke-width:1px,stroke-dasharray:none,stroke:#4ade80,fill:#0f2518,color:#8aedb3
classDef orange stroke-width:1px,stroke-dasharray:none,stroke:#fb923c,fill:#2a1a0d,color:#fdb97a
classDef red stroke-width:1px,stroke-dasharray:none,stroke:#f87171,fill:#2a1414,color:#fba4a4
classDef purple stroke-width:1px,stroke-dasharray:none,stroke:#e879f9,fill:#1f0e2a,color:#f0a8fc
classDef lime stroke-width:1px,stroke-dasharray:none,stroke:#a3e635,fill:#1a2408,color:#c4ee7a
classDef slate stroke-width:1px,stroke-dasharray:none,stroke:#94a3b8,fill:#1a1e24,color:#b8c4d4
classDef cyan stroke-width:1px,stroke-dasharray:none,stroke:#67e8f9,fill:#0e2428,color:#9ef0fb
classDef amber stroke-width:1px,stroke-dasharray:none,stroke:#fbbf24,fill:#2a2208,color:#fcd76a
classDef pink stroke-width:1px,stroke-dasharray:none,stroke:#f472b6,fill:#2a1020,color:#f9a4d0
classDef indigo stroke-width:1px,stroke-dasharray:none,stroke:#818cf8,fill:#181a30,color:#b0b8fb
classDef violet stroke-width:1px,stroke-dasharray:none,stroke:#a78bfa,fill:#1e1630,color:#c8b4fc
classDef sky stroke-width:1px,stroke-dasharray:none,stroke:#38bdf8,fill:#0e1e2a,color:#7ed4fb
엔티티 수가 15개를 초과하면 색상을 재사용하거나 새 색상을 추가한다.
파일 저장 후 사용자에게 안내한다:
✅ ERD 파일을 저장했습니다: ./docs/hr-platform-logical-erd.mmd
VS Code에서 프리뷰하려면:
1. 파일 열기
2. Mermaid Preview 확장 설치 (없는 경우): bierner.markdown-mermaid 또는 Mermaid Editor
3. Ctrl+Shift+P → "Mermaid: Preview" 실행
수정이 필요하면 언제든지 말씀해 주세요.
□ 진입 모드 선택됨 (요구사항 / 코드 동기화 / 기존 수정)
□ ERD 수준 선택됨 (개념 / 논리 / 물리)
□ 저장 위치 확인됨
□ 파일명 프리픽스 확인됨
□ 도출/추출 결과 사용자 확인 완료
□ 해당 수준의 references/ 예제 파일을 읽고 구조 확인함
□ 엔티티 → 관계 → 클래스 적용 → classDef 순서 준수
□ 모든 엔티티에 색상 배정됨
□ 파일 저장 후 VS Code 프리뷰 안내 출력
ddd-workshop 등)의 설치 여부를 확인하거나 의존.testing
도메인 일반 패턴을 강의 모드로 가르치는 인지과학 기반 학습 스킬. AI가 가상 도메인 전문가(선생님) 역할을 하고 사용자가 학생으로 낯선 도메인을 차근차근 배운다. 메뉴로 시작해서 페이즈를 골라 잠수 → 능동 회상 Q&A → 자기 설명(Feynman) 순서로 진행. Dunlosky 메타분석 기반 인지과학 8원칙(Cognitive Load, Practice Testing, 정교화 질문, Self-Explanation, Schema 연결, Dual Coding, Desirable Difficulty, 분산 학습)을 본문에 명시 적용. 도메인의 법령·산업 표준·인증을 학습 본문에 정식 통합 (출처 인용이 아니라 학습 대상). AI가 판단해 보편적이고 자료 풍부한 도메인은 자료 요청 없이 진행, 좁고 깊은 도메인일 때만 사용자에게 자료 있는지 묻기. 산출물은 학습 노트 스타일 (진도 체크박스 + 페이즈별 일관 구조 + 출처 링크). 페르소나 강요 없이 보편 액터 표현("사원 A", "관리자 A"). bigpicture의 이전 단계로 작동하거나 단독 사용 가능. Triggers — "도메인 학습", "낯선 도메인 가르쳐줘", "이 산업 어떻게 굴러가요", "선생님 모드", "1:1 강의", "도메인 입문", "도메인 일반 패턴", "HR 플랫폼이 뭔지", "이커머스 흐름", "domain classroom", "/domain-classroom".
development
빅픽처 이벤트스토밍의 1:1 분석 도구. 학습 단계(domain-classroom)에서 머리에 박힌 도메인 일반 패턴을 클라이언트 시스템에 매핑해 빅픽처 산출물(시간순 도메인 이벤트·페이즈·액터·외부시스템·핫스팟·피벗)을 누적한다. domain-classroom의 학습 노트(docs/learning-notes/{도메인}- classroom.md)와 클라이언트 자료(RFP·요구사항정의서·기존 시스템 스키마)를 입력으로 받아 페이즈 단위로 진행. 페르소나·서사 없는 분석 톤. 도메인 이벤트 판별 4기준(도메인 전문가 관심·비즈니스 상태 변화·법적 의미·다른 흐름 트리거)을 명시 적용해 UI/Telemetry 이벤트 혼입 방지. 이벤트는 한국어 자연어 + Code Identifier 이중 표기. 핫스팟에 ID·답할 위치·확신도 태그 부여. 산출물은 docs/eventstorming.md 단일 파일로 시작, 후속 단계 스킬(process-modeling·software-design)이 추가될 때 폴더로 자연 분기. Initial/Update/Cycle 모드 지원 — 코드 작성 후에도 다시 사이클 가능. Triggers — "빅픽처", "빅픽처 만들어줘", "이벤트스토밍", "도메인 이벤트 정리", "Big Picture EventStorming", "페이즈 매핑", "도메인 산출물 정리", "/bigpicture".
data-ai
빅픽처 이벤트스토밍의 1:1 학습 친화 변형. 그룹 워크샵에서 도메인 전문가가 던지는 이벤트를 받아 적는 대신, AI가 가상 도메인 전문가 역할을 하고 사용자가 학습자로 1:1 인터뷰하며 빅픽처를 누적한다. 산출물(시간순 도메인 이벤트·액터· 외부시스템·핫스팟·피벗)은 빅픽처 이벤트스토밍과 거의 동일하지만, 한 보드에 한 번에 펼치는 방식이 아니라 **한 액터·한 챕터씩 시간순 서사로 누적**한다. 각 장면마다 "왜 이게 필요한가?" 설명을 곁들여 학습자가 따라올 수 있게 한다. RFP·요구사항정의서·기존 도메인 자료를 입력으로 받거나, 자료가 없으면 AI 사전 리서치(보편 사례·법령·산업 표준)로 보충해 진행. 페르소나 시점의 챕터 단위 (5~7개 장면) + 확신도 태그 [확실/일반론/추측]로 검증 지점 명시 + 사용자 인터랙션 + 액터 전환으로 빅픽처를 점진적으로 채운다. 산출물 저장은 옵셔널 — 이해 자체가 목적이다. Triggers — "낯선 도메인 이해", "도메인 차근차근 알려줘", "1:1 빅픽처", "솔로 이벤트스토밍", "RFP 분석", "비즈니스 흐름 이해", "액터 시나리오", "신규 프로젝트 도메인 파악", "빅픽처 스토리타임", "bigpicture storytime", "/bigpicture-storytime".
databases
PostgreSQL DB에 직접 접근하는 스킬. DB 조회, 테이블 구조 확인, 데이터 검증이 필요할 때 사용한다. Node.js 스크립트로 직접 연결하며 접속 정보는 환경변수 또는 credentials 파일에서 읽는다. "postgres 조회", "DB 확인", "테이블 구조", "pg-query", "쿼리 실행", "데이터 검증", "PostgreSQL 접속" 같은 요청에 트리거한다.