@Configuration vs @Component


@Component
public class MyService {
    // 이 클래스 자체가 빈으로 등록
}

@Configuration
public class AppConfig {
    
    @Bean
    public MyBean myBean() {
        return new MyBean();  // 이 메서드가 빈을 생성하고 구성
    }
    
    ...
}

상황에 따라 적절한 어노테이션을 선택하여 사용. 
단순한  등록은 @Component를, 복잡한 설정이나 여러 빈의 관계 설정은 @Configuration을 사용하는 것이 일반적.


@Component:
목적: 개별 클래스를 Spring의 빈으로 등록하기 위해 사용
사용: 주로 서비스, 리포지토리, 컨트롤러  애플리케이션의 구성 요소에 사용
동작: 클래스를 스캔하여 자동으로 빈으로 등록
특징: @Service, @Repository, @Controller 등은 @Component의 특수화된 형태



@Configuration:
목적:  정의를 포함하는 Java 기반 설정 클래스
사용: 여러 빈을 정의하고 구성하는 클래스에 사용
동작: 클래스 내의 @Bean 어노테이션이 붙은 메서드들을 통해 빈을 정의
특징: CGLIB 기반의 프록시를 생성하여 @Bean 메서드의 싱글톤 보장  추가적인 처리를 수행.