성공지식백과 로고성공지식백과
바이브 코딩Claude Code스킬플러그인자동화AI 개발도구

Claude Code 플러그인·스킬 만들기 튜토리얼

1 조회
공유:

Claude Code에는 슬래시 커맨드(/deploy, /review 등)를 직접 만들 수 있는 스킬(Skill) 시스템이 있습니다. 스킬 하나를 만들어두면 Claude가 대화 맥락을 보고 알아서 꺼내 쓰거나, 사용자가 /스킬명으로 직접 실행할 수 있습니다. 이 튜토리얼에서는 첫 스킬 파일 하나를 만드는 것부터 시작해서, 동적 인자·컨텍스트 주입·서브에이전트 실행을 거쳐 플러그인으로 패키징하는 것까지 전 과정을 다룹니다. Windows + WSL 환경 기준으로 설명합니다.

스킬이란 무엇인가

스킬은 Claude Code의 확장 단위입니다. SKILL.md 파일 하나로 정의하고, Claude가 프롬프트를 보고 관련이 있다고 판단하면 자동으로 불러옵니다. 사용자가 /스킬명으로 직접 호출할 수도 있습니다.

기존의 커스텀 커맨드(.claude/commands/ 아래 마크다운 파일)와 스킬은 기능적으로 동일합니다. 스킬이 커맨드를 대체하는 상위 개념으로 병합되었고, 보조 파일 디렉터리, 호출 제어, 서브에이전트 실행처럼 커맨드에는 없던 기능이 스킬에 추가되어 있습니다. 기존 .claude/commands/ 파일은 그대로 동작하지만, 이름이 충돌하면 스킬이 우선합니다.

항목커스텀 커맨드스킬
파일 위치.claude/commands/이름.md.claude/skills/이름/SKILL.md
보조 파일불가가능 (templates/, examples/, scripts/)
Claude 자동 호출 제어불가disable-model-invocation 옵션
서브에이전트 실행불가context: fork 옵션
플러그인으로 배포가능가능 (네임스페이스 지원)
커맨드 vs 스킬 비교

스킬은 Agent Skills 공개 표준(agentskills.io)을 따릅니다. Claude Code는 이 표준을 확장해 호출 제어, 서브에이전트 실행, 동적 컨텍스트 주입 기능을 추가했습니다.

사전 준비

이 튜토리얼을 따라가려면 Claude Code가 설치되어 있어야 합니다. 아직 설치하지 않았다면 아래 체크리스트를 먼저 확인합니다.

시작 전 준비사항

  • Node.js 18 이상 설치 완료
  • Claude Code 최신 버전 설치 완료 (npm install -g @anthropic-ai/claude-code)
  • Claude Code 로그인 완료 (claude auth login)
  • WSL 터미널에서 claude 명령어가 동작하는지 확인

스크롤 근처에서 인터랙션이 활성화됩니다.

스킬을 저장하는 위치는 목적에 따라 다릅니다. 개인 환경 전체에서 쓸 스킬은 ~/.claude/skills/에, 특정 프로젝트에서만 쓸 스킬은 해당 프로젝트의 .claude/skills/에 저장합니다.

위치경로적용 범위
개인~/.claude/skills/<이름>/SKILL.md내 모든 프로젝트
프로젝트.claude/skills/<이름>/SKILL.md현재 프로젝트만
플러그인<플러그인>/skills/<이름>/SKILL.md플러그인이 활성화된 곳
엔터프라이즈관리형 설정 참조조직 전체 사용자
스킬 저장 위치와 적용 범위

Step 1: 첫 번째 스킬 만들기

코드를 설명해주는 스킬을 만들어보겠습니다. 이 스킬은 Claude가 대화 중 코드 설명 요청을 인식하면 자동으로 불러오거나, /explain-code로 직접 실행할 수 있습니다.

디렉터리 구조 만들기

스킬은 스킬이름이라는 디렉터리 안에 SKILL.md 파일이 존재하는 구조입니다. WSL 터미널에서 아래 명령어를 실행합니다.

Terminal (WSL)
$ mkdir -p ~/.claude/skills/explain-code

SKILL.md 파일 작성하기

