Lab 03: MCP 검증과 Hooks 자동화
목표
AWS 공식 문서를 MCP로 연결해 퀴즈 문항의 사실을 근거와 함께 검증하고, Hooks로 그 검증을 자동으로 돌게 만듭니다.
MCP와 Hooks란 (개념)
MCP — 외부의 사실을 끌어오기
코드는 실행하면 맞는지 바로 나오지만, 사실은 실행해도 안 나옵니다. AI가 지어낸 문항이 맞는지 AI에게 그냥 물어보면 될까요? AI의 답은 두 가지 약점이 있습니다. 출처가 없으면 믿기 어렵고(근거), 지식이 오래돼 틀릴 수도 있습니다(최신성).
MCP(Model Context Protocol) 는 AI가 외부 도구·자료를 직접 쓰게 해 주는 연결 통로입니다. 여기서는 AWS 공식 문서를 연결해, AI가 답에 공식 문서를 인용하며 검증하게 만듭니다.

예시 — 이미 파일시스템, Slack, Gmail, 구글 캘린더 같은 MCP 서버가 많습니다. 도구마다 연결법을 새로 배울 필요 없이, USB처럼 같은 규격으로 꽂으면 됩니다. 오늘은 그중 AWS 공식 문서 서버를 꽂아 퀴즈 문항을 검증합니다.
Hooks — 검증을 자동으로
검증이 중요한 건 알겠는데, 매번 손으로 해야 할까요? 아닙니다. Hooks는 IDE 이벤트가 발생할 때 자동으로 실행되는 에이전트 프롬프트 또는 셸 명령입니다. “WHEN 이벤트 발생 → THEN 작업 실행” 패턴이라고 보면 됩니다.
트리거(발동 시점)는 여러 종류가 있습니다.
| 트리거 | 발동 시점 | 대표 용도 |
|---|---|---|
| Prompt Submit | 사용자가 프롬프트 전송 | 컨텍스트 주입, 프롬프트 로깅 |
| Agent Stop | 에이전트 응답 완료 | 컴파일 확인, 코드 포맷팅 |
| Pre Tool Use | 도구 실행 전 | 특정 도구 차단, 사전 지시 |
| Post Tool Use | 도구 실행 후 | 감사 로깅, 파일 포맷 |
| File Create | 새 파일 생성 | 보일러플레이트 추가, 라이선스 헤더 |
| File Save | 파일 저장 | 린팅, 문서 갱신, 연관 파일 동기화 |
| File Delete | 파일 삭제 | import 정리, 무결성 유지 |
| Pre Task Execution | Spec Task 시작 전 | 셋업 스크립트 실행, 전제조건 검증 |
| Post Task Execution | Spec Task 완료 후 | 테스트 실행, 문서 생성 |
| Manual Trigger | 수동 실행 | 코드 리뷰, 보안 스캔 |
예시 — 사람이 자주 깜빡하지만 안 하면 문제가 되는 반복 검사일수록 Hook이 효과적입니다. 남은 console.log·TODO 제거 확인, 코드 포맷 검사, 커밋 전 테스트 실행, 필수 필드 누락 검사 같은 것입니다. 오늘은 ‘채팅을 보낼 때(Prompt Submit) 퀴즈 데이터·디버그 흔적 검사’를 직접 만들어 봅니다.
전체 흐름
Step 1: MCP 서버 등록·연결
1-1. 설정 파일 만들기
프로젝트에 .kiro/settings/mcp.json 파일을 만들고 아래 내용을 넣습니다. AWS 공식 문서를 연결하는 설정입니다.
{
"mcpServers": {
"aws-docs": {
"command": "uvx",
"args": ["awslabs.aws-documentation-mcp-server@latest"],
"env": { "FASTMCP_LOG_LEVEL": "ERROR" },
"disabled": false, "autoApprove": []
}
}
}
.kiro/settings/mcp.json에 aws-docs 서버를 등록합니다.1-2. 연결 확인
Kiro 사이드바의 “MCP Servers” 섹션을 열어, aws-docs가 “연결됨(Connected)” 상태로 보이는지 확인합니다.

