작성
·
54
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
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 스프링 사용 정리
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.