인프런 커뮤니티 질문&답변

아자빠짜님의 프로필 이미지
아자빠짜

작성한 질문수

스프링 부트 - 핵심 원리와 활용

편리한 부트 클래스 만들기

편리한 부트 클래스 만들기 챕터에 질문이 있습니다.

작성

·

39

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 어노테이션을 사용하여 설정됩니다. 이 어노테이션은 여러 유용한 기능들을 내포하고 있습니다. 주요한 것은 이하와 같습니다:

  1. @SpringBootApplication: 이 어노테이션은 사실 @Configuration, @EnableAutoConfiguration, @ComponentScan 세 가지 어노테이션을 포함합니다.

    • @Configuration: 스프링의 설정을 위한 어노테이션으로, 자바 기반의 설정 클래스를 정의합니다.

    • @EnableAutoConfiguration: 스프링 부트에서 제공하는 자동 설정을 활성화합니다. 이로 인해 별도의 빈 등록 없이도 스프링 부트가 자동으로 필요한 빈을 설정합니다.

    • @ComponentScan: 지정된 패키지 및 그 하위 패키지들에서 @Component가 붙은 클래스를 스캔하여 스프링 빈으로 등록합니다. 보통 애플리케이션의 메인 클래스가 가장 상위 패키지에 위치하며, 이러한 클래스에 의해 전체 프로젝트에 대한 빈 스캔이 이루어집니다.

즉, @MySpringBootApplication을 포함한 MySpringBootMain 클래스는 이러한 역할을 담당하며, 사실상 자동 설정과 컴포넌트 스캔이 이루어지도록 합니다. MySpringApplication.run()을 호출하면서 이를 설정의 중심 클래스로 사용하게 됩니다.

질문에서 언급하신 EmbedTomcatSpringMain과 HelloConfig.class 같은 경우, 전통적인 스프링 설정 방식을 사용하여 직접적으로 설정 클래스를 지정하고 그 안에 @Configuration 어노테이션을 활용하는 방식입니다. 스프링 부트에서는 이러한 설정을 많이 간소화하고 자동화하는 데 중점을 둡니다.

관련해서 도움이 될 만한 기존 질문과 답변을 확인하시려면 아래 링크를 참고해주세요:
- SpringBootApplcation에 관한 질문입니다
- 스프링 부트 사용 vs 스프링 사용 정리

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

아자빠짜님의 프로필 이미지
아자빠짜

작성한 질문수

질문하기