Spring Boot의 Bean 등록 방법

썬쑨·2025년 3월 23일

Spring

목록 보기
3/12
post-thumbnail

Spring Boot에서 애플리케이션이 실행될 때, ApplicationContext가 초기화되면서 필요한 Bean들이 컨테이너에 등록된다. Bean을 등록하는 방법들은 아래와 같다.

1. @Component 계열 애너테이션 사용

  • @Component, @Service, @Repository, @Controller 등의 어노테이션을 클래스에 직접 부여하면, Spring이 자동으로 해당 클래스를 Bean으로 등록한다.
    • @Component는 어떤 특정한 역할(서비스, 리포지토리, 컨트롤러)에 속하지 않는 일반적인 Bean을 등록할 때 사용.
@Component
public class MyComponent {
    public void do() {
        System.out.println("Component 실행");
    }
}
  • 장점
    • 간결한 선언으로 자동 등록이 가능하다.
    • 유지보수가 용이하고, 계층별 역할을 명확하게 할 수 있다.
    • @ComponentScan을 설정한 패키지와 그 하위 패키지에서만 @Component가 붙은 클래스를 찾기 때문에,원치 않는 Bean이 등록되지 않도록 제어할 수 있다.
  • 단점
    • 커스텀 로직이 필요한 경우 설정이 어렵고, 등록 과정을 명확하게 제어하기 어렵다.
    • 자동 스캔으로 인해 불필요한 Bean이 등록될 가능성이 있다.

2. @Configuration과 @Bean을 이용한 수동 등록

  • 개발자가 명시적으로 @Bean을 사용하여 객체를 반환하는 메서드를 정의하고, 해당 메서드가 반환하는 객체를 Bean으로 등록하는 방식이다.
@Configuration
public class AppConfig {
    @Bean
    public MyClass myClass() {
        return new MyClass();
    }
}
  • 장점
    • 등록 과정이 명확하고, 원하는 방식으로 Bean을 설정할 수 있다.
    • 특정한 조건이나 설정 값에 따라 Bean을 유연하게 관리할 수 있다.
  • 단점
    • Bean 등록을 직접 관리해야 하므로, 자동 탐색보다 불편하다.

3. @Import를 이용한 등록

  • 다른 @Configuration 클래스를 가져와서 Bean을 등록하는 방식으로, @Import가 선언된 클래스가 로드될 때 해당 설정 클래스가 포함되면서 Bean이 등록된다.
@Configuration
@Import(AppConfig.class)
public class MainConfig {
}
  • 장점
    • 설정을 모듈화할 수 있어 대규모 프로젝트에서 유용하다.
    • 특정 조건에서 Bean을 동적으로 관리할 수 있다.
  • 단점
    • 설정 클래스를 여러 개로 나누다 보면 관리가 어려워질 수 있다.

4. @Conditional을 이용한 조건부 등록

  • 특정 조건을 만족할 때만 Bean을 등록하는 방식으로, 조건(@ConditionalOnProperty, @ConditionalOnClass 등)이 만족될 때 Bean이 등록된다.
@Configuration
public class ConditionalConfig {
    @Bean
    @ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
    public MyComponent myComponent() {
        return new MyComponent();
    }
}
  • feature.enabled라는 조건을 만족해야 할 프로퍼티의 이름으로 application.yaml이나 application.properties에서 등록할 수 있다.

  • havingValue : 프로퍼티의 값이 이 값과 일치해야 조건이 만족된다.

  • 장점

    • 환경 변수나 설정에 따라 Bean 등록을 제어할 수 있다.
    • 필요할 때만 Bean을 로드하여 성능을 최적화할 수 있다.
  • 단점

    • 설정이 많아질 경우 복잡도가 증가할 수 있다.
    • 조건이 많아지면 디버깅이 어려워질 수 있다.

이 밖에도 여러 가지 방법이 존재한다.


<참고자료>
https://docs.spring.io/spring-cloud-function/docs/current/reference/html/functional.html

profile
천천히 굴러갑니다!

0개의 댓글