편리한 부트 클래스 만들기 챕터에 질문이 있습니다.
121
작성한 질문수 1
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
MySpringBootMain 클래스의 main 메서드에서 MySpringApplication.run()을 호출하면서 인자로 MySpringBootMain을 넘깁니다. 이 자리는 configClass인데, MySpringBootMain에는 @MySpringBootApplication 어노테이션만 붙어있고, Bean이나 기타 설정에 대한 내용은 전혀 없습니다. 또한 @Configuration 어노테이션도 없습니다. 그렇다면 @MySpringBootApplication을 통해서 Configuration 클래스의 역할을 하는 것 같은데 이 부분이 잘 이해가 되지 않습니다. 아마도 @ComponentScan 어노테이션이 MySpringBootMain가 configClass의 역할을 하도록 해주는 것 같은데 어떤 원리인지 잘 모르겠습니다. EmbedTomcatSpringMain를 사용할 때는 HelloConfig.class를 넘기는데, 이때는 @Configuration이 붙어있으니까 이해가 됩니다. @ComponentScan이 붙어있으면 해당 클래스의 패키지의 모든 컴포넌트를 읽는다고 하는데, 여기에 뭔가 생략된 설명이 있는 것 같은데 잘 모르겠습니다. 질문이 중언부언해서 죄송합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
아자빠짜님께서 질문하신 내용은 스프링 부트의 어노테이션(@MySpringBootApplication)과 그 내부 동작 방식에 관한 것입니다. 대부분의 스프링 부트 애플리케이션은 @SpringBootApplication 어노테이션을 사용하여 설정됩니다. 이 어노테이션은 여러 유용한 기능들을 내포하고 있습니다. 주요한 것은 이하와 같습니다:
@SpringBootApplication: 이 어노테이션은 사실
@Configuration,@EnableAutoConfiguration,@ComponentScan세 가지 어노테이션을 포함합니다.@Configuration: 스프링의 설정을 위한 어노테이션으로, 자바 기반의 설정 클래스를 정의합니다.
@EnableAutoConfiguration: 스프링 부트에서 제공하는 자동 설정을 활성화합니다. 이로 인해 별도의 빈 등록 없이도 스프링 부트가 자동으로 필요한 빈을 설정합니다.
@ComponentScan: 지정된 패키지 및 그 하위 패키지들에서
@Component가 붙은 클래스를 스캔하여 스프링 빈으로 등록합니다. 보통 애플리케이션의 메인 클래스가 가장 상위 패키지에 위치하며, 이러한 클래스에 의해 전체 프로젝트에 대한 빈 스캔이 이루어집니다.
즉, @MySpringBootApplication을 포함한 MySpringBootMain 클래스는 이러한 역할을 담당하며, 사실상 자동 설정과 컴포넌트 스캔이 이루어지도록 합니다. MySpringApplication.run()을 호출하면서 이를 설정의 중심 클래스로 사용하게 됩니다.
질문에서 언급하신 EmbedTomcatSpringMain과 HelloConfig.class 같은 경우, 전통적인 스프링 설정 방식을 사용하여 직접적으로 설정 클래스를 지정하고 그 안에 @Configuration 어노테이션을 활용하는 방식입니다. 스프링 부트에서는 이러한 설정을 많이 간소화하고 자동화하는 데 중점을 둡니다.
관련해서 도움이 될 만한 기존 질문과 답변을 확인하시려면 아래 링크를 참고해주세요:
- SpringBootApplcation에 관한 질문입니다
- 스프링 부트 사용 vs 스프링 사용 정리
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
보안이 엄격한 데이터
0
73
1
MyProperties 자체를 클라이언트 코드에서 사용
1
43
1
http://localhost:8080/actuator/prometheus
0
85
3
jar 추가에대한 질문드려도될까요?
0
64
1
build.gradle bom link 변경
0
65
2
@Counted 초기화
0
48
1
@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..
0
101
2
springboot에서 actuator없이 micrometer를 사용할수 있나요?
0
67
1
@Configuration 질문드립니다.
0
84
2
[공유] 터미널 말고 IDE 에서 jar 실행하기
0
101
1
localhost:8080/hello-servlet 404오류
0
123
2
내장톰캣2 서블릿 톰켓 실행이 안됩니다
1
154
2
최대 Tomcat 스레드 수를 확인하는 지표
0
160
1
mac m2에서 startup.sh 실행후 아무 반응이 없습니다.
0
94
2
내장 톰캣 실행 오류 관련 질문드립니다.
0
158
1
스프링 발전 과정들도 자세히 알아둬야하나요??
1
127
1
스프링부트 ioc 컨테이너 갯수
0
89
1
404 페이지
0
133
3
actuator 호출시 타임스탬프 질문
0
90
1
순수 라이브러리 사용하기 2 - memory-v1
0
125
1
외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.
0
105
1
서블릿 컨테이너 초기화1 강의 관련 질문입니다~
0
94
1
Thread Config Max 패널 설정 변경 질문
0
128
1
스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.
0
108
1





