1. 스프링 빈 등록이란?
스프링 프레임워크의 핵심은 스프링 컨테이너가 애플리케이션을 구성하는 객체, 즉 스프링 빈(Bean) 을 생성하고 관리하는 것입니다.
스프링 빈으로 등록된 객체들은 컨테이너에 의해 생명주기를 관리받고, 의존 관계가 설정되어 애플리케이션의 기능을 수행하게 됩니다.
빈 등록은 이러한 객체들을 스프링 컨테이너가 알 수 있도록 설정하는 과정을 의미합니다.
2. 자동 빈 등록
✅ 개념
자동 빈 등록은 별도의 설정 파일 없이, 스프링이 특정 어노테이션이 붙은 클래스를 자동으로 스캔하여 빈으로 등록하는 방식입니다.
✅ 작동 방식
@ComponentScan
@ComponentScan어노테이션을 사용하여 특정 패키지를 기준으로 컴포넌트를 스캔합니다.- 보통 스프링 부트의
@SpringBootApplication안에 내장되어 있어 하위 패키지를 자동으로 스캔합니다.
@Component와 스테레오타입 어노테이션들
@Component가 붙은 클래스 → 자동 빈 등록 대상- 아래 어노테이션들도 내부적으로
@Component포함@Controller: MVC 컨트롤러@Service: 비즈니스 로직@Repository: 데이터 접근 및 예외 변환@Configuration: 설정 및@Bean등록용 클래스
빈 이름 규칙
- 클래스명에서 첫 글자만 소문자로 바뀐 형태
- 예:
MemberService→memberService
- 예:
- 클래스명에서 첫 글자만 소문자로 바뀐 형태
✅ 장점
- 편의성: 설정을 간소화하여 생산성 향상
- 유지보수 용이: 설정 파일 변경 없이 클래스만 추가
- 현대적인 스프링 개발 흐름과 잘 맞음
⚠️ 주의사항
- 빈 이름 충돌 시 에러 발생
- 스캔 범위 관리가 중요함
3. 수동 빈 등록
✅ 개념
수동 빈 등록은 개발자가 직접 설정 클래스에 @Bean 어노테이션을 사용하여 빈을 등록하는 방식입니다.
✅ 작동 방식
@Configuration 클래스
- 설정 클래스로 인식됨
@Bean 메서드
- 반환된 객체가 빈으로 등록됨
- 메서드 이름이 기본 빈 이름
@Bean(name = "...")으로 이름 지정 가능
의존 관계 설정
- 메서드 내에서 다른
@Bean호출 - 파라미터로 다른 빈을 선언하면 자동 주입됨
- 메서드 내에서 다른
✅ 권장되는 경우
- 기술 지원 빈 (DataSource, TransactionManager 등)
- 외부 라이브러리 객체 등록
- 다형성을 활용한 로직 구현
- 자동 등록으로 충돌 방지 필요 시
✅ 장점
- 명시적인 설정 가능
- 제어 용이성
- 충돌 방지를 위한 이름 지정 가능
⚠️ 주의사항
- 빈이 많아지면 설정 파일 관리가 복잡
- 자동 등록보다 설정이 번거로움
4. 자동 vs 수동 빈 등록 - 언제 사용해야 할까?
| 구분 | 사용 권장 상황 |
|---|---|
| ✅ 자동 등록 | 컨트롤러, 서비스, 레포지토리 등 일반적인 애플리케이션 로직에 적합 |
| ⚙️ 수동 등록 | 기술 지원 빈 / 외부 라이브러리 / 다형성 활용 / 빈 이름 충돌 방지 등 명확한 제어 필요 시 |
5. 수동 등록 시 @Component 사용?
@Configuration클래스 내부에서@Bean으로 등록하면 원래 클래스에@Component를 붙이지 않는 것이 일반적입니다.@Component를 붙이면 자동 스캔되어 중복 등록 오류가 발생할 수 있습니다.- 스프링 부트는 기본적으로 중복 등록 시 오류를 발생시키도록 설정되어 있습니다.
✅ 결론
- 자동 등록을 기본으로 사용
- 명확성이 필요한 경우 수동 등록을 병행
- 프로젝트 구조와 목적에 맞게 유연하게 선택하여 사용해야 합니다.
'Framework > Spring' 카테고리의 다른 글
| [Spring] 스프링 빈 스코프 (1) | 2025.04.07 |
|---|---|
| [Spring] 의존관계 주입 (Dependency Injection) (0) | 2025.04.02 |
| [Spring] 싱글톤 패턴과 스프링 컨테이너 (0) | 2025.04.02 |