SKILL.md는 두 부분으로 구성됩니다. 파일 상단의 --- 사이에 YAML 프론트매터를 작성하고, 그 아래에 Claude가 스킬 실행 시 따를 지시문을 마크다운으로 작성합니다.

~/.claude/skills/explain-code/SKILL.md
---
name: explain-code
description: Explains code with visual diagrams and analogies. Use when explaining how code works, teaching about a codebase, or when the user asks "how does this work?"
---

When explaining code, always include:

1. **Start with an analogy**: Compare the code to something from everyday life
2. **Draw a diagram**: Use ASCII art to show the flow, structure, or relationships
3. **Walk through the code**: Explain step-by-step what happens
4. **Highlight a gotcha**: What's a common mistake or misconception?

Keep explanations conversational. For complex concepts, use multiple analogies.

테스트하기

Claude Code를 열고 두 가지 방식으로 스킬을 확인합니다.

스킬 테스트

1

자동 호출 테스트

Claude가 스스로 스킬을 불러오는지 확인합니다. Claude Code에서 아래처럼 질문합니다.

이 코드가 어떻게 동작하는지 설명해줘
2

직접 호출 테스트

슬래시 커맨드로 직접 실행합니다.

/explain-code src/auth/login.ts
3

결과 확인

Claude의 응답에 비유, ASCII 다이어그램, 단계별 설명이 포함되어 있으면 스킬이 정상 동작하는 것입니다.

스킬 디렉터리 구조는 아래와 같습니다. SKILL.md가 필수 파일이고, 나머지는 선택적인 보조 파일입니다.

스킬 디렉터리 구조

explain-code/
  SKILL.md
  template.md
  examples/
    sample.md
  scripts/
    validate.sh

스크롤 근처에서 인터랙션이 활성화됩니다.

Step 2: 프론트매터 옵션 전체 이해하기

프론트매터의 모든 필드는 선택 사항입니다. description만 있어도 Claude가 스킬을 인식하고 자동 호출할 수 있습니다. 아래 표는 공식 문서 기준 현재 사용 가능한 전체 프론트매터 필드입니다.

필드필수 여부설명
name아니오스킬의 표시 이름. 생략하면 디렉터리 이름 사용. 영소문자·숫자·하이픈만, 최대 64자
description권장스킬이 하는 일과 언제 사용하는지 설명. Claude가 자동 호출 여부를 판단하는 기준. 250자 초과 시 자동 잘림
argument-hint아니오자동완성 시 보여줄 인자 힌트. 예: [이슈번호] 또는 [파일명] [형식]
disable-model-invocation아니오true로 설정하면 Claude가 자동 호출하지 않음. 사용자가 /이름으로 직접 실행해야 함. 기본값 false
user-invocable아니오false로 설정하면 / 메뉴에 표시되지 않음. Claude만 호출 가능. 기본값 true
allowed-tools아니오스킬 실행 중 Claude가 승인 없이 사용할 수 있는 도구 목록. 공백 구분 문자열 또는 YAML 리스트
model아니오이 스킬 실행 시 사용할 모델 지정
effort아니오사고 노력 수준. low / medium / high / max (max는 claude-opus-4-5 전용). 세션 설정보다 우선
context아니오fork로 설정하면 격리된 서브에이전트 컨텍스트에서 실행
agent아니오context: fork일 때 사용할 서브에이전트 타입. Explore, Plan, general-purpose 또는 커스텀 에이전트명
hooks아니오이 스킬 수명주기에만 적용되는 훅 정의
paths아니오특정 파일 경로 패턴에 해당하는 작업 시에만 스킬 자동 활성화. 쉼표 구분 문자열 또는 YAML 리스트
shell아니오!`command` 블록에 사용할 셸. bash(기본) 또는 powershell. PowerShell은 CLAUDE_CODE_USE_POWERSHELL_TOOL=1 필요
SKILL.md 프론트매터 전체 옵션 (공식 문서 기준)

전체 옵션을 적용한 예시 SKILL.md입니다.

.claude/skills/secure-deploy/SKILL.md
---
name: secure-deploy
description: Deploy the application to production with safety checks
argument-hint: "[environment]"
disable-model-invocation: true
allowed-tools: Bash(npm *) Bash(git *) Read
model: claude-sonnet-4-5
effort: high
context: fork
agent: Explore
paths:
  - "src/**/*.ts"
  - "scripts/**/*.sh"
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/security-check.sh"
---

