| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- SpringBoot
- HashMap
- js
- input
- Eclipse
- html
- IntelliJ
- junit
- 배열
- 스프링부트
- junit5
- javascript
- Array
- 문자열
- 인텔리제이
- ArrayList
- 자바스크립트
- CSS
- Java
- Visual Studio Code
- java테스트
- string
- 자바문법
- 테스트자동화
- vscode
- 정규식
- list
- 자바
- math
- 단위테스트
- Today
- Total
어제 오늘 내일
[Spring Boot] 마법의 비밀, Auto Configuration (자동 설정) 본문
스프링 부트를 처음 쓰면 정말 신기합니다.
DB 연결 코드를 짠 적도 없는데, H2 라이브러리만 추가하고 실행하면 알아서 DB가 연결되어 있습니다.
톰캣을 설치한 적도 없는데, 알아서 웹 서버가 뜹니다.
도대체 스프링 부트는 어떻게 내 마음을 읽고 설정을 자동으로 해주는 걸까요?
그 비밀은 바로 Auto Configuration (자동 설정)에 있습니다.
1. Starter와 Auto Configuration의 관계
이해를 돕기 위해 다시 요리에 비유해 보겠습니다.
- Starter (의존성): "밀키트(식재료)"입니다. (예: 파스타 면, 토마토소스, 치즈)
- Auto Configuration (자동 설정): "AI 요리사"입니다.
- 여러분이
starter-web과h2-database를build.gradle에 넣습니다. (장바구니에 담음) - 스프링 부트(AI 요리사)가 앱이 켜질 때 장바구니(Classpath)를 쓱 훑어봅니다.
- "어? 장바구니에
H2랑Spring Data JPA가 있네?" - "그럼 주인님이 DB 연결을 원하시는구나! 내가
DataSource빈(Bean)을 미리 만들어 드려야지!"
이 과정이 순식간에 일어납니다.
2. 마법의 주문, @SpringBootApplication
우리가 메인 클래스에 무심코 붙이는 이 어노테이션 안에 비밀이 숨겨져 있습니다.
@SpringBootApplication // ★ 이 안에 범인이 있습니다.
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
이 어노테이션을 뜯어보면(Ctrl + Click), 다음 3가지가 합쳐져 있습니다.
@SpringBootConfiguration: "이건 설정 파일이야."@ComponentScan: "내 패키지 밑에 있는@Controller,@Service찾아서 등록해."@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();
}
}
[해석]
@ConditionalOnClass: "너build.gradle에 DB 라이브러리 추가했어?" (재료 확인)@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) 지옥에서 벗어나 비즈니스 로직에만 집중할 수 있게 된 것입니다!
[요약]
- Starter가 라이브러리(재료)를 가져오면,
- Auto Configuration이 클래스패스를 스캔해서(재료 확인),
@Conditional조건에 따라 필요한 빈(Bean)을 자동으로 등록해 줍니다.
'IT > SpringBoot' 카테고리의 다른 글
| [Spring Boot] Docker로 3분 만에 모니터링 구축하기 (Prometheus + Grafana) (0) | 2026.03.04 |
|---|---|
| [Spring Boot] 서버의 건강검진 리포트, Actuator 완벽 가이드 (0) | 2026.03.03 |
| [Spring Boot] SpringBoot Starter가 도대체 뭔가요? 의존성 지옥 탈출! (0) | 2026.03.01 |
| [Spring Boot] 실무편 - 예외 처리의 완성, 전역 예외 처리 (@RestControllerAdvice) (0) | 2026.02.28 |
| [Spring Boot] 필수 어노테이션 총정리 (Cheat Sheet) 📝 (0) | 2026.02.28 |
