
스프링을 공부하다 보면 객체(Bean)를 등록하는 방법이 두 가지가 나와서 혼란스럽습니다.
어떨 때는 클래스 위에 @Component를 붙이고, 어떨 때는 설정 파일(@Configuration) 안에서 @Bean을 씁니다.
"둘 다 빈을 만드는 건 똑같은데, 무슨 차이가 있고 언제 뭘 써야 하죠?"
오늘 강의에서 그 명확한 기준을 배웠습니다. 딱 3가지 포인트로 정리해 드립니다.
가장 눈에 띄는 차이점은 어노테이션을 붙이는 위치입니다.
MarioGame, GameRunner 클래스 바로 위.@Configuration) 안에서 씁니다.new ...)하고, 의존성을 연결하는 과정을 메소드 안에 직접 명시해야 합니다.이것이 오늘 강의의 핵심입니다. "그래서 실무에서 뭘 써야 하는데요?"
@Component를 쓰세요! (권장)여러분이 직접 만드는 웹 애플리케이션의 로직(컨트롤러, 서비스, 리포지토리 등)은 대부분 @Component를 사용하는 것이 좋습니다.
@Bean을 써야 할 때 (필수)그렇다면 귀찮은 @Bean은 언제 쓸까요?
1) 제3자 라이브러리(Third-party Library)를 쓸 때
예를 들어, Spring Security나 오픈소스 라이브러리를 가져와서 쓴다고 가정해 봅시다. 이 코드는 남이 만든 것이라 우리가 소스 코드를 열어서 @Component를 붙일 수가 없습니다. (Read-only니까요!)
@Configuration)을 만들고, @Bean 메소드를 통해 "이 라이브러리 객체를 이렇게 생성해서 빈으로 등록해줘"라고 직접 등록해야 합니다.2) 객체 생성 전, 특별한 로직이 필요할 때
단순히 new로 만드는 게 아니라, 객체를 만들기 전에 복잡한 설정이나 비즈니스 로직을 체크해야 한다면?
@Bean 메소드 안에서 if-else 문 등을 사용해 로직을 처리한 후, 완성된 객체를 반환(return)하도록 짤 수 있습니다.| 비교 항목 | @Component | @Bean |
|---|---|---|
| 적용 위치 | 클래스 (Class) 위 | 메소드 (Method) 위 |
| 사용처 | 내가 직접 작성한 클래스 | 설정 클래스 (@Configuration) 내부 |
| 편의성 | 매우 쉬움 (선언만 하면 끝) | 다소 번거로움 (생성 코드 작성 필요) |
| 사용 기준 | 기본적으로 이거 쓰세요! (대부분의 경우) | 1. 남이 만든 라이브러리 쓸 때 2. 복잡한 생성 로직이 필요할 때 |
@Component 붙이세요.@Bean으로 등록하세요.