aws-docs가 Connected (4 tools)로 뜨면 성공입니다.-
.kiro/settings/mcp.json을 만들었다 - 사이드바에서 aws-docs가 “연결됨”으로 표시된다
Step 2: 문항 사실 검증
2-1. 문항 검증하기
사실 검증을 제대로 체험하려면 일부러 오류를 심어 둔 4.fact-errors 폴더로 진행합니다. 입력창에서 #folder 를 골라 4.fact-errors 를 선택한 뒤, 아래 프롬프트를 보냅니다.
내 퀴즈 문항 5개를 AWS 공식 문서를 근거로 하나씩 사실 검증해줘.
각 문항에 대해 맞음/틀림/모호함 판정, 근거 문서, 틀렸다면 수정안을 제시해줘.예상 결과: 각 문항마다 판정 + 근거 문서 링크가 달립니다. 틀린 문항이 있으면 수정안을 반영하고, 고치기 전/후를 비교합니다.

2-2. 문항 늘리기 + 검증 (Options)
MCP가 연결된 김에 문제를 더 만들고, 새 문제도 반드시 문서로 검증해 10문항짜리 퀴즈로 키웁니다.
AWS 기초 개념 문제를 5개 더 만들어줘.
새로 만든 5문항도 AWS 공식 문서를 근거로 하나씩 사실 검증해서,
맞는 것만 남기고 틀린 건 문서 근거로 고쳐줘.통과한 문항만 남으면, 출처가 확인된 10문항 퀴즈가 완성됩니다.
왜? MCP가 주는 건 두 가지입니다.
① 근거 — AI가 맞다고 해도 출처가 없으면 사실인지 지어낸 건지 알 수 없는데, MCP는 답에 공식 문서를 인용해 줍니다.
② 최신성 — AI 지식엔 컷오프가 있어 그 뒤 바뀐 내용은 옛 값을 확신하며 답하는데, 지금 문서만 현재값을 압니다.
그래서 이 단계에서 문항 내용이 맞는지 문서로 검토할 수 있습니다.
- 문항을 공식 문서 근거로 사실 검증했다
- 틀린 문항의 수정안을 반영했다
Step 3: Hook으로 자동 검사 만들기
아래 프롬프트로 자동 검사 Hook을 만듭니다. 마지막에 “채팅으로 알려줘”를 넣어, 결과가 어디에 뜨는지를 분명히 합니다.
JS 파일에 console.log 나 TODO 주석이 남아 있는지, 퀴즈 데이터 배열의 각 문항에
question / choices(4개) / answer / explanation 필드가 모두 있는지 검사하는 Hook을 만들어줘.
사용자가 채팅에 메시지를 보낼 때 검사를 실행하고, 문제가 발견되면 그 목록을 채팅으로 알려줘.
.kiro/hooks/check-js-on-chat.json에 훅이 정의됩니다. 트리거는 UserPromptSubmit(채팅 메시지를 보낼 때)이고, .js 파일에서 console.log·TODO·문항 필드를 검사합니다.결과는 어디서 보나요? 훅은 에이전트 작업으로 실행되고, 지적 메시지는 Kiro 채팅 패널에 나타납니다. 검사가 돈 직후 바로 안 보이면 채팅 패널 상단의 “Task list”(작업 목록) → 진행 중 작업(Current Task)을 열어 확인하고, 이미 끝났다면 “History”(기록)에서 지난 훅 실행 메시지를 확인합니다. 그래도 없으면 채팅에
방금 훅 검사 결과 보여줘라고 입력합니다.
- 자동 검사(Hook)를 만들었다
Step 4: Hook 테스트
4-1. 검사 대상 심고 실행하기
Kiro 편집기에서 app.js를 열고, 파일 아무 곳에 아래 두 줄을 붙여넣고 저장합니다. (검사는 파일 전체를 훑으므로 위치는 상관없습니다.)
console.log("디버그: 여기 로그가 남아있음");
// TODO: 이 줄 나중에 지우기이제 채팅에 아무 메시지(예: 검사해봐)를 보내면 Hook이 실행됩니다.

