2023. 12. 10. 20:37ㆍSpring Framework/Spring IoC
🌱 Spring IoC Container와 Bean 소개
Spring Framework는 자바 애플리케이션 개발에서 가장 널리 사용되는 프레임워크 중 하나입니다. 그 핵심에는 제어의 역전(Inversion of Control, IoC) 원칙을 구현한 IoC 컨테이너가 있습니다. 이 글에서는 Spring의 IoC 컨테이너와 Bean 개념에 대해 구체적으로 살펴보겠습니다.
🔁 Inversion of Control(IoC)란?
IoC는 객체 간의 의존성 관리에 대한 제어 권한을 애플리케이션 코드가 아닌 컨테이너에게 위임하는 설계 원칙입니다.
- 💡 전통적인 방식: 객체가 직접 다른 객체를 생성하거나 검색
- 💡 IoC 방식: 컨테이너가 객체를 대신 생성하고 필요한 의존 객체를 주입
💉 IoC의 구체적인 구현: Dependency Injection(DI)
Spring에서는 IoC의 구현 방법으로 DI(의존성 주입)를 사용합니다. DI는 객체가 스스로 의존 객체를 생성하거나 찾지 않고, 필요한 의존성을 외부에서 주입받는 방식입니다.
✅ DI 방식
DI는 아래와 같은 방식으로 의존성을 정의합니다:
- Constructor arguments
- 팩토리 메서드의 아규먼트(이 팩토리 메서드는 GoF의 Factory Method 디자인 패턴이 아님)
- 객체 생성 이후 설정되는 프로퍼티 (setter injection)
Spring IoC 컨테이너는 이러한 정의를 기반으로 bean을 생성하면서 의존 객체를 자동으로 주입합니다. 이 구조는 객체가 직접 의존 객체를 생성하거나 찾는 방식(Service Locator 패턴 등)과는 반대이며, 이 점에서 제어의 역전(Inversion of Control)이라 불립니다.
🏗️ Spring IoC 컨테이너의 핵심 패키지
Spring IoC 컨테이너의 핵심 구현은 다음 두 패키지에 있습니다:
org.springframework.beans
org.springframework.context
⚙️ BeanFactory vs ApplicationContext
🧰 BeanFactory
- Spring IoC 컨테이너의 가장 기본적인 인터페이스
- 모든 타입의 객체를 구성 및 관리 가능
- 매우 가볍고 유연한 설정 프레임워크
하지만 엔터프라이즈 애플리케이션에 필요한 다양한 기능은 부족합니다.
🏢 ApplicationContext
(BeanFactory의 하위 인터페이스)
ApplicationContext
는 BeanFactory
보다 풍부한 기능을 제공합니다:
기능 | 설명 |
---|---|
🎯 AOP 통합 | Spring AOP와의 손쉬운 통합 지원 |
🌐 국제화 지원 | 메시지 리소스 처리 (i18n) |
📢 이벤트 발행 | 컨테이너 이벤트 처리 기능 |
🌍 웹 애플리케이션 특화 컨텍스트 | WebApplicationContext 등 지원 |
🔍 정리하면:
BeanFactory
: 최소한의 구성 기능 제공ApplicationContext
:BeanFactory
의 상위 superset으로, 엔터프라이즈 애플리케이션에 필수적인 기능들을 포함
📌 본 장에서는 설명의 일관성을 위해 전반적으로 ApplicationContext를 기준으로 설명합니다. BeanFactory
의 사용은 별도 섹션에서 다룹니다.
🫘 Bean이란?
Spring에서 bean은 IoC 컨테이너가 관리하는 핵심 객체입니다.
🎯 Bean의 정의
- Spring IoC 컨테이너에 의해 생성, 조립, 관리되는 객체
- 실제로는 단순한 자바 객체(POJO)이지만, 컨테이너의 관리 대상이 되면 Bean이라 부름
📌 다시 말해, 애플리케이션 내부에는 수많은 객체가 존재하지만, 그 중 Spring 컨테이너에 의해 관리되는 객체만이 "bean"입니다.
🧩 Bean 구성 정보: Configuration Metadata
Spring IoC 컨테이너는 Bean과 그 사이의 의존성을 이해하기 위해 구성 메타데이터(configuration metadata)를 사용합니다. 이 메타데이터는 보통 다음 형태로 제공됩니다:
- XML 설정
- Java Config (
@Configuration
,@Bean
) - Annotation 기반 자동 감지 (
@Component
,@Service
,@Repository
등)
🧠 구성 메타데이터는 IoC 컨테이너에게 "무엇을, 어떻게" 생성하고 연결해야 할지를 알려주는 설계도입니다.
🧭 정리
요소 | 설명 |
---|---|
🎯 IoC | 객체 생성 및 의존성 주입 제어를 컨테이너가 수행 |
💉 DI | IoC의 구현 방식: 생성자, 메서드, 프로퍼티 기반 주입 |
🏗️ BeanFactory | IoC의 기본 컨테이너 인터페이스 |
🏢 ApplicationContext | BeanFactory + 추가 기능 (AOP, 이벤트, i18n 등) |
🫘 Bean | Spring IoC 컨테이너가 관리하는 애플리케이션 객체 |
🧾 구성 메타데이터 | Bean과 의존성 정보를 기술하는 설계도 |
✅ 요약
Spring의 IoC 컨테이너는 객체 생명주기와 의존성 관리를 프레임워크 차원에서 처리함으로써, 애플리케이션의 유연성과 테스트 용이성을 크게 향상시켜줍니다. 이 개념은 Spring을 제대로 이해하기 위한 첫 관문이기도 하니, 확실히 익혀두시길 바랍니다! 💪
출처 : https://docs.spring.io/spring-framework/reference/core/beans/introduction.html
Introduction to the Spring IoC Container and Beans :: Spring Framework
This chapter covers the Spring Framework implementation of the Inversion of Control (IoC) principle. Dependency injection (DI) is a specialized form of IoC, whereby objects define their dependencies (that is, the other objects they work with) only through
docs.spring.io
'Spring Framework > Spring IoC' 카테고리의 다른 글
Using @Autowired (0) | 2023.12.10 |
---|---|
Dependencies and Configuration in Detail (0) | 2023.12.10 |
Fine-tuning Annotation-based Autowiring with @Primary or @Fallback (0) | 2023.07.08 |
Dependency Injection of Spring Framework (0) | 2023.05.01 |
Bean Definition Inheritance (0) | 2023.04.28 |