| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- @annotation
- 듀오링고
- 운영체제 병행 프로세스
- 패스트캠퍼스
- Jpa Repository
- 올한해수고했다
- 자바백엔드
- 스페인어로 날씨
- 리눅스 명령어
- fasstapi
- 백엔드구성
- 굿바이2024
- 스페인어로 과일
- jpa 리플렉션
- 코테 준비
- 스페인어 듀오링고
- 스페인어
- 맥북 한영키 설정
- 스프링부트 자동설정
- 웹서비스구조
- 맥북 한영키 윈도우
- 나도 할 수 있는 java&spring 웹 개발 종합반
- 알고리즘
- 백엔드기초
- K디지털기초역량훈련
- MSI 4K 모니터
- 3-tier 아키텍처
- p와 v연산
- github 업로드
- 캠프콘
- Today
- Total
DIVE AND RISE
스프링부트 자동설정 @SpringBootApplication의 정체 본문
공부 마무리용으로 딱 정리해줄게!
@SpringBootApplication을 중심으로 자동 설정의 핵심 개념과 동작 방식을 아래처럼 요약하면 좋을 것 같아.
🌱 @SpringBootApplication의 정체
@SpringBootApplication은 사실 3가지 애너테이션을 합쳐놓은 복합 애너테이션이야.
🔍 각 구성 요소 설명
1. @SpringBootConfiguration
- @Configuration을 상속한 애너테이션.
- 즉, 이 클래스는 설정 클래스임을 의미해.
- 내부에서 Bean을 등록하거나 설정을 정의할 수 있음.
2. @EnableAutoConfiguration
- 스프링 부트의 자동 설정 핵심 기능.
- 클래스패스에 있는 라이브러리를 기준으로 적절한 설정을 자동으로 구성해줌.
- 예: spring-boot-starter-web을 넣으면 → 톰캣, MVC 설정 자동 구성.
- 내부적으로는 META-INF/spring.factories에 정의된 설정들을 읽어와서 자동으로 Bean 등록.
✅ 포인트:
- 자동 설정은 @Conditional이라는 조건부 애너테이션으로 동작함. → "어떤 라이브러리가 있으면 이 설정을 적용해!" 같은 방식.
3. @ComponentScan
- 현재 패키지 기준으로 하위 패키지를 스캔하여 Bean 등록.
- 즉, 내가 만든 @Controller, @Service, @Repository 같은 컴포넌트를 자동으로 찾아 등록함.
🎯 핵심 정리: 왜 @SpringBootApplication이 중요할까?
- 스프링 부트가 복잡한 XML 없이도 잘 동작하는 이유는 바로 자동 설정 + 컴포넌트 스캔 덕분.
- @SpringBootApplication 하나로 기본적인 설정을 모두 처리 가능해서, 초기 설정 부담을 크게 줄여줌.
- 개발자는 비즈니스 로직 작성에만 집중할 수 있음.
✨ 전체 흐름 요약 그림 (개념적 흐름)
@SpringBootApplication
│
├── @SpringBootConfiguration → 설정 클래스
├── @EnableAutoConfiguration → 라이브러리 기반 자동 설정
└── @ComponentScan → 사용자 정의 Bean 자동 등록
💡 기억 포인트
- 자동 설정(EnableAutoConfiguration): 스프링 부트의 진짜 마법
- 조건 기반 설정(Conditional): 상황에 따라 적용 여부 판단
- 초보자의 친구(SpringBootApplication): 대부분의 앱은 이거 하나로 시작 가능
Q: 클래스패스에 있는 라이브러리를 기준으로 적절한 설정을 자동으로 구성해줌. 이게 무슨 말일까? 클래스패스는 어디 있는거야? @EnableAutoConfiguration 약간 이해가 안됨
ChatGPT의 말:
좋아, 진짜 핵심 궁금한 거 잘 짚었어!
@EnableAutoConfiguration이 어떻게 동작하는지와
"클래스패스에 있는 라이브러리를 기준으로 자동 설정한다"는 말이 무슨 뜻인지
아주 쉽게 풀어줄게!
✅ 클래스패스(Classpath)란?
📦 클래스패스 = 프로젝트가 실행될 때, 자바가 클래스와 리소스를 찾는 경로야.
- 보통 우리가 의존성 추가할 때 build.gradle이나 pom.xml에 라이브러리를 추가하잖아?
-
- 이 라이브러리가 다운로드되고, 컴파일되면 .class 파일들이 생기고,
- 자바는 프로그램 실행 시 이 경로(classpath)를 뒤져서 필요한 클래스를 찾는 거야.
implementation 'org.springframework.boot:spring-boot-starter-web'
👉 즉, 클래스패스에 있다는 건
**"이 프로젝트 안에 어떤 라이브러리들이 있는지 자바가 알고 있다"**는 의미!
✅ 그럼 @EnableAutoConfiguration은 뭘 하냐?
핵심: 클래스패스를 보고, 필요한 설정을 자동으로 켜줌!
예를 들어:
네가 spring-boot-starter-web을 넣었다면,
클래스패스에 spring-webmvc, tomcat, dispatcherServlet 같은 웹 관련 클래스들이 있음
→ 그러면 스프링 부트는
→ "아~ 이건 웹 앱이구나!"
→ 그래서 자동으로 DispatcherServlet, WebMvcConfigurer, Tomcat 등을 설정해주는 거야.
내부 동작 방식 (살짝 기술적인 설명)
- @EnableAutoConfiguration → spring.factories 파일을 읽음
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,...
- 이 설정들은 조건부 애너테이션 @ConditionalOnClass, @ConditionalOnMissingBean 등을 이용해 작동해. 예시
@Configuration
@ConditionalOnClass(DispatcherServlet.class)
public class WebMvcAutoConfiguration {
// 자동으로 DispatcherServlet 등록
}
🧠 쉽게 다시 요약하자면
| 클래스패스 | 자바가 클래스/리소스를 찾는 경로 (라이브러리 포함됨) |
| @EnableAutoConfiguration | 클래스패스를 보고 어떤 기능이 필요한지 판단해서 자동으로 설정 (예: 웹, DB 등) |
| 작동 방식 | spring.factories에 등록된 수많은 설정 클래스 + 조건부 로딩으로 구성됨 |
spring.factories는 너의 코드에서 생성되는 게 아니라,
**스프링 부트가 제공하는 starter 라이브러리들 안에 "미리 정의되어 있는 파일"**이야.
즉, 우리가 pom.xml이나 build.gradle에 적은 spring-boot-starter-* 들이
의존하는 라이브러리 JAR 안에 포함된 채로 이미 존재하는 거야.
🔄 흐름 다시 정리: "spring.factories는 언제, 어디서?"
1. 너가 spring-boot-starter-web 같은 스타터를 pom.xml에 추가함
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. 이 스타터는 내부적으로 spring-boot-autoconfigure라는 라이브러리를 포함하고 있어
(📦 핵심 자동 설정 기능의 본체)
spring-boot-starter-web
└─ spring-boot-autoconfigure
└─ META-INF/spring.factories (미리 정의되어 있음)
3. 이 spring.factories 파일은 Spring 팀이 라이브러리 만들 때 미리 작성한 설정 파일이야.
- 우리가 앱을 실행하면, @EnableAutoConfiguration이 자동으로 이 파일을 읽어 들이고,
- 여기에 정의된 수많은 AutoConfiguration 클래스들을 로딩하게 되는 거지.
🎯 정리된 흐름
너의 코드 (@SpringBootApplication)
↓
@EnableAutoConfiguration 동작
↓
클래스패스에 있는 라이브러리 탐색 (스타터 포함)
↓
각 라이브러리 안의 META-INF/spring.factories 파일 찾음
↓
거기 등록된 자동설정 클래스 목록을 로딩
↓
조건에 맞는 설정을 Bean으로 등록 (예: WebMvcAutoConfiguration)
🔎 spring.factories는 직접 만들 필요는 없음?
👉 대부분의 경우 ❌ 직접 만들 필요 없어
단, 커스텀 자동 설정을 만들고 싶다면 직접 만들 수 있음
예를 들어, 너만의 MyAutoConfiguration을 만들고
META-INF/spring.factories에 다음처럼 적으면 돼:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration
✅ 핵심 요약 다시 한 줄
spring.factories는 라이브러리를 만든 쪽(Spring) 이 자동 설정을 위해 미리 정의해둔 설정 파일이고,
앱 실행 시 @EnableAutoConfiguration이 이 파일을 클래스패스에서 찾아 읽는다!
'기술노트 > 자바' 카테고리의 다른 글
| 자바 어노테이션(@Annotation)과 의존성 (0) | 2025.04.05 |
|---|---|
| static main 메서드에서 같은 클래스 내 다른 메서드를 호출할 때 static을 붙여야 하는 이유 (0) | 2025.03.29 |