[Spring] 스프링 컨테이너(Spring container)의 개념

1. 스프링 컨테이너(Spring container)란?

스프링 프레임워크의 핵심 컴포넌트이며 주요한 용도는 다음과 같다.

  • 객체의 생명주기 관리
  • 생성된 객체들의 추가적인 기능 제공

스프링에서는 자바 객체를 빈(Bean)이라고 하며 컨테이너는 내부의 빈 라이프사이클(생성, 제거 등)을 하며 추가 기능을 제공한다. 기존 스프링에서는 xml 파일로 설정하나 스프링 부트에서는 자바 클래스에서 설정가능하다. 주요 설정으로는

 

[수동]

@Configuration - 어플리케이션 구성정보를 등록

@Bean - 메서드를 모두 호출하여 반환된 객체를 스프링 컨테이너에 등록

 

[자동]

@ComponentScan - 해당 클레스클래스 패키지와 하위의 @Component, @Service, @Repository, @Controller 클래스를 탐색하여 빈등록 

@Component - 스프링 런타임시 자동으로 빈을 찾아 등록

 

이전 포스트의 IoC는 스프링 빈들의 생명 주기를 관리하기 위해 사용하며, 스프링 컨테이너는 DI(의존성 주입)이 이루어진 빈들을 BeanFactory, ApplicationContext 2개의 컨테이너로 제어하고 관리한다.

2023.11.06 - [Spring] - [Spring] IoC(제어의 역전) & DI(의존성 주입)의 개념

 

[Spring] IoC(제어의 역전) & DI(의존성 주입)의 개념

1. IoC (Inversion of Control) 제어의 역전 IoC란 메인 프로그램에서 컨테이너나 프레임워크로 객체와 객체의 의존성에 대한 제어를 넘기는 것을 말한다. 프레임워크 없이 개발할 때는 각 객체에 대한

junhkang.tistory.com

 

https://chobopark.tistory.com/200

2. 왜 스프링 컨테이너를 사용할까?

자바 코드를 작성시 new생성자를 통해 객체를 매번 생성할 경우, 객체 간의 참조가 많아지고 의존성이 높아지게 된다. 이는 객체 지향 프로그램 원칙에 위배되며 객체 간의 의존성 및 결합도를 낮추기 위해 스프링 컨테이너가 사용된다. 스프링 컨테이너는 구현 클래스의 의존성을 제거하고 인터페이스에만 의존하도록 설계 가능하도록 한다.

3. 스프링 컨테이너의 종류

https://devloper-dreaming.tistory.com/148

도식을 보면 ApplicationContext 인터페이스가 다른 인터페이스를 다중 상속하고 있다

BeanFactory의 모든 기능을 상속하여 Bean 객체를 관리한다.

 

BeanFactory

  • 스프링 컨테이너의 최상위 인터페이스
  • 스프링 빈을 관리하고 조회

ApplicationContext

  • BeanFactory의 모든 기능을 상속받아서 제공
  • 단순한 빈 관리를 넘어 어플리케이션 개발을 위해 공통적으로 필요한 많은 부가기능을 제공

 

 

참고

도서 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편

https://devloper-dreaming.tistory.com/148

https://ittrue.tistory.com/220#:~:text=%EC%8A%A4%ED%94%84%EB%A7%81%20%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EB%8A%94%20%EC%8A%A4%ED%94%84%EB%A7%81%20%ED%94%84%EB%A0%88%EC%9E%84,%EB%B9%88(Bean)%EC%9D%B4%EB%9D%BC%20%ED%95%9C%EB%8B%A4.