[Spring] Spring Container, Spring Context, Spring IoC, 그리고 BeanFactory와 ApplicationContext

ian kwon·2024년 8월 23일

Spring을 사용하면서 가장 중요한 개념 중 하나는 바로 Spring IoC 컨테이너입니다. 이번 포스트에서는 Spring Container, Spring Context, Spring IoC에 대한 내용을 정리하고, BeanFactoryApplicationContext의 차이점을 살펴보겠습니다.

Spring Container, Spring Context, Spring IoC: 현업에서의 접근

Spring 프레임워크를 사용하다 보면 Spring Container, Spring Context, Spring IoC라는 용어들을 자주 접하게 됩니다. 이 세 가지 용어는 엄밀히 말하면 약간의 차이가 있지만, 현업에서는 거의 동일한 의미로 취급하는 경우가 많습니다.

1. Spring Container = Spring Context = Spring IoC

  • Spring Container는 Spring에서 객체(빈)를 생성하고, 의존성을 주입하며, 관리하는 핵심 역할을 담당하는 컴포넌트입니다. Spring의 모든 객체 생명주기를 관리하는 곳이 바로 이 Container입니다.
  • Spring Context는 Spring Container의 구체적인 구현체를 의미합니다. ApplicationContext는 가장 일반적으로 사용되는 Spring Context의 구현체로, 다양한 기능을 제공하며 Spring 애플리케이션에서 빈을 관리합니다.
  • Spring IoC (Inversion of Control)는 제어의 역전 개념을 통해 의존성 주입을 가능하게 하는 개념입니다. 실제로 이 개념은 Spring Container 또는 Spring Context를 통해 구현되므로, 현업에서는 세 개념을 동일하게 간주하는 경우가 많습니다.

결론적으로, Spring Container, Spring Context, Spring IoC는 모두 Spring의 핵심 기능인 의존성 주입과 객체 관리를 다루는 개념으로, 현업에서는 이들을 동일하게 취급하며 사용합니다.

BeanFactory와 ApplicationContext

Spring에서는 두 가지 주요 IoC 컨테이너 구현체가 있습니다: BeanFactoryApplicationContext입니다. 이 둘은 비슷하지만, 몇 가지 중요한 차이점이 있습니다.

1. BeanFactory

BeanFactory는 가장 기본적인 IoC 컨테이너로, 객체의 생성과 의존성 주입을 처리합니다. 기본적으로 지연 초기화(lazy loading)를 사용하여 필요한 시점에만 빈을 생성합니다.

  • 특징:
    • 기본적인 IoC 컨테이너
    • 지연 초기화(lazy initialization)
  • 사용 시기: 메모리 사용이 제한적이거나, 초기화 시간이 중요한 환경

2. ApplicationContext

ApplicationContext는 BeanFactory의 모든 기능을 포함하면서 더 많은 고급 기능을 제공합니다. 애플리케이션 시작 시점에 모든 빈을 미리 로드하고 초기화하여 이후의 빈 사용 시 더 빠른 응답성을 제공합니다.

  • 특징:
    • BeanFactory의 기능 포함
    • 국제화(MessageSource), 이벤트 리스너, AOP와의 통합 등 추가 기능 제공
    • 애플리케이션 시작 시 모든 빈을 미리 로드
  • 사용 시기: 대부분의 Spring 애플리케이션에서 권장

권장 사항

일반적으로 ApplicationContext를 사용하는 것이 권장됩니다. 복잡한 애플리케이션이나 다양한 스프링 기능을 활용하고자 할 때 ApplicationContext가 더 많은 이점을 제공합니다.

요약

  • Spring Container / Spring Context / Spring IoC: 현업에서는 이 세 가지 용어를 동일한 의미로 사용하며, 이들은 모두 Spring의 의존성 주입과 객체 관리 기능을 설명하는 데 사용됩니다.
  • BeanFactory: 기본 IoC 컨테이너, 지연 초기화
  • ApplicationContext: 고급 기능 제공, 애플리케이션 시작 시점에 빈 초기화
profile
“당신이 두려워하는 일을 매일 하라.” -엘리너 루스벨트-

0개의 댓글