합성 예약 앱 하나에서 고정 입력 스크립트로 두 통로를 시험했다. AI 모델은 호출하지 않았다.
화면 폼 옆에 호출 통로를 하나 더 붙이면 같은 저장 전 규칙까지 연결될까? WebMCP는 웹페이지가 AI용 기능을 등록할 수 있게 하는 실험적 브라우저 기능이다. 이번에는 미리 정한 입력을 스크립트로 넣었고, AI 모델이 도구나 입력을 고르지 않았다. 두 통로는 의도적으로 같은 규칙을 거치도록 만들었다. Mac 한 대의 합성 앱에서 계획한 36회는 기대와 맞았지만, 절차 예외를 포함한 좁은 연결 확인이다. 자율 예약이나 일반적인 안전성을 시험한 것은 아니다.

개념 일러스트이며 실제 시험 화면이나 WebMCP 화면이 아니다.
이 글의 목차
출처로 보는 두 번째 문
Chrome 안내는 페이지가 기능 이름·입력 형식·실행 코드를 등록하는 방식을 설명한다. 개요에는 로컬 시험용 설정이 나온다(두 문서의 저장된 확인 기록: 2026년 10월 10일). 이 글은 실험적 기능의 로컬 시험을 다룬다. 정식 보급이나 모든 브라우저의 지원을 뜻하지 않으며, WebMCP 명세 초안도 W3C 표준이 아니라고 명시한다(저장된 확인 기록: 2026년 10월 9일).
도구 설명은 안내문이고, 스키마는 입력 형식이다. 스키마 검사가 앱에 닿기 전에 호출을 막을 수도 있다. 예약 가능 여부와 재전송 처리도 앱 코드에서 확인하자는 것이 이 글의 판단이다. Chrome 권장 지침도 코드에서의 검증과 화면 갱신을 권한다(저장된 확인 기록: 2026년 10월 10일). 검사와 중복 처리를 두 문 뒤의 한곳에 두자는 것은 이 글의 설계 판단이다. WebMCP가 자동으로 제공하는 보호 효과가 아니다.
기록된 관찰: 같은 규칙까지 도달했을까
2026년 10월 10일, Mac 한 대(macOS 27.0은 10월 9일 장비 기록)에서 설치된 Chrome 155.0.8059.39와 시험용 설정 enable-webmcp-testing을 사용했다. 별도 프로필·로컬 서버의 합성 예약 앱 하나이며 실제 예약·계정·모델 호출은 없었다. 브라우저 자동 조작 도구 Playwright 1.62.1로 폼을 입력하고, 페이지 안에서 브라우저가 조회한 실제 도구를 호출했다. 도구 경로를 모의 호출·직접 함수 호출·직접 HTTP 요청으로 대체하지 않았다.
두 경로는 같은 서버 함수에서 검사하고 로컬 데이터베이스 SQLite에 저장했다. 앱까지 잘못된 입력이 도달하도록 폼의 브라우저 기본 검사를 끄고, 도구 스키마의 필수·날짜 제약도 생략했다. 날짜도 일반 텍스트로 입력했고, 빈 항목은 전송 자료에서 뺐다. 따라서 참석자 누락은 빈 문자열이 아닌 항목 자체의 누락이다. 실서비스 검사를 약하게 만들라는 권고가 아닌 시험 설정이다.
아래는 같은 프로젝트에서 작성한 최종 기대표다. 실험 기록은 사전 준비 기록에 근거해 구현 전에 적었다고 밝힌다. 초기 계획의 같은 요청 세 번째 제출은 10월 9일 기획 판정에서 예약 불가 날짜로 교체됐다. 예약 가능일은 2026년 10월 10~12일로 고정된 합성 재고이고, 09:00은 시간대 변환 없는 표기다. 요청 ID는 재전송 판단용 번호이며 저장된 예약 ID와 다르다.
| 순서·입력 | 기대 결과 |
|---|---|
정상: 요청 ID R1, Sample A, 2026-10-10, 09:00 |
예약 한 건 생성 |
같은 입력 재전송 |
기존 예약 ID 반환, 예약 행 추가·변경 없음 |
새 요청 ID, 2026-10-13 |
실제 날짜이지만 예약 가능일 밖이므로 거절 |
새 요청 ID, 2026-02-30 |
존재하지 않는 날짜이므로 거절 |
새 요청 ID, 참석자 항목 누락 |
필수 정보 누락으로 거절 |
R1 유지, 날짜만 2026-10-11로 변경 |
같은 요청 ID의 내용 충돌로 거절 |
조건마다 예약 데이터베이스를 비우고 한 통로로 여섯 단계를 실행했다. 뒤 단계는 첫 예약에 의존한다. 켜짐·꺼짐은 폼이 아니라 WebMCP 시험 기능의 상태다. 1회차는 기능 켜짐에서 폼→도구, 이후 기능 꺼짐에서 폼 순서였다. 2회차는 기능 켜짐에서 도구→폼, 이후 기능 꺼짐에서 폼 순서였다.
| 조건 | 1회차 | 2회차 |
|---|---|---|
기능 켜짐, 화면 폼 |
6/6 기대 일치 |
6/6 기대 일치 |
기능 켜짐, 고정 입력 스크립트의 도구 호출 |
6/6 기대 일치 |
6/6 기대 일치 |
기능 꺼짐, 화면 폼만 |
6/6 기대 일치 |
6/6 기대 일치 |
총 36회는 도구 호출 12회와 폼 제출 24회다. 각 칸의 실패·비교 무효·미실행은 모두 0개다. 36회는 의존하는 입력 순서를 두 회차 실행한 관찰 수이며, 독립 표본이나 성공률이 아니다. 이 결과는 준비 중 수정 한도 위반과 첫 실행 거부 뒤의 절차 예외를 포함해 수용됐다. 결과를 안 뒤 작성된 예외 판정이며, 검증자의 무조건적 수용 유보는 철회되지 않았다. 추가 재실행도 요구되지 않았다.
통과는 예상한 거절도 포함한다. 앞 검사를 일부 완화하고 같은 함수에 연결한 이 설정에서, 모든 시도의 함수 도달·응답·실제 예약 행·ID·화면이 기대와 맞았다. 함수에 닿기 전 입력 변환도 이 고정 입력만 확인했다. 더 엄격한 스키마나 기본 입력 검사가 먼저 막는 경우와는 비교하지 않았다.
재전송은 앱이 기존 ID를 돌려줬고, 네 거절 뒤에도 원래 한 행의 내용이 유지됐다. 같은 ID의 순차 재전송만 확인했으므로 모든 중복 예약을 막았다는 뜻은 아니다. 폼에서 만든 예약을 도구로 재전송하지 않았고, 설정상 가능한 마지막 날인 10월 12일은 제출하지 않았다.
꺼짐 조건은 설정을 Disabled(꺼짐)로 바꾸고 재시작한 뒤 실제 도구 인터페이스가 없음을 확인했다. 폼의 통과 수만으로 기능 꺼짐을 판단한 것은 아니다. 꺼진 상태의 도구 호출 자체는 시도하지 않았다. 호출을 시도했을 때 확실히 차단되는지, 이후에도 계속 기능이 없는지는 검증하지 않았다. 두 회차 모두 폼은 같은 결과를 냈고, 다시 켠 뒤 도구 등록·목록 조회도 확인했다. 상세 입력과 판정은 별도로 보관한 실험 기록에 남겼다.
실험의 추가 비용은 미화 0달러였다. 준비 시간은 기록상 약 36분 3초를 37분으로 올림해 계산했고, 측정 실행은 13.553초였다. 별도 검증은 배정한 20분 이내에 끝났다고 기록되어 있다. 준비 시간에는 앞선 조사·편집 작업이 포함되지 않으며, 이 시간과 비용은 두 경로의 효율 비교값이 아니다.
준비 실패와 절차 예외도 남겼다
측정 전에는 로컬 연결 제한, 연결 오류 처리, 증거가 빠졌을 때 이미 알려진 실패를 지우거나 실행한 칸을 미실행으로 남길 수 있는 판정 결함을 고쳤다. 이는 측정 앱의 실패가 아니라 검사 도구의 준비 단계 결함이다. 통신 차단 장치에서만 거절된 요청은 기록하되 중단하지 않도록 바꿨다. 페이지·브라우저 문맥의 외부 요청, 관측된 외부 전송·우회, 잘못된 이벤트는 계속 중단 대상이었고, 외부 전달 경로나 허용 도메인은 추가하지 않았다. 측정 중에도 이 장치의 거절 기록 187건이 남았다. 배경 요청이라는 분류는 기록 층에 따른 것이며 운영체제 프로세스를 따로 식별한 결과가 아니다.
원래의 ‘수정 한 번’ 한도를 넘겼다는 사실을 수용하고, 코드·입력·기대표를 더 바꾸지 않기로 정한 시점부터 한도를 적용하도록 바꿨다. 앞선 위반이 없어지는 것은 아니다. 고정 전 앱 파일 묶음도 바뀌어 기능 꺼짐 근거를 새로 수집했으며, 36회 측정에 이전 파일의 결과를 섞지 않았다.
고정 뒤 진행을 맡은 Codex 에이전트가 변경 감시 대상인 결정 문서에 메모를 덧붙여 첫 실행이 거부됐다. 브라우저 실행·측정 전에 막혔고, 문서를 원래 바이트 그대로 복원해 같은 날 실행했다. 코드·입력·기대표·고정값은 바꾸지 않았다. 별도 검증 에이전트는 저장된 관측을 재확인했지만 ‘실행 전 실패면 당일 중단’ 규칙 해석 때문에 무조건적인 수용을 보류했다. 총괄은 결과를 안 뒤 절차 예외로 수용했다. 원래 절차를 모두 지켰다는 의미는 아니다.
측정하지 않은 것
작은 순차 입력을 두 회차 실행했고, 기대표도 같은 프로젝트에서 작성했다. 설계와 기대표가 같은 오류를 공유할 가능성이 남는다.
- 앱 동작: 동시 재시도, 다른 요청 ID의 중복, 한 시간에 한 예약만 허용하는지, 두 통로를 오가는 재전송, 장애 후 복구는 확인하지 않았다. 공백 정리, 다른 시간·필드·자료형·입력 종류, 가능일 경계의 포괄적 검사, 시간대 변환과 기본 입력 검사 동등성도 미검증이다.
- AI와 실서비스: AI의 도구 선택·자연어 및 언어 간 이해·자율 복구, 속도·비용 절감, 화면 조작 대비 우위, 실서비스 부하·운영 준비도·통계적 신뢰성은 측정하지 않았다.
- 브라우저: 다른 브라우저나 서로 다른 사이트 사이 동작, 권한·동의·일반 보안은 검증하지 않았다. 폼 속성으로 도구를 선언하는 방식, Chrome 156 전용 부가 정보, 의도적으로 규칙을 우회하는 비교군도 제외했다.
문서의 미확인 사항은 미실행 시험과 구별해야 한다. 저장된 조사에서는 시험 기간 연장·정식 보급 여부, 과거 API 이름 변경 경위와 동의 기능 설명의 불일치를 해소하지 못했다. 10월 9일의 ChromeStatus 요약과 안내 문서 사이 상태 불일치도 이후 해결됐다는 근거가 없다. 설치본의 업데이트 채널 역시 미확인이다. 이 기록에서 브라우저가 동의를 보장한다고 결론낼 수 없고, 발행 전 사용한 문서를 다시 확인해야 한다.
운영체제 전체 통신은 측정하지 않아 ‘외부 통신 0’이나 완전한 격리를 주장할 수 없다. 페이지 기록만으로 운영체제 알림의 부재도 확인할 수 없다. 별도 검증은 저장된 증거의 대조이며 실시간 참관이나 제삼자 인증이 아니다.
작성자 판단: 두 문 뒤의 규칙을 요청하자
이번 결과는 의도적으로 공유한 규칙까지 두 경로가 연결됐다는 좁은 확인이다. 앱 제작을 부탁할 때는 아래 질문을 복사해 쓸 수 있다. 효과를 검증한 양식이나 안전 인증은 아니다.
□ 비교할 폼과 도구가 쓰는 공통 검사·저장 함수의 위치를 보여 주세요.
□ 같은 요청 번호로 같은 내용을 다시 보낼 때와 다른 내용을 보낼 때의 규칙을 적어 주세요.
□ 요청자와 구현 전에 ‘입력 → 기대 응답·예약 행·화면’ 표를 확정해 주세요. 코드와 표가 같은 오류를 공유할 수도 있습니다.
□ 고정 입력을 스크립트로 보냈는지 밝히고, 두 통로의 실제 응답·예약 ID·행·화면을 대조해 주세요.
□ 거절이 브라우저·입력 형식 검사·앱 중 어디서 일어났는지 남겨 주세요. 이번 관측의 거절은 모두 앱에서 일어났습니다.
□ 이번 시험은 앞 검사를 일부 완화했습니다. 실서비스의 브라우저·입력 형식 검사를 줄이는 근거로 쓰지 마세요.
□ 도구 기능이 실제로 꺼졌는지 확인하고, 폼도 같은 표로 시험해 주세요.
이 글은 AI를 활용해 자료 조사와 초안 작성을 보조했으며, 작성자가 최종 원고를 검토하고 수정 방향을 결정했습니다.
답글 남기기