Claude 프롬프트 가이드 MCP
MCP로 연결된 Claude에게 자연어로 ERD를 그리는 방법입니다. 아래 예시를 그대로 복사하거나 참고해 말해보세요.
먼저 MCP 연결이 완료되어 있어야 합니다.
연결 방법은 MCP 연결 가이드를 참고하세요.
연결 후 Claude Code에서 "yourerd MCP가 연결됐어?" 라고 확인해보세요.
엔티티 생성
단일 엔티티
"사용자 엔티티 만들어줘"
User 엔티티 + 기본 id(PK) 컬럼이 생성됩니다.
"회원(User) 엔티티를 만들어줘. 논리명은 '회원'으로."
물리명 User, 논리명 회원인 엔티티가 생성됩니다.
여러 엔티티 한 번에
"사용자, 주문, 상품 엔티티 만들어줘"
세 개의 엔티티가 각각 기본 PK와 함께 생성됩니다.
"쇼핑몰 ERD에 필요한 엔티티들 전부 만들어줘 — 회원, 상품, 주문, 주문상세, 배송, 카테고리 포함"
6개 엔티티가 순서대로 생성됩니다.
엔티티 이름 변경
"User 엔티티 이름을 Member로 바꿔줘"
"Order 엔티티의 논리명을 '주문정보'로 수정해줘"
컬럼 추가 / 수정
기본 컬럼 추가
"User 엔티티에 username, email, password 컬럼 추가해줘"
세 컬럼이 VARCHAR 타입으로 추가됩니다.
"Product 엔티티에 name(VARCHAR 200), price(DECIMAL), stock(INT), created_at(DATETIME) 컬럼 추가해줘"
타입·크기가 지정된 컬럼이 추가됩니다.
논리명(한글명) 포함
"User 엔티티에 다음 컬럼 추가해줘:
- username (사용자명) VARCHAR(50)
- email (이메일) VARCHAR(200) UNIQUE
- phone (휴대폰번호) VARCHAR(20)
- created_at (가입일시) DATETIME"
- username (사용자명) VARCHAR(50)
- email (이메일) VARCHAR(200) UNIQUE
- phone (휴대폰번호) VARCHAR(20)
- created_at (가입일시) DATETIME"
제약 조건 지정
"Order 엔티티에 status (주문상태) VARCHAR(20) NOT NULL, ordered_at (주문일시) DATETIME NOT NULL 추가해줘"
"Product 엔티티의 price 컬럼을 DECIMAL(12,2)로 변경하고 NOT NULL로 설정해줘"
PK 설정
"User 엔티티의 id 컬럼 이름을 user_id로 바꾸고 PK 유지해줘"
⚠️ PK 컬럼은 삭제 금지입니다. 관계에서 FK로 참조 중인 PK를 삭제하면 FK 컬럼이 끊깁니다. PK를 교체하고 싶으면 먼저 관계를 삭제하고 PK를 변경한 뒤 관계를 다시 만드세요.
관계 설정
1:N 비식별 관계 (가장 일반적)
"User와 Order를 1:N으로 연결해줘 — 한 사용자가 여러 주문을 가질 수 있어"
Order 엔티티에 user_id FK가 자동 생성됩니다.
"Category와 Product를 1:N 비식별 관계로 연결해줘"
1:N 식별 관계 (자식이 부모 PK 포함)
"Order와 OrderItem을 1:N 식별 관계로 연결해줘 — OrderItem은 Order 없이 존재할 수 없어"
OrderItem의 FK(order_id)가 복합 PK의 일부로 설정됩니다.
1:1 관계
"User와 UserProfile을 1:1로 연결해줘"
"Order와 Payment를 1:1 식별 관계로 연결해줘 — 결제는 주문 없이 존재할 수 없어"
관계 한 번에 여러 개
"다음 관계를 설정해줘:
- User → Order (1:N 비식별)
- Order → OrderItem (1:N 식별)
- Product → OrderItem (1:N 비식별)"
- User → Order (1:N 비식별)
- Order → OrderItem (1:N 식별)
- Product → OrderItem (1:N 비식별)"
관계 타입 변경
"User-Order 관계를 식별 관계로 바꿔줘"
"Order-OrderItem 관계를 비식별로 변경해줘"
식별 vs 비식별 선택 기준:
• 식별 관계: 자식 레코드가 부모 없이 의미 없을 때 (주문상세, 결제이력 등)
• 비식별 관계: 자식이 독립적으로도 존재 가능할 때 (게시글-작성자, 상품-카테고리 등)
• 식별 관계: 자식 레코드가 부모 없이 의미 없을 때 (주문상세, 결제이력 등)
• 비식별 관계: 자식이 독립적으로도 존재 가능할 때 (게시글-작성자, 상품-카테고리 등)
삭제
"Address 엔티티 삭제해줘"
엔티티와 해당 엔티티를 참조하는 FK 컬럼이 함께 제거됩니다.
"User-Address 관계 제거해줘"
관계선과 자동 생성된 FK 컬럼이 제거됩니다.
"Product 엔티티에서 description 컬럼 삭제해줘"
시나리오 — 쇼핑몰 ERD
처음부터 한 번에 요청하면 Claude가 전체 구조를 설계합니다.
"쇼핑몰 ERD를 만들어줘. 아래 구조로:
엔티티:
- User (회원): id, username(사용자명), email(이메일), phone(휴대폰), created_at(가입일시)
- Product (상품): id, name(상품명), price(가격) DECIMAL, stock(재고수량) INT, category_id FK
- Category (카테고리): id, name(분류명), parent_id(상위카테고리)
- Order (주문): id, user_id FK, status(주문상태), total(합계금액) DECIMAL, ordered_at(주문일시)
- OrderItem (주문상세): order_id FK+PK, product_id FK+PK, qty(수량) INT, price(단가) DECIMAL
- Delivery (배송): id, order_id FK, address(배송주소), status(배송상태), shipped_at(출고일시)
관계:
- Category → Product (1:N 비식별)
- User → Order (1:N 비식별)
- Order → OrderItem (1:N 식별)
- Product → OrderItem (1:N 비식별)
- Order → Delivery (1:1)"
엔티티:
- User (회원): id, username(사용자명), email(이메일), phone(휴대폰), created_at(가입일시)
- Product (상품): id, name(상품명), price(가격) DECIMAL, stock(재고수량) INT, category_id FK
- Category (카테고리): id, name(분류명), parent_id(상위카테고리)
- Order (주문): id, user_id FK, status(주문상태), total(합계금액) DECIMAL, ordered_at(주문일시)
- OrderItem (주문상세): order_id FK+PK, product_id FK+PK, qty(수량) INT, price(단가) DECIMAL
- Delivery (배송): id, order_id FK, address(배송주소), status(배송상태), shipped_at(출고일시)
관계:
- Category → Product (1:N 비식별)
- User → Order (1:N 비식별)
- Order → OrderItem (1:N 식별)
- Product → OrderItem (1:N 비식별)
- Order → Delivery (1:1)"
단계별로 나눠서 만들기
1단계 — 엔티티 골격
"User, Product, Order, OrderItem 엔티티 만들어줘"
2단계 — 컬럼 채우기
"User에 email, password, created_at 컬럼 추가해줘"
"Product에 name, price(DECIMAL), stock(INT) 추가해줘"
3단계 — 관계 연결
"User→Order 1:N, Order→OrderItem 1:N 식별 관계 설정해줘"
4단계 — 검토 요청
"현재 다이어그램의 엔티티 목록이랑 관계 구조 알려줘"
"누락된 컬럼이나 정규화 문제가 있으면 말해줘"
시나리오 — 블로그 / 커뮤니티
"블로그 ERD 만들어줘:
- User (사용자): id, nickname(닉네임), email(이메일), created_at(가입일)
- Post (게시글): id, user_id FK, title(제목), content(본문) TEXT, published_at(게시일)
- Comment (댓글): id, post_id FK, user_id FK, content(내용), created_at(작성일)
- Tag (태그): id, name(태그명) UNIQUE
- PostTag (게시글-태그): post_id FK+PK, tag_id FK+PK
관계:
- User → Post (1:N 비식별)
- Post → Comment (1:N 식별)
- User → Comment (1:N 비식별)
- Post → PostTag (1:N 식별)
- Tag → PostTag (1:N 비식별)"
- User (사용자): id, nickname(닉네임), email(이메일), created_at(가입일)
- Post (게시글): id, user_id FK, title(제목), content(본문) TEXT, published_at(게시일)
- Comment (댓글): id, post_id FK, user_id FK, content(내용), created_at(작성일)
- Tag (태그): id, name(태그명) UNIQUE
- PostTag (게시글-태그): post_id FK+PK, tag_id FK+PK
관계:
- User → Post (1:N 비식별)
- Post → Comment (1:N 식별)
- User → Comment (1:N 비식별)
- Post → PostTag (1:N 식별)
- Tag → PostTag (1:N 비식별)"
N:M 관계 표현법: YourERD는 N:M을 직접 지원하지 않습니다.
중간 엔티티(PostTag, OrderItem 등)를 만들고 각각 1:N으로 연결하세요.
Claude에게 "Post와 Tag를 N:M으로 연결해줘"라고 하면 중간 테이블을 자동으로 만들어줍니다.
시나리오 — 인사 / 조직 관리
"인사 관리 시스템 ERD 만들어줘:
- Department (부서): id, name(부서명), manager_id(부서장) FK nullable
- Employee (직원): id, dept_id FK, name(이름), email(이메일), hire_date(입사일), salary(급여) DECIMAL
- Position (직급): id, name(직급명), level(레벨) INT
- EmployeePosition (직원-직급이력): id, emp_id FK, pos_id FK, assigned_at(발령일), ended_at(종료일) nullable
관계:
- Department → Employee (1:N 비식별)
- Employee → Department (1:1 비식별, manager_id — 자기 참조와 별개)
- Position → EmployeePosition (1:N 비식별)
- Employee → EmployeePosition (1:N 비식별)"
- Department (부서): id, name(부서명), manager_id(부서장) FK nullable
- Employee (직원): id, dept_id FK, name(이름), email(이메일), hire_date(입사일), salary(급여) DECIMAL
- Position (직급): id, name(직급명), level(레벨) INT
- EmployeePosition (직원-직급이력): id, emp_id FK, pos_id FK, assigned_at(발령일), ended_at(종료일) nullable
관계:
- Department → Employee (1:N 비식별)
- Employee → Department (1:1 비식별, manager_id — 자기 참조와 별개)
- Position → EmployeePosition (1:N 비식별)
- Employee → EmployeePosition (1:N 비식별)"
시나리오 — 재귀 / 계층 구조
YourERD는 자기 자신에게 관계선을 연결하는 재귀 관계를 지원합니다.
단순 재귀 (상위-하위)
"Category 엔티티를 만들고 자기 자신과 1:N 비식별 재귀 관계 설정해줘 — 상위 카테고리-하위 카테고리 계층 구조"
Category 엔티티에 parent_id FK가 자동 추가되고 자기 참조 루프 관계선이 생깁니다.
"Employee 엔티티에 manager(관리자) 자기 참조 관계 추가해줘 — 한 직원이 여러 부하 직원을 가질 수 있어"
"Comment 엔티티에 대댓글 지원을 위해 parent_comment_id 자기 참조 관계 추가해줘 (선택 참여, nullable)"
무한 계층 (중첩 경로)
"폴더 계층 구조 ERD 만들어줘:
- Folder: id, name(폴더명), owner_id FK, parent_id(상위폴더) 자기참조 FK nullable
- File: id, folder_id FK, name(파일명), size(크기) BIGINT, created_at
관계: User → Folder (1:N), Folder → Folder (1:N 재귀), Folder → File (1:N)"
- Folder: id, name(폴더명), owner_id FK, parent_id(상위폴더) 자기참조 FK nullable
- File: id, folder_id FK, name(파일명), size(크기) BIGINT, created_at
관계: User → Folder (1:N), Folder → Folder (1:N 재귀), Folder → File (1:N)"
효과적인 프롬프트 작성 팁
✅ 잘 되는 방식
물리명(영문)과 논리명(한글)을 함께 명시
데이터 타입을 명시 (VARCHAR, INT, DECIMAL…)
관계의 방향과 종류를 명확히 ("1:N 비식별")
한 번에 여러 단계를 묶어 요청
도메인 맥락을 설명 ("주문 없이 존재 불가")
⚠️ 주의할 점
N:M은 중간 엔티티로 나눠서 요청
FK PK를 직접 삭제하지 말 것
관계 후 PK명 변경 시 관계를 먼저 삭제
저장은 "이 다이어그램 저장해줘"로 명시
현재 상태 확인
"지금 다이어그램에 엔티티가 뭐뭐 있어?"
"User 엔티티의 컬럼 목록 보여줘"
"Order와 관계된 엔티티가 뭐야?"
저장 요청
"지금까지 작업한 거 DB에 저장해줘"
"'쇼핑몰 v2' 이름으로 새 다이어그램으로 저장해줘"
다이어그램 조회/전환
"내 다이어그램 목록 보여줘"
"'블로그 ERD' 다이어그램 열어줘"
데이터 타입 치트시트
Claude에게 타입을 명시할 때 아래 이름을 사용하면 정확하게 처리됩니다.
| 타입 | 용도 | Claude에게 말하는 방법 |
|---|---|---|
INT | 정수 (카운트, 수량, 인덱스) | "정수", "INT", "integer" |
BIGINT | 큰 정수 (파일크기, 타임스탬프) | "BIGINT", "큰 숫자" |
VARCHAR(n) | 가변길이 문자열 | "VARCHAR(100)", "문자열 100자" |
CHAR(n) | 고정길이 (코드, 전화번호) | "CHAR(10)", "고정 10자" |
TEXT | 긴 텍스트 (본문, 설명) | "TEXT", "긴 문자열", "본문" |
DECIMAL(p,s) | 정밀 소수 (금액, 비율) | "DECIMAL(12,2)", "금액", "가격" |
FLOAT | 부동소수점 (좌표, 통계) | "FLOAT", "실수" |
DATETIME | 날짜+시각 | "DATETIME", "일시", "타임스탬프" |
DATE | 날짜만 | "DATE", "날짜" |
BOOLEAN | 참/거짓 | "BOOLEAN", "bool", "참/거짓" |
UUID | 고유 식별자 (CHAR(36)로 저장) | "UUID" |
JSON | 비정형 데이터 | "JSON", "메타데이터" |