Skip to content

backend: MCP annotation scanner BeanPostProcessorChecker WARN 정리 #1279

@aeei

Description

@aeei

배경

p11 deskpie clean boot에서 Spring AI MCP annotation scanner 기동 중 아래 BeanPostProcessorChecker WARN 4건이 발생한다.

수집 명령:

scripts/dev restart -p 11 -s deskpie -v

수집 로그:

Apr 28 03:57:46.424 |WARN| Bean 'org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration' ... is not eligible for getting processed by all BeanPostProcessors ... currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor] ... declare it with ROLE_INFRASTRUCTURE.
Apr 28 03:57:46.432 |WARN| Bean 'serverAnnotatedBeanRegistry' ... is not eligible for getting processed by all BeanPostProcessors ... currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor] ...
Apr 28 03:57:46.451 |WARN| Bean 'stringOrNumberMigrationVersionConverter' ... is not eligible for getting processed by all BeanPostProcessors ... currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor] ...
Apr 28 03:57:46.457 |WARN| Bean 'spring.ai.mcp.server.annotation-scanner-org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties' ... is not eligible for getting processed by all BeanPostProcessors ... currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor] ...

현재 의존성:

  • org.springframework.ai:spring-ai-starter-mcp-server-webmvc:2.0.0-M4
  • org.springframework.ai:spring-ai-mcp-annotations:2.0.0-M4

현재 설정:

  • backend/app/src/main/resources/application.yaml
    • spring.ai.mcp.server.annotation-scanner.enabled: true
  • backend/app/src/main/resources/application-local.yaml
    • logging.level.org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker: ERROR가 있으나, 실제 /actuator/loggers/org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker effectiveLevel은 INFO로 관측됨.

리서치 메모

목표

MCP 기능을 깨지 않으면서 boot log의 BeanPostProcessorChecker WARN 4건을 제거하거나, upstream 제약으로 당장 제거가 불가능하면 안전한 suppress 범위와 근거를 명확히 남긴다.

태스크

  • deskpie, linkpie, app별로 @McpTool, @McpResource, @McpPrompt, @McpComplete 사용 범위를 정리한다.
    • deskpie에서 실제 필요한 MCP annotation scanner 범위를 확인한다.
    • scanner를 서비스별로 조건부 활성화할 수 있는지 확인한다.
  • upstream 상태 확인
    • spring-projects/spring-ai#4694 상태/패치 여부 확인.
    • 현재 사용 중인 2.0.0-M4 이후 릴리스/스냅샷에서 해결됐는지 dependency bump 실험으로 확인.
    • milestone/RC/alpha는 프로젝트 정책상 바로 채택하지 말고, 안정 릴리스 후보만 최종안으로 제안한다.
  • local 재현 테스트/검증 루틴 작성
    • 최소 :dist:deskpie:bootRun 또는 scripts/dev restart -p 11 -s deskpie -v 로그에서 해당 WARN 4건을 grep으로 검출하는 재현 절차를 문서화한다.
    • 수정 후 같은 절차에서 WARN이 사라졌는지 확인한다.
  • 해결안 A: Spring AI 버전 업데이트 검증
    • Spring AI BOM/관련 MCP artifact 업데이트로 WARN이 사라지는지 확인한다.
    • MCP tool/resource 등록과 /mcp smoke test가 계속 통과하는지 확인한다.
  • 해결안 B: annotation scanner 비활성 + 명시적 provider 등록 검토
    • spring.ai.mcp.server.annotation-scanner.enabled=false로 WARN이 사라지는지 확인한다.
    • 필요한 MCP tools/resources를 명시적 provider bean으로 등록 가능한지 확인한다.
    • reflection/annotation scanner 의존도를 낮출 수 있으면 이 방향을 우선 검토한다.
  • 해결안 C: 로그 레벨 suppress는 최후 수단으로만 검토
    • 현재 application-local.yaml의 logger 설정이 effectiveLevel INFO로 남는 이유를 확인한다.
    • 정확한 logger key 또는 logback 설정으로 4건만 suppress 가능한지 확인한다.
    • 단, suppress 전에는 early bean 생성이 실제 AOP/transaction/security proxy 누락을 만들지 않는다는 근거를 남긴다.
  • 회귀 검증
    • MCP endpoint smoke test: /mcp 초기화/도구 또는 리소스 목록 조회.
    • backend 관련 테스트: MCP integration test 또는 대상 모듈 테스트.
    • boot log grep: BeanPostProcessorChecker WARN 0건.

완료 조건

  • scripts/dev restart -p 11 -s deskpie -v 기준 해당 4개 WARN이 사라지거나, upstream bug로 보류 시 suppress/보류 근거가 문서화되어야 한다.
  • MCP 기능 smoke test가 통과해야 한다.
  • PR에는 선택한 해결안과 버린 해결안을 함께 기록한다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Backlog

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions