Spring Boot Bean 등록 방법

심민혁·2025년 3월 23일

weeklypaper

목록 보기
7/18

> 2025.03.17일자 위클리 페이퍼

Spring Boot에서 사용되는 다양한 Bean 등록 방법들에 대해 설명하고, 각각의 장단점을 비교하세요.

Bean 등록 방법 종류
1. Component Scan 방식 (@Component, @Service, @Repository, @Controller 등)
2. @Bean 기반 Java Config (@Configuration 클래스 내 선언)
3. @Import를 활용한 Configuration 병합
4. @ConfigurationProperties를 활용한 Bean 등록
5. Auto-Configuration (자동 설정 클래스 활용)

1. Component Scan방식

예시 :

@Service
public class UserService{

	//....
}

Spring Boot가 기본적으로 제공하는 방식이며 가장 많이 쓰이는 방식입니다.
@SpringBootApplication안에 @ComponentScan이 포함되어 있어 자동 탐지합니다.

장점

  • 설정이 쉽고 직관적입니다.
  • 프로젝트 시작 속도가 빠릅니다.
  • 가독성과 유지보수성이 우수합니다.

단점

  • 세부적인 빈 설정이나 복잡한 조건부 등록이 어렵습니다.
  • 클래스 자체를 수정할 수 없는 경우 적용 불가능합니다.

2. @Bean 기반 Java Config

예시 :

@Configuration
public class AppConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

장점

  • 복잡한 빈 생성 로직을 추가 가능하며 외부 라이브러리 빈 등록에 유리합니다.
  • 조건부 빈 등록(@ConditionalOnProperty, @ConditionalOnMissingBean)을 손쉽게 적용할 수 있습니다.

단점

  • 빈의 수가 많아지면 설정 클래스가 커지고 복잡해집니다.
  • 빈의 역할이 불명확해질 수도 있습니다.

3. @Import를 통한 configuration 병합

예시 :

@Configuration
@Import({DatabaseConfig.class, SecurityConfig.class})
public class MainConfig {

    //...
}

장점

  • 설정을 구조화하여 가독성과 유지보수성을 높일 수 있습니다.
  • 역할 기반으로 Configuration을 나누어 명확한 설정 구조를 만들 수 있습니다.

단점

  • 설정 클래스가 많아지면 빈의 출처를 찾는 것이 불편할 수 있습니다.
  • 관리하지 않으면 설정이 난잡해질 수 있습니다.

4. @ConfigurationProperties 활용한 빈 등록

예시 :

@Component
@ConfigurationProperties(prefix = "storage")
public class StorageProperties {
    private String location;
    // getter, setter
}

application.yml :

storage:
  location: /var/upload

장점

  • 빈 설정을 프로퍼티로 관리하여 배포 시 환경 설정을 쉽게 변경할 수 있습니다.
  • 유연하고 명확한 환경 기반 설정이 가능합니다.

단점

  • 프로퍼티 값이 많아지면 복잡해지고 관리가 어려워질 수 있습니다.
  • 잘못된 프로퍼티 설정을 찾기 어렵습니다.

5. Auto-Configuration (자동설정)

  • Spring Boot의 가장 강력한 기능 중 하나로, 별도의 명시적 설정 없이 starter를 추가하는 것만으로 Bean들이 자동으로 등록됩니다.

예시 :
spring-boot-starter-web을 추가하면 자동으로 DispatcherServlet, Jackson ObjectMapper, 내장 서버(Tomcat 등) Bean을 자동으로 등록합니다.

implementation 'org.springframework.boot:spring-boot-starter-web'

장점

  • 설정의 편리성과 빠른 프로젝트 개발 속도를 보장합니다.
  • 반복되는 설정 작업을 최소화합니다.

단점

  • 자동설정의 동작 방식을 잘 이해하지 못하면 디버깅이 어려울 수 도 있습니다.
  • 특정 빈의 커스터마이징이 필요할 때 오히려 복잡해질 수도 있습니다.
profile
열심히 하고 싶습니다

0개의 댓글