Deploy $ARGUMENTS to production safely:

1. Run the full test suite
2. Build the application
3. Run security checks
4. Push to the deployment target
5. Verify the deployment succeeded
ℹ️description 길이 제한

description은 250자를 초과하면 스킬 목록에서 자동으로 잘립니다. Claude가 자동 호출 여부를 판단할 때 핵심 키워드를 앞에 배치하는 것이 중요합니다.

Step 3: 동적 인자 활용하기

스킬에 인자를 넘길 수 있습니다. $ARGUMENTS 자리표시자를 사용하면 스킬 이름 뒤에 입력한 텍스트 전체가 그 자리에 들어갑니다. 인자를 위치별로 개별 접근하려면 $ARGUMENTS[N] 또는 축약형 $N을 씁니다.

변수설명예시
$ARGUMENTS스킬 이름 뒤에 입력한 텍스트 전체/fix-issue 123 → '123'
$ARGUMENTS[N]0부터 시작하는 위치별 인자$ARGUMENTS[0] → 첫 번째 인자
$N$ARGUMENTS[N]의 축약형$0 → 첫 번째, $1 → 두 번째
${CLAUDE_SESSION_ID}현재 세션 ID. 로그 파일명이나 세션 추적에 활용logs/${CLAUDE_SESSION_ID}.log
${CLAUDE_SKILL_DIR}SKILL.md 파일이 있는 디렉터리 경로. 스크립트 참조 시 유용${CLAUDE_SKILL_DIR}/scripts/run.sh
동적 인자 변수 목록

GitHub 이슈 번호를 받아 자동으로 수정하는 스킬 예시입니다.

.claude/skills/fix-issue/SKILL.md
---
name: fix-issue
description: Fix a GitHub issue
disable-model-invocation: true
---

Fix GitHub issue $ARGUMENTS following our coding standards.

1. Read the issue description
2. Understand the requirements
3. Implement the fix
4. Write tests
5. Create a commit
실행 예시
$ /fix-issue 123
# Claude가 받는 프롬프트: "Fix GitHub issue 123 following our coding standards..."

위치 인자를 사용하면 여러 개를 구분해서 처리할 수 있습니다. 아래 스킬은 컴포넌트 이름, 원본 프레임워크, 대상 프레임워크 세 인자를 받습니다.

.claude/skills/migrate-component/SKILL.md
---
name: migrate-component
description: Migrate a component from one framework to another
---

Migrate the $0 component from $1 to $2.
Preserve all existing behavior and tests.
실행 예시
$ /migrate-component SearchBar React Vue
# $0 = SearchBar, $1 = React, $2 = Vue
💡$ARGUMENTS가 없을 때

스킬에 $ARGUMENTS가 없는데 사용자가 인자를 입력하면, Claude Code는 스킬 내용 끝에 'ARGUMENTS: 입력값'을 자동으로 붙여줍니다. Claude는 인자를 볼 수 있습니다.

Step 4: 동적 컨텍스트 주입

스킬 내용 안에 !`명령어` 문법을 쓰면 Claude가 프롬프트를 받기 전에 해당 쉘 명령어를 실행하고 출력 결과를 그 자리에 삽입합니다. Claude는 명령어 자체가 아니라 실행 결과를 받습니다. 이것은 Claude가 실행하는 것이 아니라 스킬 로딩 시 사전 처리(preprocessing)로 동작합니다.

Pull Request 내용을 실시간으로 가져와 요약하는 스킬 예시입니다.

.claude/skills/pr-summary/SKILL.md
---
name: pr-summary
description: Summarize changes in a pull request
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---

## Pull request context
- PR diff: !`gh pr diff`
- PR comments: !`gh pr view --comments`
- Changed files: !`gh pr diff --name-only`

## Your task
Summarize this pull request concisely:
1. What problem does it solve?
2. What are the key changes?
3. Are there any potential risks?

이 스킬이 실행될 때의 흐름입니다.

동적 컨텍스트 주입 실행 순서

1

쉘 명령어 사전 실행

!`gh pr diff`, !`gh pr view --comments` 등이 즉시 실행됩니다. Claude가 프롬프트를 받기 전에 완료됩니다.

2

결과 삽입

