Pink Spider/Spring 에서 (boot 포함) component와 bean의 차이

Created Sat, 21 Dec 2024 17:14:05 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
543 Words 2 min

Spring 에서 (boot 포함) component와 bean의 차이는?

Spring Boot (정확히는 Spring Framework)에서 @Component@Bean은 모두 Spring 컨테이너에 객체(빈, Bean)를 등록하는 데 사용되지만, 사용하는 방식과 목적이 조금 다릅니다.


🔹 1. @Component

  • 클래스에 붙이는 어노테이션
  • Spring이 자동으로 해당 클래스를 빈으로 등록
  • @ComponentScan에 의해 탐지되어 등록됨
@Component
public class MyComponent {
    public void doSomething() {
        System.out.println("Component is working");
    }
}

✅ 특징

  • 자동 등록
  • @Service, @Repository, @Controller도 사실 @Component의 특수화 버전
  • 패키지 스캔 경로 안에 있어야 함

🔹 2. @Bean

  • 메서드에 붙이는 어노테이션
  • 주로 @Configuration 클래스 안에서 사용
  • 개발자가 직접 객체를 생성하고 그 결과를 Spring 컨테이너에 등록
@Configuration
public class AppConfig {
    @Bean
    public MyComponent myComponent() {
        return new MyComponent(); // 수동 등록
    }
}

✅ 특징

  • 수동 등록
  • 외부 라이브러리 객체, 설정값이 필요한 경우 등 유연한 객체 생성 가능
  • 메서드 이름이 빈 이름이 됨 (필요시 @Bean(name = "beanName")으로 지정 가능)

📌 정리

항목 @Component @Bean
붙이는 위치 클래스 메서드
등록 방식 자동 등록 (컴포넌트 스캔) 수동 등록 (개발자가 명시적으로 생성)
사용 용도 애플리케이션 내부 클래스 외부 라이브러리, 복잡한 초기화
설정 클래스 필요 여부 필요 없음 @Configuration 필요

🙋 언제 써야 할까?

  • 내가 만든 클래스를 빈으로 등록하고 싶다면 → @Component
  • 외부 라이브러리 객체나 조건에 따라 달라지는 객체 생성이 필요할 때 → @Bean