[Spring 핵심] @Component vs @Bean, 도대체 언제 뭘 써야 할까?

시에나·2026년 1월 11일

스프링 기초

목록 보기
11/13

스프링을 공부하다 보면 객체(Bean)를 등록하는 방법이 두 가지가 나와서 혼란스럽습니다.
어떨 때는 클래스 위에 @Component를 붙이고, 어떨 때는 설정 파일(@Configuration) 안에서 @Bean을 씁니다.

"둘 다 빈을 만드는 건 똑같은데, 무슨 차이가 있고 언제 뭘 써야 하죠?"

오늘 강의에서 그 명확한 기준을 배웠습니다. 딱 3가지 포인트로 정리해 드립니다.


1. 위치가 다릅니다 (어디에 붙이는가?)

가장 눈에 띄는 차이점은 어노테이션을 붙이는 위치입니다.

  • @Component: 클래스(Class) 레벨에 붙입니다.
  • "이 클래스는 스프링 너네 식구야. 알아서 관리해."라고 클래스 자체에 이름표를 붙이는 격입니다.
  • 예: MarioGame, GameRunner 클래스 바로 위.
  • @Bean: 메소드(Method) 레벨에 붙입니다.
  • 주로 설정 클래스(@Configuration) 안에서 씁니다.
  • "이 메소드가 반환(return)하는 객체를 빈으로 등록해줘."라고 지시하는 것입니다.

2. 누가 만드느냐? (자동 vs 수동)

  • @Component (자동): 가장 쉽고 편합니다.
  • 클래스 위에 붙여두기만 하면, 스프링이 컴포넌트 스캔(Component Scan)을 통해 알아서 찾고, 알아서 생성하고, 알아서 의존성까지 주입(Auto-wiring)해줍니다.
  • 우리가 코드를 길게 짤 필요가 없습니다.
  • @Bean (수동): 손이 좀 많이 갑니다.
  • 개발자가 직접 코드를 짜야 합니다.
  • 객체를 생성(new ...)하고, 의존성을 연결하는 과정을 메소드 안에 직접 명시해야 합니다.

3. ⭐ 결정적 차이: 언제 무엇을 써야 할까?

이것이 오늘 강의의 핵심입니다. "그래서 실무에서 뭘 써야 하는데요?"

✅ 기본 원칙: @Component를 쓰세요! (권장)

여러분이 직접 만드는 웹 애플리케이션의 로직(컨트롤러, 서비스, 리포지토리 등)은 대부분 @Component를 사용하는 것이 좋습니다.

  • 이유: 코드가 훨씬 간결하고, 스프링의 자동화 기능을 100% 활용할 수 있기 때문입니다.

✅ 예외 상황: @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으로 등록하세요.

0개의 댓글