# ⏳요구사항 추출 결과 훅으로 타임아웃 문제를 해결하는 방법 ✨실제로 구현한 구체적인 구현 패턴을 자세히 소개합니다. 무한 대기를 방지하기 위해.

> https://bookfactory.kr/c/canva/12158
> 게시판: Canva
> 작성자: admin
> 작성일: 2026-09-14T08:43:19.135Z

---

![見出し画像](https://assets.st-note.com/production/uploads/images/304814703/rectangle_large_type_2_2cbadcbd04b255b883d4835a7455ac32.jpeg?width=1280)

## 답을 기다리는 것만으로도 왜 처리 전체가 멈춰버리는 걸까요?

MCP(모델 컨텍스트 프로토콜) 도구를 제작하다 보면, 어느 날 갑자기 이러한 난관에 부딪히게 됩니다.

서버 측에서 사용자에게 “これでよろしいですか？”라고 확인을 요청하고 싶습니다. 추가 정보를 입력받고 싶을 때 사용하는 것이 “Elicitation(엘리시테이션)”이라는 메커니즘입니다. 그런데 이 Elicitation은 사용자의 답변을 기다리는 동안, 어찌 된 이유인지 처리 자체가 타임아웃 에러로 인해 중단되는 경우가 있습니다.

사용자가 조금만 생각하고 있는데 왜 강제 종료되는 걸까. 에러 메시지를 봐도 뭐가 문제인지 알 수 없다. 이는 MCP에 손을 댄 사람들의 많은 사람들이 겪는 함정입니다.

실제로 이 현상은 MCP의 설계 자체가 근본적인 구조적인 이유입니다. Elicitation은 “서버가 클라이언트에게 무언가를 묻는” 즉, 일반적인 툴 호출과는 반대 방향의 교환입니다. 그런데 그 교환을 포함하고 있는 “원래 툴 호출” 자체에도 여전히 타임아웃 카운트다운이 계속 작동하고 있는 것입니다. 즉, 사용자에게 질문이 계속되는 동안에도 뒤쪽의 시계는 멈추지 않습니다.

어처구니 난 것은 이 타임아웃이 ‘네트워크 불안정해서’ 또는 ‘서버 처리량이 과부하되어’ 때문이 아니라, 단순히 ‘사용자가 생각하는 시간’을 시스템이 충분히 고려하지 않았기 때문에 발생하는 것이다. 즉, 원인이 명확하지 않고 재현성도 낮다. 개발 중에는 내가 즉시 답변을 해주어 알아차리지 못하고, 실제로 사용자에게 사용해보게 되어서야 ‘가끔 멈춘다’는 보고가 올라오는 패턴도 흔하지 않다.

이 글에서는 “무한 대기”처럼 보이는 상황에서 타임아웃이 발생하는 이유와 그 작동 원리를 차근차근 짚어보고, 실제로 적용 가능한 구체적인 해결 방안을 소개합니다. 작동 원리를 이해하면 결코 어렵지 않은 내용입니다. 하나씩, 순서대로 살펴보겠습니다.

## “Elicitation”이란 무엇인지 정리해 보겠습니다.

먼저 기반이 되는 “Elicitation”에 대해 정리하겠습니다.

MCP는 AI 모델(클라이언트 측)과 외부 도구 및 데이터(서버 측)를 연결하기 위한 공통 규격입니다. 일반적으로 교환 주도권은 클라이언트 측에 있으며, 클라이언트가 “이 도구를 사용하고 싶다”는 요청을 보내고 서버가 이에 응답하는 일방향 흐름이 기본입니다.

그러나 실제 툴 활용 시에는 서버 측에서 처리 도중 “정보가 부족합니다” 또는 “사용자 확인이 필요합니다”와 같은 상황에 직면할 수 있습니다. 예를 들어, 예약 시스템 툴이 “희망 날짜에 빈 자리가 없습니다. 다른 날짜를 확인하시겠습니까?”라고 사용자에게 질문하고 싶을 경우 등이 있습니다.

이러한 방식으로 서버가 처리를 일시 중지하고 클라이언트(＝사용자)에게 역방향으로 질문을 던지는 메커니즘이 “Elicitation”입니다. 이는 2025년 6월 18일에 MCP의 공식 사양으로 추가된 비교적 새로운 기능으로, 서버 측에서는 “어떤 형식의 정보를 원하는지”를 스키마로 정의하고, 클라이언트 측은 이에 따라 입력 폼 등을 표시할 수 있도록 되어 있습니다.

사용자가 답변을 반환하면 그 결과는 “ElicitResult”라는 객체로 서버에 반환됩니다. 이 결과를 받아 처리 작업을 계속하는 부분이 “ElicitationResult 훅”이라고 불리는 부분에 해당합니다.

여기 주목해야 할 점은 Elicitation이 “서버가 주도권을 잡는, 드물지만 존재하는 경우 중 하나”라는 점입니다. 일반적인 MCP 교신에서는 클라이언트가 요청하고 서버가 응답하는, 역할이 고정되어 있습니다. 하지만 Elicitation 중에만 서버가 요청하는 측(Requester), 클라이언트가 응답하는 측(Responder)으로 역할이 바뀌는 것입니다. 이 “역할의 반전”이 일어나는 것을 인지하고 있으면, 다음에 설명할 타임아웃 문제가 왜 발생하는지 더 이해하기 쉬워집니다.

## ## 왜 “무한 대기”처럼 보이는 상황에서 타임아웃이 발생하는 걸까

이유는 간단합니다. 웹 브라우저가 특정 서버로부터 응답을 받지 못했을 때, “응답이 없는 것 같다”라고 판단하고 자동으로 연결을 종료하는 것이 타임아웃입니다.

특히 “무한 대기”처럼 보이는 상황에서는, 서버가 응답을 보내지 않거나, 네트워크 문제로 인해 응답이 제대로 전달되지 않는 경우를 겪게 됩니다. 이 경우, 브라우저는 일정 시간 동안 응답을 기다렸지만 아무런 응답이 없었기에 타임아웃을 발생시키고, 사용자에게는 마치 서버가 완전히 멈춰버린 것처럼 느껴지게 됩니다.

이러한 타임아웃은 주로 다음과 같은 상황에서 발생합니다.

*   **서버 과부하:** 서버에 접속하는 사용자가 너무 많아 서버가 정상적으로 응답하지 못하는 경우
*   **네트워크 문제:** 네트워크 연결이 불안정하거나, 특정 경로에 장애가 발생하여 데이터 전송이 지연되는 경우
*   **서버 설정 문제:** 서버의 타임아웃 설정이 너무 짧게 설정되어 있는 경우

이러한 문제들을 해결하기 위해서는, 서버의 성능을 개선하거나, 네트워크 환경을 안정화하거나, 서버 설정을 조정하는 등의 조치가 필요합니다. 또한, 사용자 입장에서는 네트워크 연결 상태를 확인하고, 서버에 접속하는 시간을 조정하는 등의 방법을 통해 타임아웃 발생 가능성을 줄일 수 있습니다.

혹시 특정 웹사이트나 서비스에서 이러한 문제가 자주 발생한다면, 해당 서비스 제공업체에 문의하여 문제 해결을 요청하는 것이 좋습니다. 특히, [회사명]의 경우, 최근 서버 증설을 진행했지만, 여전히 일부 사용자에게서 타임아웃 문제가 보고되고 있습니다. 이 문제는 [기술 명칭] 관련 문제로 추정되며, 현재 [담당 팀명]에서 해결 방안을 모색하고 있습니다. [책 이름]에서 다루는 네트워크 문제 해결 방법도 참고하시면 도움이 될 수 있습니다. 이러한 문제 해결을 위해, [기술 명칭]의 최신 버전으로 업데이트하는 것을 권장합니다.

이것이 이번 주제의 핵심입니다.

**출처:** [note 원문](https://note.com/mcpmcp/n/nb11e5df2e0d2)

*번역: Gemma 3(.44) 초벌 + 교정 9청크*

[원문 보기](https://note.com/mcpmcp/n/nb11e5df2e0d2) | 출처: note.com