Claude Code의 플러그인 시스템을 사용하면 프로젝트와 팀 전체에서 공유할 수 있는 사용자 정의 기능으로 Claude Code를 확장할 수 있습니다.
마켓플레이스에서 미리 빌드된 플러그인을 설치하거나, 워크플로우 자동화를 위해 자신만의 플러그인을 만들 수 있습니다.
플러그인이란?
플러그인은 다음 구성 요소를 포함할 수 있는 확장 가능한 단위입니다:
- 명령(Commands): 슬래시 명령어로 실행되는 사용자 정의 기능
- 에이전트(Agents): 특정 작업에 특화된 전문화된 AI 어시스턴트
- 스킬(Skills): 모델의 기능을 확장하는 재사용 가능한 지식 베이스
- 훅(Hooks): 이벤트 핸들러를 통한 워크플로우 자동화
- MCP 서버: 외부 도구와 서비스에 연결
플러그인 구조
기본 플러그인 구조는 다음과 같습니다:
my-plugin/
├── .claude-plugin/ # 필수: 플러그인 메타데이터
│ └── plugin.json # 플러그인 매니페스트
├── commands/ # 선택: 슬래시 명령어
│ └── my-command.md
├── agents/ # 선택: 사용자 정의 에이전트
│ └── specialist.md
├── skills/ # 선택: 에이전트 스킬
│ └── my-skill/
│ └── SKILL.md
│ ├── README.md # 추가 문서 (선택)
│ └── examples/ # 예제 파일 (선택)
├── hooks/ # 선택: 이벤트 핸들러
│ └── hooks.json
│ └── pre-commit.py # 핸 스크립트
├── .mcp.json # 선택: MCP 서버 설정
└── README.md # 플러그인 문서
plugin.json 구조
플러그인 매니페스트 파일은 플러그인의 메타데이터를 정의합니다:
{
"name": "my-plugin",
"description": "플러그인에 대한 간단한 설명",
"version": "1.0.0",
"author": {
"name": "작성자 이름",
"email": "[email protected]"
},
"license": "MIT",
"claude": {
"minVersion": "1.0.0"
}
}
Commands (명령어)
사용자가 슬래시(/)로 실행하는 기능입니다.
Frontmatter 옵션:
---
description: "명령어에 대한 간단한 설명"
argument-hint: "<required-arg> [optional-arg]"
allowed-tools: [Read, Glob, Grep, Bash]
model: "opus"
---
# 명령어 제목
명령어가 실행될 때 수행할 작업을 설명합니다...
## Arguments
사용자가 제공한 인수: $ARGUMENTS
주요 Frontmatter 필드:
description:/help에 표시될 설명argument-hint: 인수 힌트 표시allowed-tools: 미리 승인된 도구 목록model: 사용할 모델 (haiku, sonnet, opus)
Agents (에이전트)
특정 작업에 특화된 전문 AI 어시스턴트입니다.
에이전트 구조:
---
name: specialist
description: "에이전트를 사용할 시기 설명"
model: inherit
color: yellow
tools: ["Read", "Grep", "Bash"]
---
당신은 전문 분야 전문가입니다...
**작업:**
1. 첫 번째 단계
2. 두 번째 단계
...
주요 Frontmatter 필드:
name: 에이전트 식별자description: 에이전트를 언제 사용할지 설명 (매우 중요!)model: 사용할 모델 (inherit, haiku, sonnet, opus)color: UI 표시 색상tools: 에이전트가 사용할 수 있는 도구
Skills (스킬)
Claude가 자동으로 사용하는 재사용 가능한 지식 베이스입니다.
스킬 구조:
skills/
└── my-skill/
└── SKILL.md # 필수
├── README.md # 선택
├── references/ # 참고 자료
└── examples/ # 예제 파일
Hooks (훅)
특정 이벤트 발생 시 자동으로 실행되는 핸들러입니다.
hooks.json 구조:
{
"description": "훅 플러그인 설명",
"hooks": {
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/hooks/pretooluse.py",
"timeout": 10
}
]
}
],
"PostToolUse": [...],
"UserPromptSubmit": [...],
"Stop": [...]
}
}
지원되는 훅 이벤트:
PreToolUse: 도구 사용 전PostToolUse: 도구 사용 후UserPromptSubmit: 사용자 프롬프트 제출 시Stop: 세션 중지 시
환경 변수:
${CLAUDE_PLUGIN_ROOT}: 플러그인 루트 경로
MCP 서버
외부 도구와 서비스에 연결합니다.
.mcp.json 구조:
{
"my-server": {
"type": "http",
"url": "https://api.example.com/mcp"
},
"local-server": {
"type": "command",
"command": "node",
"args": ["server.js"]
}
}
플러그인 설치 및 관리
마켓플레이스 추가
플러그인을 발견하고 설치하기 위해 마켓플레이스를 추가합니다:
/plugin marketplace add your-org/claude-plugins
플러그인 설치
# 특정 플러그인 설치
/plugin install formatter@your-org
# 플러그인 활성화
/plugin enable plugin-name@marketplace-name
# 플러그인 비활성화 (제거하지 않음)
/plugin disable plugin-name@marketplace-name
# 플러그인 완전 제거
/plugin uninstall plugin-name@marketplace-name
첫 번째 플러그인 만들기
간단한 인사말 명령을 추가하는 플러그인을 만들어 봅시다.
1. 플러그인 폴더 생성
mkdir -p hello-plugin/.claude-plugin
cd hello-plugin
2. plugin.json 작성
{
"name": "hello-plugin",
"version": "1.0.0",
"description": "간단한 인사말 명령을 제공합니다",
"author": "your-name"
}
3. 명령 추가
commands/hello.md 파일을 생성합니다:
---
description: "친결한 인사말을 출력합니다"
---
안녕하세요! Claude Code 플러그인 개발에 온 것을 환영합니다!
4. 로컬에서 테스트
/plugin marketplace add ./
/plugin install hello-plugin
/hello
스킬 추가하기
플러그인에 에이전트 스킬을 추가하여 Claude의 기능을 확장할 수 있습니다.
스킬 구조
skills/
└── code-review/
└── SKILL.md
SKILL.md 예제
---
description: "코드를 리뷰하고 개선 사항을 제안합니다"
parameters:
- name: code
description: "리뷰할 코드"
required: true
---
# 코드 리뷰
제공된 코드를 분석하고 다음 측면에서 리뷰합니다:
1. **버그 및 잠니ial 오류**
2. **성능 최적화 기회**
3. **코드 스타일 일치성**
4. **보안 문제**
...
팀 플러그인 설정
저장소 수준에서 플러그인을 구성하면 팀 전체에서 일관된 도구를 사용할 수 있습니다.
.claude/settings.json 구성
{
"marketplaces": [
"your-org/shared-plugins"
],
"plugins": {
"shared-formatter": {
"source": "marketplace",
"marketplace": "your-org/shared-plugins",
"enabled": true
}
}
}
활용 예제
예제 1: 코드 포멧팅 플러그인
프로젝트의 코딩 스타일을 자동으로 적용하는 플러그인:
{
"name": "project-formatter",
"hooks": {
"pre-commit": "format-code"
}
}
예제 2: API 문서 생성 스킬
API 엔드포인트에서 자동으로 문서를 생성하는 스킬:
---
description: "API 엔드포인트에서 문서를 생성합니다"
---
엔드포인트를 분석하고 OpenAPI 스펵명을 생성합니다...
예제 3: 배포 자동화
CI/CD 파이프라인과 연동하여 자동으로 배포하는 훅:
{
"hooks": {
"after-success": "deploy-to-production"
}
}
MCP 개발 베스트 프랙티스
MCP 도구 개발 시 다음 원칙을 따르면 더 효과적인 플러그인을 만들 수 있습니다:
1. 더 적은, 더 초점화된 도구
하나의 API 엔드포인트마다 별도의 도구를 만들지 마세요. 대신 다단계 오퍼레이션을 하나의 도구로 통합하세요.
나쁜 예제:
// 나쁜: 엔드포인트마다 분리된 도구
{
"name": "list_users",
"description": "사용자 목록을 가져옵니다"
}
{
"name": "create_event",
"description": "이벤트를 생성합니다"
}
좋은 예제:
// 좋은: 하나의 도구로 다단계 오퍼레이션 처리
{
"name": "schedule_event",
"description": "사용자를 탐색하고 이벤트를 예약합니다",
"parameters": {
"user_query": "사용자 탐색 쿼리",
"event_details": "이벤트 세부 정보"
}
}
2. 서비스/리소스별 네임스페이스
도구 이름을 서비스나 리소스별로 네임스페이스하세요:
{
"asana_search": { "description": "Asana에서 탐색" },
"asana_create": { "description": "Asana에 생성" },
"jira_search": { "description": "Jira에서 탐색" },
"jira_create": { "description": "Jira에 생성" }
}
3. 의미 있는 컨텍스트 반환
기술적 세부사항보다 시그널을 우선시하세요. uuid 대신 name을 사용하세요:
// 나쁜
{
"result": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "active"
}
}
// 좋은
{
"result": {
"name": "프로젝트 알파",
"status": "진행 중",
"assignee": "김개발"
}
}
4. 응답 포멷 지원
에이전트가 “간결한” 또는 “상세한” 응답을 선택할 수 있도록 하세요:
{
"name": "get_repository_info",
"parameters": {
"format": {
"type": "string",
"enum": ["concise", "detailed"],
"description": "응답 형식"
}
}
}
5. 토큰 효율 최적화
Claude Code는 최대 25,000 토큰 제한이 있습니다:
- 페이지네이션 구현
- 필터링 옵션 제공
- 결과 길이 자르기
- 관련 정보만 반환
시큐리티 베스트 프랙티스
플러그인 개발 시 다음 시큐리티 원칙을 따르세요:
1. 훅 기본 비활성화
모든 훅을 기본적으로 비활성화 상태로 시작하세요:
{
"hooks": {
"pre-commit": {
"enabled": false,
"command": "security-scan"
}
}
}
2. MCP 서버 명시적 승인
알 수 없는 MCP 서버를 자동으로 연결하지 마세요:
{
"mcpServers": {
"database": {
"enabled": false,
"requireApproval": true,
"description": "프로덕션 데이터베이스 접속"
}
}
}
3. 에러 메시지 검토
에러 메시지에 민간한 정보를 포함하지 않도록 주의하세요. 에러 로그를 검토하여 시큐리티 문제를 확인하세요.
일반적인 실수 피하기
다음과 같은 실수를 피하세요:
- ❌ 하나의 API 엔드포인트마다 도구 생성
- ❌ 너무 많은 저수준 기술적 세부사항 반환
- ❌ 모호하거나 불확실한 도구 이름 사용
- ❌ 도구 설명 품질 간과
- ❌ 실제 에이전트 워크플로우 테스트 없음
베스트 프랙티스
- 버전 관리:
plugin.json에서 의미 있는 버전 관리를 사용하세요 - 문서화: README.md에 설치 및 사용 지침을 포함하세요
- 테스트: 로컬 마켓플레이스에서 변경 사항을 반복적으로 테스트하세요
- 커뮤니티 기여: 플러그인 컬렉션에 기여하는 것을 고려하세요