@Bean과 @Component의 차이점 이해하기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 초보 Spring Boot 개발자
- Spring 프레임워크 기초 개념 정리 필요자
- DI 컨테이너 작동 원리 이해 부족자
핵심 요약
@Component
는 Spring이 자동 스캔을 통해 빈으로 등록하는 일반 컴포넌트 어노테이션@Bean
는 구체적인 빈 생성 로직 정의에 사용되며, 외부 라이브러리와의 통합 시 필수@Component
는@Service
,@Repository
,@Controller
와 같은 구체적 역할 어노테이션의 상위 개념
섹션별 세부 요약
- What are Spring Beans?
- Spring 컨테이너가 관리하는 객체
- 의존성 주입(DI)을 통해 다른 빈과 연결 가능
- 라이프사이클 콜백 메서드 지원
- How
@Component
works with auto-scanning
@ComponentScan
어노테이션으로 지정한 패키지 내에서 자동으로 빈 등록@Service
,@Repository
,@Controller
어노테이션은@Component
의 구체적 형태- 컴포넌트 스캔 범위를 명시적으로 설정 가능
- When to use
@Bean
- 외부 라이브러리의 객체를 Spring 컨테이너에 등록할 때 사용
- 빈 생성 로직을 수동으로 정의해야 하는 경우 (예: 복잡한 의존성, 외부 설정 참조)
@Configuration
클래스 내에서 주로 사용됨
- Real-world examples
@Component
: 서비스 로직, 데이터 액세스 레이어 구현@Bean
: 외부 API 클라이언트, 커스텀 데이터 소스 등 생성- 코드 예시:
```java
@Component
public class MyService { ... }
@Configuration
public class AppConfig {
@Bean
public MyExternalClient externalClient() { ... }
}
```
- Comparison Table
| 기준 | @Component
| @Bean
|
|--------------|---------------------------|--------------------------|
| 사용 목적 | 일반 컴포넌트 등록 | 빈 생성 로직 정의 |
| 스캔 방식 | 자동 스캔 | 수동 정의 |
| 사용 위치 | 서비스, 리포지토리 등 | @Configuration
클래스 |
| 외부 라이브러리 지원 | ❌ | ✅ |
결론
@Component
는 Spring이 자동으로 관리하는 일반 컴포넌트에 사용하고,@Bean
은 외부 라이브러리와의 통합 또는 복잡한 의존성 관리 시 필수적으로 사용- 실무에서는
@Component
를 서비스/리포지토리에,@Bean
을@Configuration
클래스 내에서 구체적으로 정의하는 방식이 일반적 - 비교 표를 통해 사용 시점과 목적을 명확히 구분하여 코드의 가독성과 유지보수성을 높일 수 있음