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

알닉님의 프로필 이미지

작성한 질문수

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

편리한 부트 클래스 만들기

@Configuration 주석 이유

23.07.01 19:04 작성

·

467

1

두가지 질문이 있는데요

MySpringBootMain띄울때 HelloConfig 클래스에 @Configuration 이 있어도 잘 동작 하던데 주석 처리하는 이유가 뭔지 알 수 있을까요?

다른 질문인데요 @Configuration안에 @Component가 있어서 @Component 대신 @Configuration을 써도 되는것 같던데 빈여러개 등록할때 말고 하나의 클래스를 빈으로 등록할때 @Component 대신 @Configuration을 사용하지 않는 이유가 뭘까요...?찾아봐도 잘 안나와서 질문 드립니다.

답변 2

1

backendman님의 프로필 이미지

2024. 09. 18. 16:27

안녕하세요.

지나가다가 도움드리려고 답변남깁니다.

1.강사님께서 주석처리한 이유는 이미 @MySpringBootApplication 어노테이션으로 인해 HelloController 클래스가 빈으로 등록되기 때문에 HelloConfig 에서 또 빈으로 등록할 필요가 없기때문에 그렇습니다. 말씀하신데로 Configuration 주석을 해제해도 문제는 없습니다. 빈객체는 싱글톤으로 등록되기 때문이죠. 다시말해 configuration을 주석처리 하지않으면 빈등록 시도를 2번 하는거고 실제론 싱글톤 패턴으로인해 빈객체가 1개만 생성된것입니다.

 

2.이 이유는 어노테이션마다 암묵적인 사용목적이 있기 때문입니다. 다른 개발자들에게 이 클래스가 만들어진 이유를 알려주기 위해서죠.

 

configuration 이 붙여진 클래스는 보통 설정을 위한 빈클래스를 생성할때 사용하고 component는 단일 빈클래스를 생성하기 위해 사용합니다.

 

개발자가 비즈니스로직을 처리하는 단일 빈클래스를 생성했는데 그 클래스에 configuration을 붙여놓으면 실행은 되겠죠. 하지만 다른 개발자가 그 클래스를 보게되었을때 이건 뭐지..? 하면서 이해하기 힘들것입니다.

-5

인프런 AI 인턴님의 프로필 이미지

2023. 07. 03. 19:06

안녕하세요, 인프런 AI 인턴입니다.

먼저 첫 번째 질문에 대한 답변을 드리겠습니다. @Configuration 어노테이션은 스프링의 Java Config 설정 클래스를 명시하는 용도로 사용됩니다. 이 어노테이션이 있는 클래스는 스프링 컨테이너에게 해당 클래스가 Bean 설정을 담당하는 클래스임을 알려줍니다. 따라서 HelloConfig 클래스에 @Configuration 어노테이션이 주석 처리되어 있다면, 해당 설정이 스프링 컨테이너에 제대로 등록되지 않을 수 있습니다.

두 번째 질문에 대한 답변을 드리겠습니다. @Configuration 어노테이션은 @Component 어노테이션과 약간의 차이점이 있습니다. @Component 어노테이션은 해당 클래스를 일반적인 Bean으로 등록하며, @Configuration 어노테이션은 설정 클래스로 사용되는 Bean으로 등록됩니다.

@Configuration 어노테이션이 있는 클래스는 스프링 컨테이너에 의해 하나 이상의 Bean이 생성되는 설정 클래스로 사용됩니다. 따라서 한 개의 클래스를 빈으로 등록할 때는 @Component 어노테이션을 사용하는게 일반적입니다. 그러나 설정 파일을 만들 때에는 @Configuration 어노테이션을 사용하여 해당 클래스가 설정 파일임을 명시적으로 표현하는 것이 좋습니다.

위 내용을 토대로 HelloConfig 클래스의 @Configuration 주석 처리 이유와 @Configuration 어노테이션을 사용하지 않는 이유에 대해 알 수 있으실 것입니다.

더 자세한 내용은 스프링 공식 문서를 참고해보시면 좋을 것 같습니다. 고맙습니다!

알닉님의 프로필 이미지
알닉
질문자

2023. 07. 04. 22:29

그 부분은 다 아는내용입니다. 로보트라 질문의 핵심을 잘 이해를 못한것 같네요..

알닉님의 프로필 이미지

작성한 질문수

질문하기