Java

[Java] Spring Boot에서 Bean 등록하는 법

Castle Bird 2025. 12. 21. 16:51

1. @CompoentScan + @Component

스프링이 정해진 패키지를 스캔하며 @Component 어노테이션이 붙은 클래스를 찾아 자동으로 Bean으로 등록하는 방식입니다.

1-1. 작동 방식

@SpringBootApplication 어노테이션 안에 포함된 @ComponentScan이 실행되면서, 해당 패키지 하위의 모든 @Component 계열(@Service, @Repository, @Controller 등) 클래스를 찾아 Bean인스턴스를 생성합니다.
이 때 @ComponentScan@Component를 찾는 패키지의 기준은 @SpringBootApplication가 붙어있는 메인 클래스가 있는 패키지가 기준이된다.

1-2.주요 사용처

우리가 직접 작성하는 대부분의 비즈니스 로직 클래스(Service, Controller 등)에 사용합니다.

1-3. 장단점

장점 (효율성)

  1. 어노테이션 하나만 붙이면 되므로 생산성이 매우 높습니다.
  2. 새로운 클래스를 만들 때마다 설정 파일을 수정할 필요가 없습니다.

단점 (제어권)

  1. 외부 라이브러리(수정 불가능한 소스 코드)에는 어노테이션을 붙일 수 없어 사용이 불가능합니다.
  2. 클래스 내부 로직에 따라 빈 생성 과정을 세밀하게 제어하기 어렵습니다.

2. @Configuration + @Bean

설정(Configuration) 클래스를 따로 만들고, 메서드 위에 @Bean을 붙여 직접 객체를 반환하여 등록하는 방식입니다.

2-1. 작동 방식

@Configuration이 붙은 클래스 내의 메서드에 @Bean을 선언하면, 스프링 컨테이너가 해당 메서드를 호출하여 반환된 객체를 Bean으로 관리합니다.
싱글톤 보장을 위해 CGLIB(Code Generation Library) 기술을 사용하여 프록시 객체를 생성합니다.

2-2. 주요 사용처

  • 외부 라이브러리: RestTemplate, ObjectMapper 등 내가 고칠 수 없는 클래스를 빈으로 만들 때.
  • 조건부 빈 등록: 상황에 따라 다른 객체를 빈으로 등록해야 할 때.

2-3. 장단점

장점 (객관적 타당성):

  1. 빈 생성 로직(객체 생성 및 초기화 과정)을 완전히 제어할 수 있습니다.
  2. 설정 정보가 한곳에 모여 있어 전체적인 빈 구성 현황을 파악하기 좋습니다.

단점 (유지보수 비용):

  1. 새로운 빈을 추가할 때마다 설정 클래스를 매번 수정해야 하므로 번거롭습니다.
  2. 관리 포인트가 늘어납니다.

3. 차이

비교 항목 @Component 스캔 @Configuration + @Bean
등록 주체 스프링 (자동) 개발자 (수동)
적용 대상 직접 작성한 클래스 외부 라이브러리, 공통 설정
설정 위치 해당 클래스 상단 별도의 @Configuration 클래스
추천 상황 일반적인 계층별 개발 시 외부 연동 및 정밀 제어 필요 시

'Java' 카테고리의 다른 글

[Java] @Controller 와 @RestController  (0) 2025.12.26
[Java] AOP  (0) 2025.12.24
[Java] 웹 서버와 WAS  (0) 2025.12.19
[Java] CORS와 CSRF의 차이  (0) 2025.12.14
[Java] String, StringBuffer, StringBuilder  (0) 2025.12.12