Skill, Hook, MCP 서버, 서브에이전트 — Claude Code에는 네 가지 확장 기능이 있지만, 차이를 모르면 엉뚱한 도구를 선택하게 됩니다. 실행 주체와 시점을 기준으로 한눈에 정리해 드릴게요.
- Skill·Hook·MCP 서버·서브에이전트는 모두 Claude Code를 확장하지만, 실행 주체와 시점이 각각 다릅니다.
- "누가 실행하는가" 한 가지 기준만 기억하면 상황별 선택이 훨씬 쉬워집니다.
- 잘못 선택하면 시스템 오작동으로 이어지므로, 4가지 판단 질문으로 빠르게 확인하세요.
네 가지 확장 기능이 헷갈리는 이유
Claude Code를 어느 정도 사용하다 보면 Skill, Hook, MCP 서버, 서브에이전트(subagent)라는 네 가지 확장 기능을 만나게 돼요. 문제는 이 네 가지가 모두 "Claude Code의 기능을 확장한다"는 점에서 비슷해 보인다는 거예요.
실제로 커뮤니티에서도 "Hook으로 할 수 있는 걸 왜 Skill로 만들어야 하나요?", "MCP 서버랑 서브에이전트 차이가 뭔가요?" 같은 질문이 자주 올라와요. 공식 문서를 읽어봐도 각각의 설명은 있지만, 네 가지를 나란히 비교한 자료는 찾기 어려워요. 그래서 처음 확장 기능을 사용하려는 분들이 어떤 걸 선택해야 할지 막막해하는 경우가 많아요.
네 가지 모두 목적과 실행 방식이 다르기 때문에, 차이를 모르면 엉뚱한 도구를 선택하게 돼요.
망치, 드라이버, 펜치, 스패너는 모두 "공구"지만 못을 박을 때 스패너를 쓰면 안 되는 것과 같아요. 올바른 공구를 고르려면 "지금 내가 해야 하는 작업이 정확히 무엇인가"를 먼저 파악해야 해요. Claude Code 확장 기능도 마찬가지로, 내가 자동화하려는 작업의 성격을 먼저 이해하면 선택이 훨씬 쉬워져요.
제가 처음 Claude Code를 확장하려고 했을 때, Hook으로 해야 할 작업을 Skill로 만들어서 한참 헤맨 적이 있어요. 이벤트 기반 자동화인데 수동 호출 방식으로 만드니 매번 직접 실행해야 했고, 결국 처음부터 다시 만들었어요. 그때 네 가지 기능의 경계를 정리하고 나니 선택이 훨씬 빨라졌구요, 이 글에서 그 기준을 공유할게요.
Skill·Hook·MCP·서브에이전트 핵심 차이 비교
먼저 각 기능의 정의를 한 줄로 정리할게요. 혼동을 줄이려면 "누가 실행하는가"와 "언제 실행되는가"를 기준으로 구분하는 것이 가장 명확해요.
Skill은 사용자가 슬래시 명령어(/skill-name)로 직접 호출하는 재사용 가능한 프롬프트 템플릿이에요. .claude/skills/ 폴더에 마크다운 파일로 정의하며, Claude가 해당 스킬의 지시사항을 읽고 그대로 따라요. 자주 쓰는 복잡한 프롬프트를 한 번 저장해두면 매번 길게 입력할 필요가 없어지는 셈이에요. 코드 리뷰 양식, 글 작성 규칙, 번역 스타일 같은 반복 지시를 Skill로 만들면 생산성이 크게 올라가요.
Hook은 특정 이벤트가 발생할 때 자동으로 실행되는 셸 스크립트예요. settings.json에 등록하며, 파일 저장·커밋·도구 호출 같은 이벤트에 반응해요. 사용자가 직접 호출하는 게 아니라, 조건이 충족되면 시스템이 알아서 실행하는 점이 Skill과의 가장 큰 차이예요. 린트 검사, 자동 포맷팅, 커밋 메시지 검증처럼 "빠뜨리면 안 되는 자동 검사"에 딱 맞아요.

MCP(Model Context Protocol) 서버는 Claude Code에 외부 도구를 연결하는 표준 인터페이스예요. 데이터베이스 조회, API 호출, 파일 시스템 접근 같은 기능을 Claude가 직접 도구로 사용할 수 있게 해줘요. 쉽게 말해, Claude가 기본적으로 할 수 없는 외부 작업을 "새로운 도구"로 추가하는 방식이에요. MCP 서버 하나를 연결하면 여러 프로젝트에서 재사용할 수 있어서, 팀 단위로 활용할 때 특히 유용해요.
서브에이전트(subagent)는 메인 Claude가 복잡한 작업의 일부를 별도 에이전트에 위임하는 방식이에요. Agent 도구를 통해 호출되며, 독립적인 컨텍스트에서 작업한 뒤 결과만 돌려줘요. 메인 에이전트의 컨텍스트 윈도우를 절약하면서도 전문적인 작업을 수행할 수 있다는 게 핵심이에요. 코드 탐색, 초안 작성, 품질 검증처럼 서로 독립적인 단계를 각각의 서브에이전트에 맡기면 전체 워크플로우가 깔끔해져요.
| 구분 | 실행 주체 | 실행 시점 | 핵심 용도 |
|---|---|---|---|
| Skill | 사용자 (슬래시 명령어) | 수동 호출 시 | 프롬프트 재사용 |
| Hook | 시스템 (이벤트 트리거) | 이벤트 발생 시 자동 | 자동 검증·포맷팅 |
| MCP 서버 | Claude (판단 후 호출) | 외부 도구 필요 시 | 외부 시스템 연동 |
| 서브에이전트 | Claude (작업 위임) | 대규모·병렬 작업 시 | 컨텍스트 분리·병렬 처리 |
제가 직접 네 가지를 모두 써보니, 가장 큰 차이는 "실행 주체"였어요. Skill과 Hook은 사람이 트리거하거나 시스템 이벤트가 트리거하는 반면, MCP와 서브에이전트는 Claude 자신이 판단해서 호출해요. 이 기준 하나만 기억해도 대부분의 상황에서 올바른 선택을 할 수 있어요.
상황별 선택 기준 정리
이론적 차이를 알아도 실제 상황에서 "이건 뭘로 만들지?" 고민이 생겨요. 아래 네 가지 질문으로 빠르게 판단할 수 있어요.
반복해서 같은 지시를 내리고 있다면 Skill을 만드세요.
예를 들어 "블로그 글 제목을 이런 규칙으로 만들어줘"라는 프롬프트를 매번 입력하고 있다면, 이걸 Skill로 저장하면 /topic-finder 한 번으로 끝나요. Skill의 핵심은 "프롬프트의 재사용"이에요. 긴 지시를 짧은 명령어 하나로 압축하는 거라고 생각하면 돼요.

특정 이벤트가 발생할 때마다 자동으로 뭔가 실행되어야 한다면 Hook이 정답이에요.
파일 저장 시 린트(lint) 검사를 돌리거나, 커밋 전에 테스트를 실행하는 경우가 대표적이에요. Hook의 핵심 키워드는 "자동"과 "이벤트"예요. 사용자가 의식하지 않아도 정해진 시점에 알아서 동작해야 하는 작업이라면 Hook이 맞아요.
Claude가 외부 시스템의 데이터를 읽거나 조작해야 한다면 MCP 서버를 연결하세요.
데이터베이스 조회, Slack 메시지 전송, GitHub 이슈 생성처럼 Claude의 기본 도구에 없는 외부 기능이 필요한 경우예요. MCP는 Claude에게 "새로운 손"을 달아주는 것과 같아요. 기존에는 할 수 없었던 외부 조작을 도구 형태로 추가해서 Claude가 직접 실행할 수 있게 해줘요.
작업이 너무 크거나 병렬 처리가 필요하다면 서브에이전트를 사용하세요.
메인 에이전트의 컨텍스트 윈도우(context window)를 아끼면서 독립적인 작업을 동시에 진행할 수 있어요. 예를 들어 코드베이스 전체를 분석하는 작업은 메인 에이전트에서 하면 컨텍스트가 금방 차지만, 서브에이전트에 위임하면 결과 요약만 받아서 효율적이에요.
"파일 저장할 때마다 코드 리뷰를 해줘"라는 요구사항을 Skill로 만드는 분이 있는데, 이건 이벤트 기반이므로 Hook이 맞아요.
반대로 "이 프로젝트 전체 코드를 분석해서 보고서를 만들어줘"를 Hook에 넣으면 파일 저장할 때마다 전체 분석이 돌아가는 재앙이 발생해요. 이런 일회성 대규모 작업은 서브에이전트에 위임하는 것이 올바른 선택이에요.
제가 실제 블로그 자동화 시스템을 만들 때, 글 저장 후 이미지 검증은 Hook으로, 글 작성 자체는 서브에이전트로, 제목 생성 규칙은 Skill로 분리했어요. 이렇게 역할을 나누니 각 부분을 독립적으로 수정할 수 있어서 유지보수가 훨씬 편해졌어요.
잘못 선택했을 때 생기는 문제와 해결법
네 가지 기능을 잘못 선택하면 단순히 "불편한" 수준이 아니라 시스템이 제대로 작동하지 않아요. 가장 흔한 실수 세 가지와 해결 방법을 정리할게요.
MCP 서버 대신 Skill에 API 호출 로직을 넣는 실수
Skill은 프롬프트 템플릿이지 코드 실행 환경이 아니므로, 외부 API를 호출해야 한다면 반드시 MCP 서버로 구현해야 해요. Skill 안에 "이 API를 호출해줘"라고 써도 Claude가 해당 API에 접근할 수 있는 도구가 없으면 실행 자체가 불가능해요. MCP 서버로 해당 API를 도구로 등록하고, Skill에서는 "그 도구를 사용해줘"라고 지시하는 것이 올바른 구조예요.
서브에이전트 대신 하나의 프롬프트에 모든 작업을 몰아넣는 실수
컨텍스트 윈도우가 가득 차면 Claude가 앞부분 지시를 잊어버리기 때문에, 단계가 3개 이상이면 서브에이전트 분리를 검토하세요. 특히 각 단계의 출력이 길어질 수 있는 작업(코드 생성, 문서 작성 등)은 서브에이전트로 분리하는 것이 안전해요. 서브에이전트는 자신만의 독립적인 컨텍스트를 갖기 때문에, 메인 에이전트의 공간을 전혀 차지하지 않아요.