각 명령어 출력이 해당 자리표시자를 대체합니다. Claude는 실제 PR 데이터가 채워진 최종 프롬프트를 받습니다.

3

Claude 처리

Claude는 실제 PR 데이터를 기반으로 요약을 작성합니다.

⚠️Windows에서 PowerShell 사용 시

WSL 환경에서는 기본값인 bash가 동작합니다. PowerShell 명령어를 써야 한다면 프론트매터에 shell: powershell을 추가하고 환경변수 CLAUDE_CODE_USE_POWERSHELL_TOOL=1을 설정해야 합니다.

Step 5: 서브에이전트에서 스킬 실행하기

프론트매터에 context: fork를 추가하면 스킬이 현재 대화 기록과 격리된 별도 컨텍스트에서 실행됩니다. SKILL.md 내용이 서브에이전트의 프롬프트가 됩니다. 결과는 요약되어 메인 대화로 돌아옵니다.

ℹ️context: fork가 적합한 경우

대화 기록이 필요 없는 독립적 작업(리서치, 배포, 코드 분석 등)에 적합합니다. 'API 컨벤션을 따르세요'처럼 지시문만 있는 스킬에는 적합하지 않습니다. 서브에이전트는 실행 가능한 작업이 없으면 의미 있는 결과를 반환하지 못합니다.

Explore 에이전트를 사용해 코드베이스를 심층 리서치하는 스킬입니다.

.claude/skills/deep-research/SKILL.md
---
name: deep-research
description: Research a topic thoroughly in the codebase
context: fork
agent: Explore
---

Research $ARGUMENTS thoroughly:

1. Find relevant files using Glob and Grep
2. Read and analyze the code
3. Summarize findings with specific file references
방식시스템 프롬프트작업 내용대화 기록 접근
기본 (인라인)메인 세션과 동일스킬 내용이 현재 대화에 추가됨가능
context: forkagent 타입(Explore, Plan 등)에서 가져옴SKILL.md 전체가 서브에이전트 프롬프트불가
컨텍스트 실행 방식 비교

agent 필드에는 내장 에이전트(Explore, Plan, general-purpose) 또는 .claude/agents/ 아래 커스텀 에이전트명을 지정할 수 있습니다. 생략하면 general-purpose가 사용됩니다.

Step 6: 보조 파일 활용하기

스킬 디렉터리에 여러 파일을 함께 둘 수 있습니다. SKILL.md는 500줄 이내로 유지하고, 상세한 레퍼런스나 예시는 별도 파일로 분리합니다. Claude는 SKILL.md에서 참조한 파일만 필요할 때 불러옵니다. 매번 전체를 컨텍스트에 올리지 않습니다.

보조 파일 포함 스킬 구조 예시

code-review/
  SKILL.md
  reference.md
  examples/
    good-code.ts
    bad-code.ts
  scripts/
    lint-check.sh

스크롤 근처에서 인터랙션이 활성화됩니다.

.claude/skills/code-review/SKILL.md
---
name: code-review
description: Review code for best practices, security, and maintainability
allowed-tools: Read Grep Glob
---

Review the code in $ARGUMENTS.

## Review checklist
- Code clarity and naming
- Error handling
- Security issues (no hardcoded secrets)
- Test coverage

## Additional resources

- For detailed style rules, see [reference.md](reference.md)
- For examples of good vs bad patterns, see [examples/](examples/)
💡스크립트 참조 시 ${CLAUDE_SKILL_DIR} 활용

보조 스크립트를 참조할 때는 ${CLAUDE_SKILL_DIR}/scripts/lint-check.sh처럼 절대 경로로 지정하면 작업 디렉터리가 달라도 항상 올바른 경로로 실행됩니다.

Step 7: 플러그인으로 패키징하기

여러 스킬을 팀과 공유하거나 버전 관리하려면 플러그인으로 만들어야 합니다. 플러그인은 .claude-plugin/plugin.json 파일이 있는 디렉터리입니다. 플러그인의 스킬은 /플러그인이름:스킬이름처럼 네임스페이스가 붙어 다른 플러그인과 충돌하지 않습니다.

플러그인 디렉터리 구조

플러그인 전체 구조

my-plugin/
  .claude-plugin/
    plugin.json
  skills/
    code-review/
      SKILL.md
    deploy/
      SKILL.md
  agents/
  hooks/
    hooks.json
  bin/
  settings.json