4-2. 훅에 문제가 있으면 고치기
Hook 자체도 코드라서, 처음엔 훅에 버그가 있을 수 있습니다. (예: 검사 스크립트의 문법 오류) 실행했는데 엉뚱한 에러가 나면 그 에러를 Kiro에게 고쳐 달라고 하면 됩니다. Kiro가 원인을 찾아 스크립트를 수정합니다.

console.log·TODO 주석이 정상적으로 탐지됩니다.예상 결과: 훅이 고쳐지면, 다시 채팅에 메시지를 보냈을 때 채팅 패널에 “console.log가 남아 있다 / TODO 주석이 있다”는 지적이 뜹니다. 확인했으면 두 줄을 지웁니다.
4-3. 문항 필드 누락도 잡기
app.js 위쪽의 QUIZ_DATA에서 첫 번째 문항 블록을 찾아, explanation 한 줄만 통째로 삭제하고 저장한 뒤, 다시 채팅에 메시지를 보냅니다.
{
question: "...",
options: ["...", "...", "...", "..."],
answer: 1,
explanation: "...", // ← 이 줄을 통째로 지웁니다
},예상 결과: Hook이 채팅 패널에 “1번 문항에 explanation 필드가 없다”는 식으로 지적합니다. 확인했으면 되돌리고(⌘/Ctrl + Z) 저장합니다.

explanation을 지우자 Hook이 “문항 1에 explanation 필드 누락”을 바로 잡아냅니다.왜? 오늘 손으로 하던 검증이 3단계로 이어졌습니다. 코드 검증(리뷰) → 사실 검증(MCP) → 검증 자동화(Hooks). 이제 채팅을 보낼 때마다 검사가 자동으로 돕니다.
- 검사 대상을 심고 채팅으로 Hook을 실행했다
- 훅에 문제가 있으면 고쳐서 정상 동작시켰다
- console.log·TODO / 문항 필드 누락 지적이 뜨는 것을 확인했다
- 확인 후 원래대로 되돌렸다
핵심 확인 포인트
| # | 확인 항목 | 상태 |
|---|---|---|
| 1 | .kiro/settings/mcp.json으로 aws-docs MCP를 연결했다 | ☐ |
| 2 | 문항을 공식 문서 근거로 사실 검증하고 오류를 수정했다 | ☐ |
| 3 | 자동 검사(Hook)를 만들었다 | ☐ |
| 4 | 디버그 흔적·필드 누락 지적이 저장 즉시 뜨는 것을 확인했다 | ☐ |
교육 포인트 정리
이 Lab에서 배운 것
- 코드 정확성 ≠ 사실 정확성: 실행으로 확인되는 것과 안 되는 것
- MCP: AI를 외부 자료(AWS 공식 문서)에 연결해 근거·최신성을 확보
- Hooks: 저장 같은 사건에 자동 검사를 걸어 검증을 시스템화
- 검증 3단계: 리뷰 → MCP → Hooks가 한 줄기로 이어진다
아직 안 된 것 (다음 Lab에서 해결)
- ❌ 만든 앱이 아직 내 컴퓨터에만 있음 (남이 접속 못 함)
트러블슈팅
MCP 연결이 안 됨
→ uvx가 설치돼 있는지(사전 준비 ③) 확인하고 네트워크를 점검합니다. 그래도 안 되면 강사 시연을 참고합니다.
문서 없이 답만 함
→ 반드시 aws-docs 도구로 문서를 조회해서 근거와 함께 답해줘라고 다시 지시합니다.
내 문항에 오류가 없음
→ 예시로 연습합니다. “S3 단일 객체 최대 용량은 5GB이다”(틀림 — 정답 5TB), “S3 Standard 내구성은 99.99%이다”(틀림 — 내구성은 99.999999999%, 99.99%는 가용성).
Hook이 안 돎
→ 실행 시점(채팅 전송 시)과 대상 파일 설정이 맞는지 Kiro에게 확인 요청합니다.
참고 자료
- Model Context Protocol — MCP 개요와 사양
- AWS Documentation MCP Server —
awslabs.aws-documentation-mcp-server저장소
NxtCloud Workshop