Spring 핵심 원리 기본편 (4) - Spring Container, Bean

김정욱·2021년 2월 17일
0
post-thumbnail
post-custom-banner

이어서

  • 앞에서 작성한 AppConfig.java 파일에 Bean설정 내용을 입력하면, 실행 시점에 스프링 컨테이너가 Bean을 생성해서 유지한다고 했다.
    (이를 통해 DIP / OCP를 지킬 수 있었음)
  • 테스트 코드를 작성할 때에 우리는 아래 코드 처럼 의존성 주입을 해야한다!
    (실제 의존성이 들어가는 코드에서는 인터페이스를 바라보므로 수정 X)

Spring Container(스프링 컨테이너)

[ 간단 설명 ]

  • 위에서 사용한ApplicationContext 가 바로 스프링 컨테이너 이다.
  • 스프링 컨테이너Bean을 관리하여 DI를 하는 것 말고도 다양한 역할을 한다(여러 인터페이스를 상속받기 때문)
  • 사실 스프링 컨테이너BeanFactoryApplicationContext분리하여 부르기도 한다.
    (자세한 설명은 뒤에서)
  • 스프링 컨테이너 다양한 방법으로 설정 파일을 만들 수 있다
    (java / xml / groovy 등등) - 현재 실무에선 모두 java로 사용

[ BeanFactory와 ApplicationContext ]

  • BeanFactory
    • 스프링 컨테이너최상위 인터페이스
    • 스프링 빈관리하고 조회하는 역할 담당
      (getBean() / getBeansOfType() 등)
  • ApplicationContext
    • BeanFactory을 상속받아서 빈을 관리하는 기능을 제공
    • 그 외에도 애플리케이션 개발을 위한 다양한 부가기능이 존재
      (다양한 인터페이스들을 상속받는다)
    • MessageSource를 활용한 국제화 기능
      : 들어오는 나라에 따라 한국어, 영어 등으로 언어별로 출력
    • EnvironmentCapable
      : 실제 개발을 할 때에는 크게 3가지 환경이 존재하는데 이러한 환경들 마다 환경변수를 설정하고, 서로다른 DB나 외부 클라우드 연결을 달리할 수 있음
      (환경 3가지 - 로컬 / 개발 / 운영)
    • ApplicationEventPublisher
      : 이벤트를 발행하고 구독하는 모델을 편리하게 지원
    • ResourceLoader
      : 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회

[ 의존관계 주입 절차 ]

1) 스프링 컨테이너는 @Configuration이 붙은 파일을 찾아서 설정 정보로 인식
2) @Bean 어노테이션이 있는 모든 메서드를 호출해서 반환된 객체를 스프링 컨테이너에 등록
3) 각 @Bean 간에 의존관계를 설정해서 사용할 수 있게 한다


[ 다양한 스프링 설정 & BeanDefinition ]

  • 앞서 했던 것 처럼 AppConfig.java는 java를 사용한 스프링 설정파일을 만드는 방법
  • 이 외에도 xml / groovy등으로 설정파일을 만들 수 있다
    --> 하지만, 현재 실무에서는 잘 안씀 (레거시 프로젝트 유지보수 정도만)
  • 이렇게 다양한 설정파일을 할 수 있게 하는 원리의 중심에는 BeanDefinition이 있다.
  • BeanDefinition
    • 최종적으로 스프링 컨테이너가 참조하는 설정파일의 메타정보
      (java로 하든, xml로 하든 결국 BeanDefinition이 된다)
    • 스프링 컨테이너는 결국 BeanDefinition이라는 파일만 참조하므로 다양한 방식으로 설정파일을 만들어도 사용할 수 있는 것!

( 정리 )

  • ApplicationContextBeanFactory 기능을 상속받아 빈을 관리할 수 있다
  • BeanFactory를 직접 사용할 일은 없어서 그 외 부가 기능을 추가로 가진 ApplicationContext를 보통 스프링 컨테이너라고 한다
  • 스프링 컨테이너는 빈을 관리하며, DI를 할 수 있게 해준다!
  • 스프링 컨테이너는 최종적으로 BeanDefinition을 참조해서 설정하므로, 다양한 방법으로 빈 설정을 할 수 있다.

Bean 조회 & 상속 관계

[ Bean 조회 ]

  • Bean을 직접 조회할 일은 많지 않지만 알아두면 좋다.
  • Bean을 조회하는 방법
    • Type으로 조회
    • name으로 조회
  • 실제 Bean을 조회하면 2가지 Bean이 조회된다
    • 스프링 자체에서 필요로 인해 넣어주는 Bean
    • 개발하기 위해 필요해 만든 Bean
  • 개발하기 위해 우리가 만든 Bean만 출력하기 위해 Role()로 검사할 수 있다.

[ Bean의 상속 관계 ]

profile
Developer & PhotoGrapher
post-custom-banner

0개의 댓글