Skip to content

Spring Boot 자동 설정(Auto-configuration)

개요

스프링 프로젝트를 처음 세팅할 때 "DB 연결 빈을 하나하나 직접 만들어야 하나?"라는 고민이 들기 마련이에요. Spring Boot는 클래스패스에 어떤 의존성이 있는지를 보고 애플리케이션을 자동으로 설정해 주는 자동 설정(auto-configuration)으로 이 부담을 줄입니다. 예를 들어 클래스패스에 HSQLDB가 있고 직접 데이터베이스 연결 빈을 정의하지 않았다면, Spring Boot가 자동으로 인메모리 데이터베이스를 설정해요. 개발자가 설정해야 할 최소한의 것을 남겨둔다는 게 핵심이죠.

핵심 개념

비침습적(non-invasive) 설계

자동 설정의 중요한 성질은 비침습적이라는 점이에요. 즉, 개발자가 정의한 설정이 있으면 자동 설정이 물러납니다. 예를 들어 직접 DataSource 빈을 정의하면 기본 내장 데이터베이스 지원은 뒤로 빠지죠. 자동 설정은 개발자가 만들어 넣은 것에 밀리는 구조로 설계되어 있어요.

어떤 설정이 적용됐는지 확인

지금 어떤 자동 설정이 적용되고 있는지, 왜 적용됐는지 궁금하다면 애플리케이션을 --debug 스위치로 시작해 보세요. 핵심 로거들의 디버그 로그가 켜지고 콘솔에 conditions report(자동 설정 조건 보고서)가 출력돼요. "이 조건이 충족돼서 이 설정이 적용됐다/안 됐다"는 이유를 직접 볼 수 있습니다.

특정 자동 설정 끄기

적용되는 자동 설정 클래스 중 원치 않는 것이 있다면 @SpringBootApplicationexclude 속성으로 끌 수 있어요.

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class MyApplication {}

클래스가 클래스패스에 없으면 excludeName 속성으로 전체 이름(FQCN)을 쓰면 됩니다. @EnableAutoConfiguration을 쓸 때도 같은 옵션이 있고, spring.autoconfigure.exclude 프로퍼티로도 제어할 수 있어요. 자동 설정 클래스 이름은 공개 API지만, 그 내부의 중첩 설정이나 빈 메서드는 내부용이니 직접 사용하지 않는 게 좋아요.

자동 설정 패키지(Auto-configuration Package)

@EnableAutoConfiguration(또는 @SpringBootApplication을 통해 그 효과)은 기본 자동 설정 패키지를 정하는데, 각 자동 설정 기능은 엔티티나 스프링 데이터 저장소 같은 것을 스캔할 때 이 패키지를 기본으로 봅니다. @AutoConfigurationPackage로 추가 패키지를 지정할 수도 있어요.

실제 적용 (데이터스케쳐스 관점)

웹빌더 백엔드의 Spring Boot 서비스는 자동 설정 덕분에 반복 설정 코드를 줄여요.

  • 스타터 기반 자동 설정 — 웹, JPA, 보안 같은 스타터를 추가하면 관련 자동 설정이 함께 켜져서 최소 설정으로 시작해요.
  • 조건 보고서 활용 — 빈 구성이 예상과 다를 때 --debug로 conditions report를 확인해 원인을 파악합니다.
  • 필요한 것만 끄기 — 데이터 소스를 직접 관리하는 모듈은 exclude로 관련 자동 설정을 꺼서 충돌을 막아요.

더 알아보기