스크롤 근처에서 인터랙션이 활성화됩니다.

⚠️흔한 실수

commands/, agents/, skills/, hooks/ 디렉터리는 플러그인 루트에 있어야 합니다. .claude-plugin/ 안에 넣으면 인식되지 않습니다. .claude-plugin/ 안에는 plugin.json만 들어갑니다.

plugin.json 작성하기

my-dev-tools/.claude-plugin/plugin.json
{
  "name": "my-dev-tools",
  "version": "1.0.0",
  "description": "코드 리뷰와 배포 자동화 스킬 모음",
  "author": {
    "name": "Your Name",
    "email": "you@example.com",
    "url": "https://github.com/yourusername"
  },
  "homepage": "https://github.com/yourusername/my-dev-tools",
  "repository": "https://github.com/yourusername/my-dev-tools",
  "license": "MIT",
  "keywords": ["code-review", "deploy", "automation"]
}

로컬에서 플러그인 테스트하기

개발 중에는 --plugin-dir 플래그로 설치 없이 바로 불러올 수 있습니다.

Terminal (WSL)
$ claude --plugin-dir ./my-dev-tools

# 플러그인이 로드된 상태에서 스킬 실행
/my-dev-tools:code-review src/

# 변경사항 반영 (재시작 없이)
/reload-plugins
💡여러 플러그인 동시 로드

--plugin-dir 플래그를 여러 번 써서 여러 플러그인을 동시에 불러올 수 있습니다. claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two

기존 .claude/ 스킬을 플러그인으로 마이그레이션할 때는 아래 명령어로 파일을 복사합니다.

기존 설정 마이그레이션
$ mkdir -p my-plugin/.claude-plugin
$ cp -r .claude/skills my-plugin/
$ cp -r .claude/agents my-plugin/
$ cp -r .claude/commands my-plugin/

Step 8: 실전 예시 — 코드 리뷰 스킬 만들기

실무에서 바로 쓸 수 있는 코드 리뷰 스킬을 만들어봅니다. Claude가 대화 중 코드 리뷰 요청을 인식하면 자동으로 실행하고, /review로도 직접 호출할 수 있습니다.

디렉터리 생성
$ mkdir -p .claude/skills/review
.claude/skills/review/SKILL.md
---
name: review
description: Review code for quality, security, and maintainability. Use when reviewing code, checking PRs, or analyzing code quality.
allowed-tools: Read Grep Glob
---

Review the code in $ARGUMENTS for:

## Priority: Critical (must fix)
- Security vulnerabilities (hardcoded secrets, SQL injection, XSS)
- Memory leaks or resource leaks
- Incorrect error handling that could cause data loss

## Priority: Warning (should fix)
- Missing input validation
- Functions longer than 50 lines
- Duplicated code blocks

## Priority: Suggestion (consider improving)
- Naming clarity
- Missing tests
- Performance optimizations

Provide specific file and line references for each issue.
Include a code example showing how to fix critical issues.
실행 예시
$ /review src/auth/
# 또는 자연어로 요청
$ 이 코드 리뷰해줘

전후 비교: 스킬 없이 코드 리뷰를 요청하는 경우와 스킬을 사용하는 경우의 차이입니다.

스킬 없이 (매번 지시 반복)
이 코드 리뷰해줘. Critical 이슈, Warning, Suggestion으로 분류하고, 보안 취약점이나 메모리 누수 특히 확인해줘. 파일명이랑 줄 번호 같이 알려줘.
스킬 사용 (한 번 정의, 반복 재사용)
/review src/auth/

Step 9: 실전 예시 — 배포 스킬 만들기

배포는 부작용이 있는 작업이라 Claude가 임의로 실행하면 안 됩니다. disable-model-invocation: true로 사용자만 호출할 수 있게 하고, context: fork으로 격리된 컨텍스트에서 실행합니다.

디렉터리 생성
$ mkdir -p .claude/skills/deploy
.claude/skills/deploy/SKILL.md
---
name: deploy
description: Deploy the application to a target environment
argument-hint: "[staging|production]"
disable-model-invocation: true
context: fork
agent: general-purpose
allowed-tools: Bash(npm *) Bash(git *) Bash(gh *) Read
effort: high
---

