Files
dap-was-dapms/docs/decisions/README.md
koseokmin ad7fccbed1 Tool inputSchema에 참조·정규식 정책을 적용한다
매니페스트가 선언한 inputSchema는 외부가 정하는 입력이다. JSON Schema
검증기는 문서 밖 $ref를 만나면 그 주소로 직접 조회하므로 매니페스트가
서버의 outbound 호출 대상을 정하는 통로가 된다. pattern은 joni와
graal-js가 없어 java.util.regex의 백트래킹 경로로 처리되고, 인증이 없는
경계(ADR-0006)라 호출 빈도를 줄여 주는 계층도 없다.

ToolSchemaReferencePolicy가 문서 밖 참조와 미지원 dialect를 막고,
ToolSchemaPatternPolicy가 정규식 길이·무한 수량자 개수·중첩 반복을
검사하며 pattern을 쓰는 필드에 maxLength를 요구한다. 길이를 묶을 수
없는 patternProperties는 거부한다.

검사는 ToolMetadata의 표준 생성자 한 곳에서만 한다. Portal 매니페스트
파싱, local 파일 로딩, Redis snapshot 역직렬화가 모두 이 생성자를
지나므로 조회 경로가 늘어도 검사 지점은 하나로 남는다. 위반은
IllegalStateException이라 기존 매니페스트 형식 오류와 같게 다뤄지고
bundle 단위 실패 격리가 그대로 적용된다.

근거와 한계는 ADR-0011, ADR-0012에 있다. ADR-0012가 classpath 근거로
인용하는 docs/sbom도 함께 가져온다.

192개 테스트 전부 통과. 기존 169건은 새 검사에 걸리지 않는다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 17:20:50 +09:00

1.7 KiB

Architecture Decision Records

장기 설계 결정은 ADR로 관리한다.

  • Accepted: 확정된 결정
  • Superseded: 후속 ADR로 대체된 결정
  • Rejected: 검토했으나 채택하지 않은 결정

결정이 변경되면 기존 ADR을 삭제하거나 의미를 덮어쓰지 않고 새 ADR에서 대체 관계를 기록한다.

결정 목록

ADR 제목 상태
ADR-0001 Stateless 실행 책임 경계 Accepted
ADR-0002 Agent Builder Tool 노출 제한과 단일 Tool 호출 Accepted
ADR-0003 Builder Tool UID를 시스템 간 식별 키로 사용 Superseded
ADR-0004 300초, Raw Data, unsafe retry 실행 가드레일 Accepted
ADR-0005 표준 MCP Tool name을 실행 식별자로 사용 Accepted
ADR-0006 MCP Server는 인증·인가를 하지 않는다 Accepted
ADR-0007 MCP 배포 하나는 Tool Service 하나만 본다 Accepted
ADR-0008 공유 host의 path를 독립 MCP 배포로 연결 Superseded
ADR-0009 컨테이너가 공개 MCP path를 직접 처리 Accepted
ADR-0011 Tool inputSchema는 문서 밖을 참조하지 않는다 Accepted
ADR-0012 Tool inputSchema의 정규식에 예산을 둔다 Accepted