NxtCloud NxtCloud Workshop / 키로 AI 중급: 구조적 AI개발
로그인

Lab 03: MCP 검증과 Hooks 자동화

목표

AWS 공식 문서를 MCP로 연결해 퀴즈 문항의 사실을 근거와 함께 검증하고, Hooks로 그 검증을 자동으로 돌게 만듭니다.

MCP와 Hooks란 (개념)

MCP — 외부의 사실을 끌어오기

코드는 실행하면 맞는지 바로 나오지만, 사실은 실행해도 안 나옵니다. AI가 지어낸 문항이 맞는지 AI에게 그냥 물어보면 될까요? AI의 답은 두 가지 약점이 있습니다. 출처가 없으면 믿기 어렵고(근거), 지식이 오래돼 틀릴 수도 있습니다(최신성).

MCP(Model Context Protocol) 는 AI가 외부 도구·자료를 직접 쓰게 해 주는 연결 통로입니다. 여기서는 AWS 공식 문서를 연결해, AI가 답에 공식 문서를 인용하며 검증하게 만듭니다.

MCP 아키텍처 — MCP Client(노트북)가 MCP라는 USB 허브를 통해 여러 MCP Server(로컬 파일, 구글 캘린더, Gmail, Slack 등)에 연결되는 그림
MCP는 ‘USB 허브’에 비유할 수 있습니다. AI(MCP Client)에 여러 도구(MCP Server)를 같은 규격으로 꽂는 방식입니다.

예시 — 이미 파일시스템, Slack, Gmail, 구글 캘린더 같은 MCP 서버가 많습니다. 도구마다 연결법을 새로 배울 필요 없이, USB처럼 같은 규격으로 꽂으면 됩니다. 오늘은 그중 AWS 공식 문서 서버를 꽂아 퀴즈 문항을 검증합니다.

Hooks — 검증을 자동으로

검증이 중요한 건 알겠는데, 매번 손으로 해야 할까요? 아닙니다. HooksIDE 이벤트가 발생할 때 자동으로 실행되는 에이전트 프롬프트 또는 셸 명령입니다. “WHEN 이벤트 발생 → THEN 작업 실행” 패턴이라고 보면 됩니다.

트리거(발동 시점)는 여러 종류가 있습니다.

트리거발동 시점대표 용도
Prompt Submit사용자가 프롬프트 전송컨텍스트 주입, 프롬프트 로깅
Agent Stop에이전트 응답 완료컴파일 확인, 코드 포맷팅
Pre Tool Use도구 실행 전특정 도구 차단, 사전 지시
Post Tool Use도구 실행 후감사 로깅, 파일 포맷
File Create새 파일 생성보일러플레이트 추가, 라이선스 헤더
File Save파일 저장린팅, 문서 갱신, 연관 파일 동기화
File Delete파일 삭제import 정리, 무결성 유지
Pre Task ExecutionSpec Task 시작 전셋업 스크립트 실행, 전제조건 검증
Post Task ExecutionSpec Task 완료 후테스트 실행, 문서 생성
Manual Trigger수동 실행코드 리뷰, 보안 스캔

예시 — 사람이 자주 깜빡하지만 안 하면 문제가 되는 반복 검사일수록 Hook이 효과적입니다. 남은 console.log·TODO 제거 확인, 코드 포맷 검사, 커밋 전 테스트 실행, 필수 필드 누락 검사 같은 것입니다. 오늘은 ‘채팅을 보낼 때(Prompt Submit) 퀴즈 데이터·디버그 흔적 검사’를 직접 만들어 봅니다.

전체 흐름

Step 1
MCP 서버 등록·연결
AWS 공식 문서 연결
Step 2
문항 사실 검증
근거와 함께 오류 수정
Step 3
Hook 생성
채팅 전송 시 자동 검사
Step 4
Hook 테스트
자동 지적 확인

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 MCP 서버(command: uvx, args: aws-documentation-mcp-server)를 등록한 화면
.kiro/settings/mcp.jsonaws-docs 서버를 등록합니다.

1-2. 연결 확인

Kiro 사이드바의 “MCP Servers” 섹션을 열어, aws-docs“연결됨(Connected)” 상태로 보이는지 확인합니다.

Kiro 사이드바 MCP SERVERS 섹션에 aws-docs가 'Connected (4 tools)' 체크 표시로 연결된 화면
사이드바 MCP SERVERSaws-docsConnected (4 tools)로 뜨면 성공입니다.
🎯 체크포인트
  • .kiro/settings/mcp.json을 만들었다
  • 사이드바에서 aws-docs가 “연결됨”으로 표시된다

