웹 개발

[Spring Boot] @Component 와 @Bean의 차이

_KH_ 2025. 5. 18. 08:14
@Component vs @Bean 차이
항목 @Component @Bean
사용 위치 클래스 위 메서드 위
작성 대상 직접 만든 클래스 외부 라이브러리 객체 등 (내가 new로 만드는 객체)
자동 등록 자동 스캔(@ComponentScan) 대상 수동 등록
용도 일반적으로 직접 만든 유틸, 서비스, DAO 등에 사용 외부 라이브러리 객체를 스프링 컨테이너에 등록할 때 사용

@Component 예시

@Component
public class MyService {
   // 스프링이 자동으로 Bean 등록해줌
}

클래스 위에 작성함

내가 만든 클래스의 경우에는 @Component를 사용해서 바로 빈으로 등록하면 된다.


@Bean 예시

@Configuration
public class AppConfig {

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(); // 직접 new 해서 등록
    }
}

메서드 위에 작성하며 @Configuration 안에 사용.

BCryptPasswordEncoder의 경우에는 가져다 쓰는 라이브러리이기 때문에 @Bean으로 등록해준다.

@Configuration은 "이 클래스 안에 있는 @Bean 메서드들을 다 빈으로 등록해달라"는 뜻의 어노테이션이고,

@Bean을 붙인 메서드들을 빈으로 등록하게 된다.

 

둘 다 스프링 컨테이너에 "Bean"으로 등록한다는 공통점이 있다.


+) 클래스 내부가 모두 static 메서드로 이루어져 있으면 @Component 어노테이션이 필요없다.

왜냐하면 new를 하지도, 의존성을 주입하지도 않으니까. 

즉, 스프링이 관리해줄 필요가 없어서 @Component가 필요없는 것이다.

보통 Util 클래스에는 @Component 어노테이션을 사용하지 않는다.

'웹 개발' 카테고리의 다른 글

[Spring Boot] @Primary와 @Qualifier의 차이  (0) 2025.05.22
[Backend] 비밀번호 암호화  (0) 2025.05.19
[Front] 기능  (0) 2025.05.17
[Front] 코드 분석 중 궁금한/모르는 점 정리  (0) 2025.05.16
[Backend] API와 컨트롤러  (0) 2025.05.15