Spring Boot에서 애플리케이션을 구성할 때 가장 핵심적인 개념 중 하나는 바로 Bean이다.
Spring은 애플리케이션을 구성하는 객체들을 Bean으로 관리하며, 이 Bean들을 생성하고 주입하는 데 사용하는 것이 바로 다양한 어노테이션(Annotation)이다.
✅ Bean이란?
Bean의 정의
- Spring 컨테이너가 관리하는 객체를 Bean이라고 부른다.
- 개발자가 직접 객체를 생성하는 대신, Spring이 객체의 생명주기와 의존성을 관리한다.
Bean의 역할
- 애플리케이션의 핵심 구성 요소로, Service, Repository, Controller 등이 모두 Bean으로 관리된다.
- Bean은 DI(의존성 주입)의 대상이 된다.
✅ Bean 등록 방식
1. 어노테이션 기반 자동 등록
@Component
public class MyComponent { }
@Service
public class MyService { }
@Repository
public class MyRepository { }
@Controller
public class MyController { }
설명:
@Component: 가장 일반적인 Bean 등록 어노테이션@Service: 비즈니스 로직을 처리하는 클래스에 사용@Repository: 데이터 접근 계층(DAO)에 사용@Controller: 웹 요청을 처리하는 컨트롤러에 사용 (MVC 구조에서 사용됨)
모든 어노테이션은 결국
@Component를 포함하고 있으며, 스캔 대상이 되어 컨테이너에 등록된다.
2. 수동 등록 (Java Config)
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
설명:
@Configuration: 해당 클래스가 설정 클래스임을 나타낸다.@Bean: 개발자가 직접 객체를 생성해서 반환 → Spring이 이 객체를 Bean으로 등록한다.
✅ 의존성 주입(DI) 어노테이션
@Autowired
@Service
public class OrderService {
@Autowired
private OrderRepository orderRepository;
}
- Spring이 자동으로
OrderRepository타입의 Bean을 찾아서 주입한다. - 생성자, 필드, 세터 등 다양한 방식으로 주입 가능하다.
생성자 주입을 권장하는 이유: 불변성, 테스트 편의성
@Qualifier
@Autowired
@Qualifier("memoryOrderRepository")
private OrderRepository orderRepository;
- 같은 타입의 Bean이 여러 개 있을 경우, 특정 이름을 지정해 주입할 수 있다.
@Primary
@Primary
@Repository
public class MemoryOrderRepository implements OrderRepository { }
- 동일한 타입의 Bean이 여러 개일 경우, 기본 우선순위를 부여한다.
✅ 스프링부트의 컴포넌트 스캔
- Spring Boot는 기본적으로
@SpringBootApplication이 선언된 패키지를 기준으로 하위 패키지 전체를 스캔한다. - 이 범위 내의 클래스에
@Component,@Service,@Repository,@Controller등이 붙어 있다면 자동으로 Bean으로 등록된다.
@SpringBootApplication // = @ComponentScan + @Configuration + @EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
✅ 결론
- Spring Boot에서는 어노테이션 기반 Bean 등록이 기본이다.
- 객체를 직접 생성하지 않고, Spring이 관리하도록 맡기면 의존성 주입이 자동으로 처리된다.
- 컴포넌트 스캔과 다양한 어노테이션(
@Component,@Service,@Autowired,@Bean)을 조합하여 유연하고 구조화된 애플리케이션을 만들 수 있다.
'CS공부 > Java & Spring' 카테고리의 다른 글
| JWT 인증 및 토큰 기반 인증 시스템 정리 (0) | 2025.04.28 |
|---|---|
| 즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading) (0) | 2025.04.23 |
| MVC 모델이란 무엇인가? (0) | 2025.04.23 |
| 자바 컴파일 과정 (0) | 2025.04.23 |
| Call by Reference와 Call by Value (0) | 2025.04.23 |