| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- html
- 인텔리제이
- CSS
- 단위테스트
- input
- 자바스크립트
- junit
- 배열
- vscode
- 테스트자동화
- Eclipse
- Java
- 자바
- Visual Studio Code
- math
- IntelliJ
- junit5
- SpringBoot
- js
- javascript
- Array
- ArrayList
- 문자열
- string
- 자바문법
- java테스트
- 정규식
- list
- HashMap
- 스프링부트
- Today
- Total
어제 오늘 내일
[Spring Boot] 마법이 아니라 과학입니다! 자동 설정(Auto Configuration)의 비밀 본문
Spring Boot를 처음 접할 때 가장 놀라워하는 점은 "설정할 게 거의 없다"는 것입니다. 과거 Spring Legacy 시절에는 XML 파일에 수백 줄의 설정을 적어야 했는데, 지금은 build.gradle에 라이브러리 한 줄만 추가하면 끝납니다.
이게 가능한 이유는 바로 @SpringBootApplication 어노테이션 속에 숨겨진 자동 설정(Auto Configuration) 덕분입니다. 오늘은 이 '마법' 뒤에 숨겨진 '과학(로직)'을 알아보겠습니다.
1. 비밀의 열쇠: @SpringBootApplication
프로젝트를 생성하면 메인 클래스 위에 딱 하나 붙어있는 이 어노테이션, 다들 보셨죠?
@SpringBootApplication
public class MyServerApplication {
public static void main(String[] args) {
SpringApplication.run(MyServerApplication.class, args);
}
}
사실 이 어노테이션은 3가지 핵심 어노테이션을 합쳐놓은 종합 선물 세트입니다.
@SpringBootConfiguration: "이 클래스가 설정 파일이야"라고 알려줍니다.@ComponentScan: "내 패키지 아래에 있는@Component,@Service등을 찾아서 빈으로 등록해!" (우리가 만든 빈 등록)@EnableAutoConfiguration: ★오늘의 주인공! (외부 라이브러리 빈 등록)
2. 자동 설정은 어떻게 작동하나요? (Jar 스캐닝)
@EnableAutoConfiguration은 스프링 부트가 시작될 때 다음 두 가지 작업을 수행합니다.
- 클래스패스(Classpath) 확인: 현재 프로젝트에 어떤 라이브러리(.jar)들이 포함되어 있는지 싹 훑어봅니다.
- 조건부 빈 등록: "어? H2 데이터베이스 라이브러리가 있네? 그럼 내가 미리 준비해 둔 H2 연결 설정을 켜야겠다!"
이 과정은 무작정 일어나는 것이 아니라, 아주 정교한 조건(Condition)에 따라 움직입니다.
3. 핵심은 @Conditional (조건부 어노테이션)
스프링 부트 내부 코드를 뜯어보면 수많은 설정 클래스들이 있는데, 그 위에는 항상 @Conditional... 로 시작하는 어노테이션이 붙어 있습니다. 이것이 자동 설정의 두뇌입니다.
① @ConditionalOnClass
- 의미: "특정 클래스(라이브러리)가 존재하면 실행해라."
- 예시:
H2클래스가 발견되면 ->H2DataSourceConfiguration을 활성화.
② @ConditionalOnMissingBean ★중요★
- 의미: "사용자가 이미 등록한 빈이 없으면 실행해라."
- 설명: 만약 여러분이 직접 DB 연결 설정(DataSource)을 코드로 짰다면, 스프링은 "아, 주인이 직접 설정을 했네? 그럼 내 자동 설정은 빠져줄게." 하고 물러납니다.
- 결과: 개발자의 설정이 항상 우선순위를 가집니다.
③ @ConditionalOnProperty
- 의미:
application.yml파일에 특정 속성이 있을 때만 실행해라.
4. 눈으로 확인하는 법 (--debug)
"도대체 어떤 설정이 자동으로 켜졌고, 어떤 건 꺼졌는지 궁금해!"
그렇다면 application.yml에 설정을 추가하거나, 실행 시 옵션을 줘보세요.
debug: true
콘솔 로그에 AUTO-CONFIGURATION REPORT가 출력됩니다.
- Positive matches: 조건이 맞아서 자동으로 켜진 설정들
- Negative matches: 조건이 안 맞아서 꺼진 설정들
이걸 보면 "아, 내가 의존성을 추가 안 해서 이 기능이 안 켜졌구나" 하고 바로 디버깅할 수 있습니다.
5. 요약: 마법이 아니라 '똑똑한 비서'입니다
Spring Boot의 자동 설정은 마법사가 주문을 외우는 것이 아닙니다.
수많은 if (이 라이브러리가 있다면?) 문으로 무장한 아주 성실하고 똑똑한 비서입니다.
@SpringBootApplication이 시작 신호를 보냅니다.@EnableAutoConfiguration이 라이브러리들을 스캔합니다.@Conditional조건에 맞는 설정들만 골라서 빈으로 등록합니다.- 만약 개발자가 직접 설정한 게 있다면, 그게 우선권(Override)을 가집니다.
마치며
이제 Spring Boot가 덜 무섭게 느껴지시나요? 원리를 알면 에러가 났을 때 "왜 안 되지?"가 아니라 "어떤 조건이 안 맞았을까?"를 고민하게 됩니다.
다음 포스팅에서는 이 자동 설정을 내 입맛대로 조절하는 application.yml (Properties) 파일의 비밀과 환경 분리(Profile) 전략에 대해 알아보겠습니다.
'IT > SpringBoot' 카테고리의 다른 글
| [Spring Boot] "로컬에선 H2, 실무에선 MySQL?" 환경별 설정 관리의 정석 (Profile & YAML) (0) | 2026.03.10 |
|---|---|
| [Spring Boot] 빈(Bean)의 탄생과 죽음: 생명주기(Lifecycle)와 스코프(Scope) 완벽 정리 (0) | 2026.03.09 |
| [Spring Boot] "객체 관리는 스프링에게 맡기세요!" 의존성 주입(DI) 완벽 가이드 (0) | 2026.03.08 |
| [Spring Boot] 톰캣(Tomcat)을 따로 설치 안 해도 된다고? 내장 서버의 비밀 (0) | 2026.03.04 |
| [Spring Boot] Docker로 3분 만에 모니터링 구축하기 (Prometheus + Grafana) (0) | 2026.03.04 |
