Container는 Spring의 핵심입니다. Container는 개발자를 대신하여, Bean의 생명주기를 담당합니다. Container가 Bean을 관리해주기 때문에, 개발자는 모듈 간에 의존 및 결합으로 인해 발생하는 문제로부터 자유로워 졌습니다. 이렇게 개발자가 할 일을 Container가 대신해주는 것을 IoC(Inversion of Control)이라고 합니다. Container는 스프링의 핵심인 IoC가 가능하도록 해주는 역할을 합니다. Container는 필요로 하는 자원을 런타임에 전달하는데, 이것을 Dependency Injection이라고 부릅니다.
IoC와 DI는 Spring에서 핵심적인 부분이기 때문에 이러한 부분을 자동으로 관리해주는 Container 또한 Spring에서 핵심적인 역할을 합니다. 요약하자면 Container의 역할은 IoC(Inversion of Control)의 방식으로 Bean을 관리(생성/해제/관리)한다는 것 입니다. Spring에서 Container가 IoC Container라고 불리는 이유도 IoC의 방식으로 Bean을 관리하기 때문입니다.
Container는 빈 팩토리(BeanFactory)와 어플리케이션 컨텍스트(ApplicationContext)가 있습니다. IoC 컨테이너는 주로 빈 팩토리의 관점을 의미하고, 그냥 컨테이너 또는 스프링 컨테이너라고 할 때는 애플리케이션 컨텍스트를 의미한다고 볼 수 있습니다. 컨테이너라는 말 자체가 IoC의 개념을 담고 있기 때문에 이름이 긴 애플리케이션 컨텍스트 대신에 스프링 컨테이너라고 부르는 걸 선호하는 사람들도 있습니다. 또 컨테이너라는 말은 애플리케이션 컨텍스트보다 추상적인 표현이기도 합니다.
애플리케이션 컨텍스트는 그 자체로 ApplicationContext 인터페이스를 구현한 오브젝트를 가리키기도 하는데, 애플리케이션 컨텍스트 오브젝트는 하나의 애플리케이션에서 보통 여러 개가 만들어져 사용됩니다. 이를 통틀어서 스프링 컨테이너라고 부를 수 있습니다. 때로는 컨테이너라는 말을 떼고 스프링이라고 부를 때도, 바로 이 스프링 컨테이너를 가리키는 것일 수 있습니다. 예를 들어 ‘스프링에 빈을 등록하고’라는 식으로 말하는 경우에 스프링이라는 말은 스프링 컨테이너 또는 애플리케이션 컨텍스트를 의미합니다.
BeanFactory
- Bean을 등록하고 생성하고 조회하고 돌려주고, 그 외에 부가적인 빈을 관리하는 기능을 담당합니다.
- Bean의 정의는 즉시 로딩하지만 필요한 시점까지 인스턴스화를 하지 않습니다. (Lazy-Loading)
- getBean()이 호출되면, 팩토리는 의존성 주입을 이용해 빈을 인스턴스화하고 빈의 특성을 설정하기 시작합니다.
ApplicationContext
- BeanFactory를 상속하여 확장한 향상 된 컨테이너라고 할 수 있습니다. 기본적인 기능은 BeanFactory와 동일하지만 스프링이 제공하는 각종 부가 서비스를 추가로 제공합니다.
- BeanFactory와 반대로 ApplicationContext 컨테이너에 의해 설정파일이 로드될 때 인스턴스로 만들어지고 로드됩니다. (Pre-Loading)
참고자료
- 토비의 스프링 3.1
- 김예건's blog
'Domain > Spring' 카테고리의 다른 글
[Spring] 템플릿-콜백 (0) | 2021.07.23 |
---|---|
[Spring] 관점 지향 프로그래밍 (AOP / Aspect Oriented Programming) (0) | 2021.07.14 |
[Spring] 제어의 역전(IoC / Inversion of Control)과 의존성 주입(DI / Dependency Injection) (0) | 2021.07.14 |
[Spring] POJO ( Spring POJO / Spring Triangle / Plain Old Java Object ) (0) | 2021.07.13 |
[Spring] 스프링이란? (Spring / Spring Boot / Spring Framework ) (0) | 2021.07.13 |
댓글