새발블로그

[Spring] Bean 등록 방식 (수동 vs 자동) 본문

Server/Spring

[Spring] Bean 등록 방식 (수동 vs 자동)

EUG 2025. 7. 8. 22:57

스프링 빈(Bean)이란?

Spring IoC 컨테이너가 관리하는 객체를 "Bean"이라고 부른다. 이 Bean들은 애플리케이션 구동 시 스프링 컨테이너에 의해 생성되고, 주입되고, 소멸된다. 우리가 어떤 객체를 Bean으로 등록하느냐에 따라 스프링의 DI(의존성 주입) 및 생명주기 관리가 이루어진다.

수동 등록: @Bean

직접 자바 설정 파일에서 메서드를 정의해 Bean을 등록한다.

@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }
}
  • 장점: 외부 라이브러리처럼 수정할 수 없는 클래스 등록에 유용
  • 단점: 코드가 많아지고 관리 포인트 증가

자동 등록: @Component

클래스에 어노테이션을 붙이면, @ComponentScan이 자동으로 탐색하여 Bean으로 등록한다.

@Component
public class OrderServiceImpl implements OrderService {
    // ...
}
  • 장점: 설정 간결, 자동화 가능
  • 단점: 어디서 등록되는지 추적 어려움

@Configuration, @ComponentScan 설정

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
  • @Configuration: Bean 등록용 설정 클래스
  • @ComponentScan: 자동 등록할 클래스 탐색 경로 설정

@Component와 파생 어노테이션

어노테이션 역할
@Component 일반 컴포넌트 등록
@Service 비즈니스 로직 컴포넌트
@Repository 데이터 접근 계층 DAO 등록
@Controller 웹 컨트롤러 등록 (MVC)

 

어떤 방식 쓸까? 기준 정리

상황 추천 방식
내가 만든 클래스 @Component
외부 라이브러리 클래스 @Bean
설정을 명확히 드러내고 싶을 때 @Bean
빠르게 자동 등록하고 싶을 때 @Component