어제 오늘 내일

[Spring Boot] 마법의 비밀, Auto Configuration (자동 설정) 본문

IT/SpringBoot

[Spring Boot] 마법의 비밀, Auto Configuration (자동 설정)

hi.anna 2026. 3. 1. 07:19

스프링 부트를 처음 쓰면 정말 신기합니다.
DB 연결 코드를 짠 적도 없는데, H2 라이브러리만 추가하고 실행하면 알아서 DB가 연결되어 있습니다.
톰캣을 설치한 적도 없는데, 알아서 웹 서버가 뜹니다.

도대체 스프링 부트는 어떻게 내 마음을 읽고 설정을 자동으로 해주는 걸까요?
그 비밀은 바로 Auto Configuration (자동 설정)에 있습니다.


1. Starter와 Auto Configuration의 관계

이해를 돕기 위해 다시 요리에 비유해 보겠습니다.

  • Starter (의존성): "밀키트(식재료)"입니다. (예: 파스타 면, 토마토소스, 치즈)
  • Auto Configuration (자동 설정): "AI 요리사"입니다.
  1. 여러분이 starter-webh2-databasebuild.gradle에 넣습니다. (장바구니에 담음)
  2. 스프링 부트(AI 요리사)가 앱이 켜질 때 장바구니(Classpath)를 쓱 훑어봅니다.
  3. "어? 장바구니에 H2Spring Data JPA가 있네?"
  4. "그럼 주인님이 DB 연결을 원하시는구나! 내가 DataSource 빈(Bean)을 미리 만들어 드려야지!"

이 과정이 순식간에 일어납니다.


2. 마법의 주문, @SpringBootApplication

우리가 메인 클래스에 무심코 붙이는 이 어노테이션 안에 비밀이 숨겨져 있습니다.

@SpringBootApplication // ★ 이 안에 범인이 있습니다.
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

이 어노테이션을 뜯어보면(Ctrl + Click), 다음 3가지가 합쳐져 있습니다.

  1. @SpringBootConfiguration: "이건 설정 파일이야."
  2. @ComponentScan: "내 패키지 밑에 있는 @Controller, @Service 찾아서 등록해."
  3. @EnableAutoConfiguration: (핵심) "자, 이제부터 내가 알아서 설정 시작한다!"

3. AI 요리사의 판단 기준 (@Conditional)

하지만 무조건 다 설정해 버리면 곤란하겠죠? (MySQL 드라이버가 있다고 해서 Oracle 설정을 하면 안 되니까요.)
그래서 스프링 부트는 @Conditional (조건부)이라는 아주 똑똑한 판단 로직을 사용합니다.

실제 스프링 부트 내부의 DB 자동 설정 코드(예시)를 훔쳐보면 이렇게 생겼습니다.

@Configuration
@ConditionalOnClass(DataSource.class) // 1. 라이브러리에 DataSource 클래스가 있니?
@ConditionalOnMissingBean // 2. 개발자가 직접 만든 DataSource Bean이 없니?
public class DataSourceAutoConfiguration {

    @Bean
    public DataSource dataSource() {
        // 3. 위 조건이 다 맞으면 내가 기본 DB를 만들어줄게!
        return new HikariDataSource();
    }
}

[해석]

  1. @ConditionalOnClass: "너 build.gradle에 DB 라이브러리 추가했어?" (재료 확인)
  2. @ConditionalOnMissingBean: "혹시 개발자가 직접 DB 설정(@Bean)을 했어? 안 했으면 내가 해주고, 했으면 나는 빠질게." (중복 방지)

이 덕분에 우리는 기본 설정을 편하게 쓰다가도, 필요하면 언제든 내 입맛대로 설정을 덮어쓸 수(Override) 있는 것입니다.


4. application.yml은 요리사에게 주는 레시피

자동 설정이 다 해주지만, 가끔 옵션을 바꾸고 싶을 때가 있습니다. (예: DB 포트를 3306으로 바꾸고 싶다)
이때 application.yml에 적는 값들이 바로 AI 요리사에게 건네는 "쪽지"입니다.

server:
  port: 8081 # "요리사님, 톰캣 8080 말고 8081로 띄워주세요"

spring:
  datasource:
    url: jdbc:mysql://... # "DB는 H2 말고 이 주소로 연결해주세요"

자동 설정 클래스(@ConfigurationProperties)가 이 쪽지를 읽어서 설정에 반영합니다.


🎉 마무리

Spring Boot Auto Configuration은 마법이 아니라, "수만 가지 If-Else 문들의 집합"입니다.
"이게 있으면 이걸 켜고, 저게 없으면 저걸 끄자"라는 약속들이 미리 코딩되어 있는 것이죠.

덕분에 우리는 지루한 설정 파일(xml) 지옥에서 벗어나 비즈니스 로직에만 집중할 수 있게 된 것입니다!


[요약]

  1. Starter가 라이브러리(재료)를 가져오면,
  2. Auto Configuration이 클래스패스를 스캔해서(재료 확인),
  3. @Conditional 조건에 따라 필요한 빈(Bean)을 자동으로 등록해 줍니다.

 

반응형
Comments