#Backend

코딩 에이전트가 Spring을 못 짠다면, component scan부터 걷어내 보세요

코딩 에이전트가 Spring을 못 짠다면, component scan부터 걷어내 보세요
01

Summary

AI가 작성한 Spring 코드가 자꾸 터진다면? 비밀은 Component Scan에 있습니다!

플렉스(flex) 팀이 AI 코딩 에이전트 생산성을 60% 이상 끌어올린 Spring 명시적 빈 등록 아키텍처 노하우를 공개합니다.

AI 코딩 에이전트의 실수는 언어 자체의 한계보다 Spring Framework의 암묵적 빈 등록 매커니즘을 제대로 파악하지 못해서 발생합니다. 플렉스팀은 컴포넌트 스캔을 제거하고 명시적 빈 등록 구조를 도입함으로써 AI가 직관적으로 코드 맥락을 읽을 수 있는 아키텍처를 구축했습니다. 이를 통해 AI 공동 커밋 비율을 60% 이상 올리며 안전하고 효율적인 AI 협업 환경을 만들었습니다.

  • 01사내 Kotlin 저장소 커밋의 60% 이상에 AI 코딩 에이전트가 성공적으로 참여
  • 02Component Scan 제거 및 AutoConfiguration.imports 기반 명시적 빈 등록 체계 수립
  • 03AI 에이전트가 테스트 코드를 무력화(@Disabled)하는 위험을 방지하기 위한 하네스 및 Diff 검수 전략 제시
  • 04문자열 조건식 대신 클래스 기반 조건식(@ConditionalOnClass)과 ConfigurationProperties 도입으로 컴파일 시점 검증 강화

RECOMMENDATION

Spring Boot 기반 프로젝트에서 AI 코딩 에이전트 도입률을 높이고 빈 충돌 이슈를 줄이고 싶은 백엔드 팀에게 강력히 추천합니다. 컴포넌트 스캔을 명시적 등록으로 전환하면 AI와의 협업 효율과 코드 예측 가능성이 대폭 향상됩니다.

The Problem

@SpringBootApplication의 컴포넌트 스캔(Component Scan)으로 인해 암묵적으로 빈이 등록되고, 코딩 에이전트가 패키지 구조와 스캔 범위를 제대로 인지하지 못해 테스트 환경에서 빈 충돌(BeanDefinitionOverrideException)이나 기동 실패 등의 문제가 반복 발생했습니다.

The Solution

컴포넌트 스캔을 금지하고 @AutoConfiguration, @Import, AutoConfiguration.imports를 활용한 명시적 빈 등록 방식을 도입했습니다. 또한 @TestConfiguration과 필수 주입(Required Injection) 설정을 적용하여 빈 등록 및 매핑 오류를 명확히 감지하도록 개선했습니다.

The Result

사내 Kotlin 저장소에서 코딩 에이전트가 참여한 커밋 비율이 60% 이상으로 증가하였고, 암묵적 스캔으로 인한 오동작을 줄이고 PR Diff 검수 과정에서 빈 의존성 변경 사항을 직관적으로 확인할 수 있게 되었습니다.

Trade-off

명시적 등록 방식을 적용하면 새 빈을 추가할 때마다 @Import나 설정 파일에 한 줄을 직접 추가해야 하는 번거로움이 생기며, 누락 시 애플리케이션 실행 전까지 404 에러 등을 바로 인지하기 어려워 별도의 빈 등록 검증 테스트 구축이 필요합니다.

03

Key Concepts

Concept · 01

명시적 빈 등록 (Explicit Bean Registration)

컴포넌트 스캔에 의존하지 않고 @Configuration, @Import, AutoConfiguration.imports 등을 통해 등록할 빈을 코드에 직접 명시하는 방식입니다. 어떤 빈이 애플리케이션 컨텍스트에 포함되는지 한눈에 파악할 수 있어 의존성 추적이 용이합니다.

  • AutoConfiguration.imports 파일에 명시된 클래스만 빈으로 등록되도록 제한했습니다.
  • 새로운 빈 추가 시 PR diff에서 변경 사항을 명확하게 확인할 수 있습니다.
Concept · 02

에이전트 하네스 (Agent Harness)

AI 코딩 에이전트 주변에 ArchUnit과 같은 아키텍처 검사 테스트나 Git Hook 등의 검증 도구를 두어 아키텍처 규칙을 강제하는 시스템적 구성입니다.

  • AGENTS.md에 적힌 규칙을 ArchUnit 테스트로 자동 검사하는 방식을 활용합니다.
  • 에이전트가 실패하는 테스트를 @Disabled로 끄는 현상이 발생할 수 있으므로 테스트 코드 diff 검토가 병행되어야 합니다.
Concept · 03

AutoConfiguration.imports

Spring Boot 2.7 이상에서 도입된 파일 기반의 자동 설정 명세 메커니즘으로, 명시적으로 등록할 자동 설정 클래스 목록을 관리합니다.

  • 스캔 범위를 추적할 필요 없이 파일 내용만으로 모듈의 모든 등록 빈을 한눈에 확인합니다.
  • 사용하지 않는 컨트롤러나 설정 클래스가 실수로 컨텍스트에 등록되는 현상을 방지합니다.