같은 기능을 내장 툴로도, 커스텀 툴로도, 스킬로도, MCP로도 만들 수 있습니다. 이 수업에서는 넷의 성격을 가르고 무엇을 고를지 판단하는 기준을 다룹니다.
넷의 성격
선택지를 먼저 정리합니다.
내장 툴 — 제공되는 기능을 켜서 씁니다. 웹 검색, 코드 실행 같은 것입니다. 만들 것이 없고 바로 씁니다. 대신 동작을 우리가 바꾸지 못합니다.
커스텀 툴 — 우리가 스키마를 정의하고 실행 코드를 씁니다. 사내 시스템에 붙을 때 유일한 방법입니다. 자유도가 가장 높고 손이 가장 많이 갑니다.
스킬 — 절차를 문서로 적어 두고 필요할 때 모델이 참조합니다. 코드 실행이 아니라 방법을 알려 주는 것입니다. 여러 도구를 조합하는 순서나 사내 규칙을 담기 좋습니다.
MCP — 도구를 서버로 분리해 여러 클라이언트가 공유합니다. 같은 도구를 여러 애플리케이션에서 써야 할 때 값을 합니다.
가장 자주 헷갈리는 것이 커스텀 툴과 스킬입니다. 툴은 실행하고, 스킬은 설명합니다. "청구서를 조회한다"는 툴이고, "청구 분쟁을 처리하는 순서"는 스킬입니다.
고르는 기준
순서대로 물어 보면 대개 답이 나옵니다.
- 이미 있는 기능으로 되는가? → 내장 툴.
- 코드 실행이 필요한가, 설명이면 되는가? → 실행이 필요하면 툴, 설명이면 스킬.
- 여러 애플리케이션에서 같은 것을 쓰는가? → 그렇다면 MCP로 분리.
- 한 곳에서만 쓰는가? → 커스텀 툴로 직접.
여기서 자주 하는 실수가 처음부터 MCP로 만드는 것입니다. 한 곳에서만 쓸 도구를 서버로 분리하면 배포와 버전 관리 부담만 생깁니다. 두 번째 사용처가 생겼을 때 옮겨도 늦지 않습니다.
반대 실수도 있습니다. 절차 설명을 커스텀 툴로 만들려는 경우입니다. "이 순서로 처리하라"는 실행할 것이 없으므로 툴이 될 수 없고, 시스템 프롬프트에 넣으면 항상 로드되어 컨텍스트를 씁니다. 가끔 쓰는 긴 절차는 스킬이 맞습니다.
조합하기
실무에서는 넷을 섞어 씁니다. 전형적인 구성이 있습니다.
- 사내 데이터 조회는 커스텀 툴 또는 MCP
- 공개 정보 조회는 내장 웹 검색
- 계산과 데이터 처리는 내장 코드 실행
- 업무 절차와 규칙은 스킬
이렇게 나누면 각자 잘하는 자리에 놓입니다. 사내 데이터를 웹 검색으로 찾을 수는 없고, 계산 로직을 커스텀 툴로 다시 만들 필요도 없습니다.
스킬이 툴을 부르는 구성이 특히 유용합니다. 스킬에 "먼저 A로 조회하고, 결과가 비어 있으면 B를 쓰고, 그다음 C로 기록한다"고 적어 두면, 모델이 도구 조합 순서를 매번 새로 판단하지 않아도 됩니다. 도구 설명만으로는 이런 순서를 전달하기 어렵습니다.
스킬 문서 예시
---
제목: 환불 요청 처리
1. search_orders 로 고객의 최근 주문을 확인한다.
2. 주문이 30일 이내이면 refund_order 를 호출한다.
3. 30일이 지났으면 환불 대신 create_ticket 으로 상담을 접수한다.
4. 어느 경우든 고객에게 결과와 근거를 함께 안내한다.
늘어난 것을 관리하기
확장은 붙이기는 쉽고 떼기는 어렵습니다. 시간이 지나면 쓰지 않는 도구가 쌓입니다.
부작용이 분명합니다.
- 도구 정의가 매 요청에 실려 컨텍스트를 먹습니다.
- 선택지가 많아 오호출이 늘어납니다.
- 무엇이 무엇을 하는지 사람도 파악하기 어려워집니다.
정기적으로 점검하는 항목을 정해 둡니다. 최근에 호출된 적 있는지, 설명이 여전히 정확한지, 다른 도구와 역할이 겹치지 않는지입니다.
# 호출 기록으로 사용되지 않는 도구를 찾는다
unused = [t["name"] for t in tools
if call_counts.get(t["name"], 0) == 0]
역할이 겹치는 도구는 특히 문제가 됩니다. 비슷한 두 도구가 있으면 모델이 매번 고민하고, 어느 쪽을 골랐는지에 따라 결과가 달라집니다. 합치거나 이름과 설명에서 차이를 분명히 해야 합니다.
시험 함정
- 커스텀 툴과 스킬을 같은 것으로 보는 선택지 — 툴은 실행하고 스킬은 절차를 설명합니다.
- 한 곳에서만 쓸 도구를 처음부터 MCP 서버로 분리하는 선택 — 배포와 버전 부담만 늘어납니다.
- 절차 설명을 커스텀 툴로 구현하려는 접근 — 실행할 것이 없어 툴이 될 수 없습니다.
- 가끔 쓰는 긴 절차를 시스템 프롬프트에 넣는 관리 — 항상 로드되어 컨텍스트를 씁니다.
- 내장 기능으로 되는 일을 커스텀 툴로 다시 만드는 선택 — 유지 부담만 늘어납니다.
- 붙여 둔 도구를 점검 없이 유지하는 관리 — 오호출이 늘고 컨텍스트가 낭비됩니다.
실습 시나리오
실제 시험과 같은 형식의 시나리오 문제입니다.
고객 문의 처리에서 "먼저 주문을 조회하고, 30일 이내면 환불하고, 지났으면 상담을 접수한다"는 사내 절차를 모델이 따르게 하려 합니다. 조회·환불·접수 도구는 이미 있습니다. 가장 적절한 방법은 무엇입니까?
빌드 연습 · 네 가지 방식으로 같은 요구를 만족시켜 보기
약 35분1.요구 정하기
사내 데이터 조회와 절차가 함께 있는 작업을 하나 정합니다.
기대 결과 · 실행이 필요한 부분과 설명이 필요한 부분이 갈립니다.
2.커스텀 툴
조회 기능을 커스텀 툴로 만듭니다.
기대 결과 · 스키마와 실행 코드가 동작합니다.
3.스킬
처리 절차를 스킬 문서로 적습니다.
기대 결과 · 해당 작업에서만 로드되는 것이 확인됩니다.
4.내장 기능 활용
공개 정보 조회나 계산은 내장 기능으로 대체합니다.
기대 결과 · 직접 만든 코드가 줄어듭니다.
5.점검 목록
붙인 도구의 호출 횟수를 기록하고 안 쓰는 것을 찾습니다.
기대 결과 · 제거 후보가 목록으로 남습니다.