스프링 빈 등록 & 의존관계 자동 설정

2025. 8. 5. 16:21Spring

🐢 스프링 빈 등록 방법 2가지

1.컴포넌트 스캔 + 자동 의존관계 설정(@Componenet 계열)

2.자바 코드로 직접 등록(@Configuration + @Bean)

 

🐢 1. 컴포넌트 스캔과 자동 의존관계 설정

 

  • @Component 달린 클래스 → 자동으로 스프링 빈 등록됨 🐢
  • @Controller, @Service, @Repository 도 사실상 @Component 포함하고 있음

👉 그래서 컨트롤러/서비스/리포지토리 클래스 위에 어노테이션만 붙여도 스프링이 알아서 빈 등록함

 

✔️자동 등록의 원리 

 

  • 스프링은 시작 시 @Component 달린 클래스 전부 스캔
  • 하위 패키지 전부 싹 뒤져서 빈으로 등록함
  • 등록된 빈은 기본적으로 싱글톤(하나만 생성)

✔️스프링 빈으로 등록하면 좋은 이유? 

  • 스프링 컨테이너가 객체 생성 + 관리 + 공유 다 해줌 
  • 개발자가 new로 계속 만들 필요 없음 -> 중복, 메모리 낭비 방지 

 

✔️그럼 아무 클래스에 @Componenet 붙이면 됨? Nope!!

  • 스프링이 스캔하는 패키지 범위 안이어야 함 
  • 일반적으로 메인 클래스(@SpringBootApplication)패키지 하위만 스캔

🐢 2.  자바 코드로 직접 스프링 빈 등록 

  • 정형화되지 않은 코드나, 상황에 따라 구현체를 바꿔야 할 때 사용 
@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository(); // 구현체 직접 명시
    }
}

 

🐢 실무에서 쓰는 패턴

  • 정형화된 컨트롤러/서비스/리포지토리 -> @Component스캔 
  • 바꿀 수 있는 구현체 -> @Bean등록 

✔️상황에 따라 구현 클래스를 변경해야하는 경우 

  • 개발 초기 : 메모리 저장소로 개발 
  • 운영 단계 : DB저장소로 교체 

👉 이럴 때 스프링 설정파일에서 @Bean만 수정하면 전체 코드 수정 없이 갈아끼움 가능