Step 2: 문항 사실 검증

2-1. 문항 검증하기

사실 검증을 제대로 체험하려면 일부러 오류를 심어 둔 4.fact-errors 폴더로 진행합니다. 입력창에서 #folder 를 골라 4.fact-errors 를 선택한 뒤, 아래 프롬프트를 보냅니다.

내 퀴즈 문항 5개를 AWS 공식 문서를 근거로 하나씩 사실 검증해줘.
각 문항에 대해 맞음/틀림/모호함 판정, 근거 문서, 틀렸다면 수정안을 제시해줘.

예상 결과: 각 문항마다 판정 + 근거 문서 링크가 달립니다. 틀린 문항이 있으면 수정안을 반영하고, 고치기 전/후를 비교합니다.

4.fact-errors 문항을 AWS 공식 문서로 사실 검증한 결과 — 문항별 answer·explanation 틀림 판정, 근거 문서 링크, 수정안 제시
일부러 심어 둔 오류를 MCP가 공식 문서 근거와 함께 잡아내고 수정안까지 제시합니다.

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가 만든 검사 Hook — .kiro/hooks/check-js-on-chat.json, trigger가 UserPromptSubmit(채팅 전송 시)
.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.fact-errors/app.js에 console.log·TODO 두 줄을 붙여넣고, 채팅으로 Hook을 실행한 화면
두 줄을 붙여넣고 저장한 뒤, 채팅에 메시지를 보내면 Hook이 검사를 시작합니다.

4-2. 훅에 문제가 있으면 고치기

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

Kiro가 검사 스크립트 check-js.sh의 heredoc 문법 오류 원인을 분석해 수정하고, 이후 console.log·TODO 주석이 탐지된다고 안내하는 화면
검사 스크립트의 문법 오류를 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 필드 누락'이 감지됐다고 지적한 화면
explanation을 지우자 Hook이 “문항 1에 explanation 필드 누락”을 바로 잡아냅니다.

왜? 오늘 손으로 하던 검증이 3단계로 이어졌습니다. 코드 검증(리뷰) → 사실 검증(MCP) → 검증 자동화(Hooks). 이제 채팅을 보낼 때마다 검사가 자동으로 돕니다.

🎯 체크포인트
  • 검사 대상을 심고 채팅으로 Hook을 실행했다
  • 훅에 문제가 있으면 고쳐서 정상 동작시켰다
  • console.log·TODO / 문항 필드 누락 지적이 뜨는 것을 확인했다
  • 확인 후 원래대로 되돌렸다

핵심 확인 포인트

#확인 항목상태
1.kiro/settings/mcp.json으로 aws-docs MCP를 연결했다
2문항을 공식 문서 근거로 사실 검증하고 오류를 수정했다
3자동 검사(Hook)를 만들었다
4디버그 흔적·필드 누락 지적이 저장 즉시 뜨는 것을 확인했다
교육 포인트 정리

이 Lab에서 배운 것

  1. 코드 정확성 ≠ 사실 정확성: 실행으로 확인되는 것과 안 되는 것
  2. MCP: AI를 외부 자료(AWS 공식 문서)에 연결해 근거·최신성을 확보
  3. Hooks: 저장 같은 사건에 자동 검사를 걸어 검증을 시스템화
  4. 검증 3단계: 리뷰 → MCP → Hooks가 한 줄기로 이어진다

아직 안 된 것 (다음 Lab에서 해결)

  • ❌ 만든 앱이 아직 내 컴퓨터에만 있음 (남이 접속 못 함)
트러블슈팅

MCP 연결이 안 됨

uvx가 설치돼 있는지(사전 준비 ③) 확인하고 네트워크를 점검합니다. 그래도 안 되면 강사 시연을 참고합니다.

문서 없이 답만 함

반드시 aws-docs 도구로 문서를 조회해서 근거와 함께 답해줘라고 다시 지시합니다.

내 문항에 오류가 없음

→ 예시로 연습합니다. “S3 단일 객체 최대 용량은 5GB이다”(틀림 — 정답 5TB), “S3 Standard 내구성은 99.99%이다”(틀림 — 내구성은 99.999999999%, 99.99%는 가용성).

Hook이 안 돎

→ 실행 시점(채팅 전송 시)과 대상 파일 설정이 맞는지 Kiro에게 확인 요청합니다.

참고 자료