Deploy the application to $ARGUMENTS environment.

## Pre-deploy checks
1. Run `npm test` and confirm all tests pass
2. Run `npm run build` and confirm build succeeds
3. Check `git status` — working tree must be clean

## Deploy steps
4. Push the current branch to origin
5. Create a deployment tag: `git tag deploy-$(date +%Y%m%d-%H%M%S)`
6. Trigger the deployment pipeline via `gh workflow run deploy.yml -f environment=$ARGUMENTS`

## Post-deploy verification
7. Wait 60 seconds, then check deployment status
8. Report the deployment URL and status
배포 스킬 실행
$ /deploy staging
# staging 환경에 배포

$ /deploy production
# production 환경에 배포
⚠️disable-model-invocation: true 중요성

배포, 데이터베이스 초기화, 외부 API 전송 등 부작용이 있는 스킬에는 반드시 disable-model-invocation: true를 설정합니다. 이 설정이 없으면 Claude가 맥락에서 배포가 필요하다고 판단할 때 자동으로 실행할 수 있습니다.

자주 막히는 문제

스킬이 예상대로 동작하지 않을 때 확인할 사항들을 정리했습니다.

스킬을 만들었는데 Claude가 자동으로 쓰지 않습니다

description이 사용자의 요청 키워드와 맞지 않을 수 있습니다. description 앞부분에 핵심 사용 상황 키워드를 배치하고, 'Use when...' 형식으로 구체적인 트리거 상황을 명시합니다. 또한 스킬 이름을 /스킬명으로 직접 입력해 자동완성 목록에 표시되는지 확인합니다.

disable-model-invocation을 설정했는데도 Claude가 실행합니다

스킬 파일을 저장하고 Claude Code를 재시작했는지 확인합니다. 또는 /reload-plugins를 실행합니다. 세션 중 수정한 파일은 자동으로 반영되지 않을 수 있습니다.

!`명령어` 문법이 동작하지 않습니다

WSL 환경에서 해당 명령어가 설치되어 있는지 확인합니다. gh 명령어라면 GitHub CLI가 설치 및 인증되어 있어야 합니다. PowerShell 명령어가 필요하다면 frontmatter에 shell: powershell을 추가하고 CLAUDE_CODE_USE_POWERSHELL_TOOL=1 환경변수를 설정합니다.

context: fork를 설정했는데 결과가 반환되지 않습니다

SKILL.md에 명확한 실행 가능 작업이 있어야 합니다. 'API 컨벤션을 따르세요' 같은 참조 지시문만 있고 수행할 작업이 없으면 서브에이전트는 의미 있는 결과를 반환하지 못합니다. $ARGUMENTS로 실제 수행 대상을 받거나 구체적인 단계를 포함합니다.

플러그인 스킬이 /플러그인명:스킬명으로 보이지 않습니다

plugin.json의 name 필드가 네임스페이스가 됩니다. skills/ 디렉터리가 .claude-plugin/ 안이 아니라 플러그인 루트에 있는지 확인합니다. --plugin-dir로 실행 중이라면 /reload-plugins를 실행합니다.

스크롤 근처에서 인터랙션이 활성화됩니다.

다음 단계

이 튜토리얼에서 만든 스킬들은 .claude/skills/ 디렉터리를 Git 저장소에 커밋하면 팀 전체가 프로젝트 수준에서 공유할 수 있습니다. 더 넓게 배포하려면 플러그인 마켓플레이스에 등록하거나 GitHub 저장소를 직접 공유합니다.

스킬 시스템을 더 깊이 활용하고 싶다면 서브에이전트와의 조합을 탐구해보길 권합니다. 스킬이 작업 단위를 정의하고, 서브에이전트가 실행 환경을 담당하는 구조가 갖춰지면 복잡한 자동화 파이프라인도 SKILL.md 몇 개로 표현할 수 있습니다.

스킬 시스템의 전체 레퍼런스—프론트매터 옵션, 동적 컨텍스트 주입, 서브에이전트 실행 스펙—는 Extend Claude with skills 공식 문서에서 확인할 수 있습니다. 플러그인 생성부터 마켓플레이스 배포까지의 전 과정은 Create plugins 공식 문서를 참고합니다.

관련 글