Framework/Spring

[Spring] Spring Container(스프링컨테이너)란? 개념부터 동작 방식까지 쉽게 이해하기

leonie. 2025. 1. 31. 14:36




Spring Framework를 배우다 보면 IoC(제어의 역전)와 DI(의존성 주입) 개념을 먼저 접하게 됩니다.
하지만 이를 가능하게 하는 핵심 요소는 바로 Spring Container(스프링 컨테이너) 입니다.

 

이 컨테이너는 단순히 객체를 저장하는 것이 아니라, 스프링 빈(Bean)의 생성, 의존성 주입, 생명주기 관리까지 담당합니다.
즉, 개발자가 직접 객체를 생성하고 의존성을 관리하는 대신, 컨테이너가 이를 자동으로 처리하는 구조입니다.

 

이번 글에서는 Spring Container의 역할, 주요 유형, 그리고 내부 동작 방식을 살펴보겠습니다.

 

 

 

 





📌 Spring Container란?

Spring Container는 Spring Framework의 핵심 컴포넌트로, 스프링 빈을 관리하는 역할을 합니다.

이를 통해 애플리케이션 내의 객체들이 효율적으로 생성되고, 의존성이 자동으로 연결됩니다.

 

✅ 컨테이너가 수행하는 주요 작업
1️⃣ 스프링 빈(Bean) 객체 생성 → 개발자가 직접 객체를 생성하지 않아도 됨
2️⃣ 의존성 주입(DI) 수행 → 빈 간의 관계를 컨테이너가 자동으로 연결
3️⃣ 빈 생명주기 관리 → 객체의 생성부터 소멸까지의 과정 제어

 

이처럼 Spring Container는 단순한 저장소가 아니라, 애플리케이션의 객체 관리와 의존성 해결을 담당하는 핵심 요소입니다.






📌 Spring Container의 주요 유형

Spring Container에는 다양한 유형이 있지만, 일반적으로 BeanFactoryApplicationContext 두 가지가 가장 많이 사용됩니다.

 

 

 

🔷 BeanFactory

  • 기본적인 컨테이너로, Lazy Initialization(지연 초기화) 방식 적용
  • 필요할 때만 객체를 생성하여 메모리 효율이 높음
  • 단, 기능이 제한적이라 일반적인 Spring Boot 개발에서는 잘 사용되지 않음

 

 

 

🔷 ApplicationContext

  • BeanFactory를 확장한 고급 컨테이너
  • Eager Initialization(즉시 초기화) 방식 사용 → 애플리케이션 실행 시 모든 빈을 미리 생성
  • AOP, 이벤트 리스너 등 다양한 기능 포함
  • Spring Boot에서는 기본적으로 ApplicationContext를 사용

 

💡 Spring Boot 프로젝트에서는 ApplicationContext가 기본 컨테이너로 동작하므로, 주로 이를 다룬다고 보면 됩니다.






📌 Spring Container의 내부 동작 원리

Spring Container는 다음과 같은 단계를 거쳐 애플리케이션을 실행합니다.

 

1. 설정 정보 로드 → XML, Java Config, 애노테이션 기반 설정 불러오기
2. 빈 정의(Bean Definition) 생성 → 스프링 빈 목록 및 설정 저장
3. 빈 객체 생성 및 의존성 주입(DI) → 필요한 객체를 생성하고 의존성을 자동 연결
4. 빈 초기화 → @PostConstruct 등을 활용해 초기화 작업 수행
5. 실행 중 관리 → 싱글톤 빈 유지, 이벤트 처리
6. 빈 소멸 및 종료 → @PreDestroy 등을 이용해 정리 후 제거

 

이 과정 덕분에 개발자는 객체의 생성, 관계 설정, 생명주기 관리를 직접 수행할 필요 없이 비즈니스 로직에 집중할 수 있습니다.







Spring Container는 단순한 빈 저장소가 아닙니다.

애플리케이션의 객체를 효율적으로 관리하고, IoC와 DI를 구현하는 중요한 도구입니다.
특히 Spring Boot에서는 ApplicationContext를 활용하면 의존성 주입(DI)과 객체 생명주기 관리가 더욱 편리해집니다.

 

 

 

🔍 Spring Container에 대한 추가 팁
1. @Configuration과 @ComponentScan을 활용하면 빈 등록을 자동화할 수 있습니다.
2. Spring Container에서 관리되지 않는 객체는 의존성 주입(DI)을 사용할 수 없습니다.
3. Spring Boot에서는 기본적으로 AnnotationConfigApplicationContext가 사용됩니다.






 

 

728x90