Hook에 무거운 작업을 등록하는 실수
Hook은 이벤트마다 실행되므로, 실행 시간이 긴 스크립트를 넣으면 Claude Code 전체가 느려져요. 예를 들어 파일 저장 이벤트에 전체 테스트 스위트를 연결하면, 글자 하나 고칠 때마다 수십 초씩 기다려야 해요. Hook에는 1~2초 안에 끝나는 가벼운 검증 작업만 등록하고, 무거운 작업은 별도 스크립트나 서브에이전트로 빼는 것이 좋아요.
이미 잘못 만든 기능이 있다면 마이그레이션 순서는 간단해요. 기존 로직을 올바른 위치에 새로 작성하고, 동작을 확인한 뒤 이전 설정을 삭제하면 돼요.
변환할 때 가장 중요한 것은 기존 동작을 먼저 테스트로 기록해두는 거예요. "이 Hook이 정확히 어떤 입력에 어떤 출력을 내는지" 기록해두면 새 구현체가 동일하게 작동하는지 검증할 수 있어요. 입력과 출력을 문서화하는 데 5분만 투자하면, 마이그레이션 후 디버깅 시간을 크게 줄일 수 있어요.
제가 처음에 Hook으로 만들었던 이미지 생성 로직을 나중에 독립 스크립트로 분리한 적이 있어요. 분리 전에 입출력을 정리해둔 덕분에 마이그레이션 후에도 동일한 결과를 바로 확인할 수 있었구요, 이 습관을 강력히 추천해요.
Skill, Hook, MCP 서버, 서브에이전트는 모두 Claude Code를 확장하지만, 실행 주체와 시점이 명확히 다른 도구예요. "누가, 언제 실행하는가" 한 가지 기준만 기억하면 상황에 맞는 도구를 고를 수 있어요.
반복 프롬프트는 Skill, 자동 검증은 Hook, 외부 연동은 MCP, 대규모 작업 분리는 서브에이전트 — 이 네 줄 요약을 기준으로 먼저 판단해 보고, 이 글의 상세 비교를 참고하면 확장 기능 선택에서 헤매는 일이 크게 줄어들 거예요.
'AI 툴 문제 해결' 카테고리의 다른 글
| Opus 4.8 업데이트 후 체감되는 코딩 차이와 대응법 (0) | 2026.07.23 |
|---|---|
| Claude Code 슬래시 커맨드 만들기 — 자주 쓰는 프롬프트 저장법 (0) | 2026.07.22 |
| SKILL.md 작성법 — Claude Code를 나만의 전문가로 만드는 방법 (0) | 2026.07.22 |
| Claude Sonnet 5 달라진 점과 상위 모델 선택 기준 (1) | 2026.07.21 |
| Claude Code 플랜 모드 사용법, 코드 수정 전 계획서 받는 법 (0) | 2026.07.21 |