본문 바로가기
코딩log/Spring Framework

[Spring Framework]Spring Bean과 Application Context

by 벨크 2023. 2. 12.
반응형

  의존관계 주입을 스프링으로 구현하면서 우리는 Bean이라는 단어와 Application Context라는 객체에 대해서 접하게 되었습니다. 해당 개념들은 스프링으로 개발을 진행하면서 지속적으로 만날 개념들 같아 보여 한 번 정리를 해보도록 하겠습니다.


Belklog-Spring Bean과 Application Context
Spring Bean과 Application Context

 

Spring Bean과 Application Context

 

Bean과 BeanFactory

 

  Bean은 스프링이 제어권을 가지고 직접 만들고, 관계를 부여하는 객체를 말합니다. 스프링 프레임워크는 이 Bean정보를 읽어와서 의존관계를 설정하고, 관리합니다. 즉, 스프링이 IoC 방식으로 관리하는 객체를 말합니다. @Configuration Annotation으로 스프링에게 해당 클래스가 설정 정보를 담고 있는 클래스임을 알리고, 클래스 안에 @Bean Annotation을 이용해 빈을 등록하면, 스프링이 프로그램 실행 시 설정 클래스를 참조하여 Bean 정보를 읽어와 맵 형식으로 등록합니다.

 

  BeanFactory는 스프링이 프로그램 실행 시 읽어와 등록해 놓은 Bean을 관리하고 조회하는 클래스입니다. 스프링 프레임워크에서 가장 핵심적인 IoC기능이 의존관계 주입(DI: Dependency Injection)이기 때문에, BeanFactory는 스프링의 가장 핵심적인 객체입니다.

 

  BeanFactory는 실행 시 등록된 Bean을 꺼내오고, 관리했던 getBean이라는 함수도 사실상 BeanFactory의 인터페이스입니다. 하지만 우리가 실제로 코드로 구현할 때는, BeanFactory 객체를 사용하지 않고, ApplicationContext라는 객체를 이용해 getBean을 수행했습니다. 그럼 ApplicationContext는 무엇일까요?

 

Application Context란?

 

  Application Context는 BeanFactory를 상속받아서 구현된 구현객체입니다. BeanFactory만 상속받는 것이 아니라, 다른 여러 스프링 인터페이스들을 상속받아서 구현되어 있습니다. 따라서 Bean을 조회하고 관리하는 기능뿐만 아니라, 확장 기능을 제공합니다. (ApplicationContext = BeanFactory + α )

 

  Application Context는 구현하려는 소프트웨어 전반에 IoC기능을 제공합니다. 개발자가 작성하는 프로그램의 구성요소의 제어 작업을 담당하는 엔진이라고 할 수 있습니다. 따라서 BeanFactory가 스프링 프레임워크의 가장 핵심적인 객체라면, ApplicationContext는 스프링 프레임워크의 가장 대표적인 객체입니다.

 

  스프링의 설정 정보나 관리를 어떻게 할지에 따라서 다양한 Application Context 구현 객체들이 존재합니다. 앞서 살펴보았던, AnnotationConfigApplicationContext 객체(어노테이션 기반 설정)이나, GenericXmlApplicationContext 객체들은 ApplicationContext들의 인터페이스를 구현한 구현 객체라고 볼 수 있습니다. 그래서 스프링 사용자의 입 맛에 맞는 ApplicationContext를 별도 구현하여 사용할 수도 있습니다.

 

ApplicationContext의 동작 방식

 

  ApplicationContext → BeanFactory의 동작 방식을 간단하게 정리하고, 그림으로 그려보겠습니다.

 

  ApplicationContext 객체 생성 시에 @Configuration이 붙은 class를 설정 정보에 등록하고, @Bean이 붙은 함수들을 읽어서 Bean 목록을 만듭니다. 클라이언트에서 Bean을 요청하면 빈 목록에서 해당 Bean을 찾은 후, 존재하면 객체를 생성하여 넘겨줍니다.

ApplicationContext 동작방식
ApplicationContext 동작 방식


  Spring Framework의 IoC 핵심 기능인, 의존관계 주입(DI)과 DI를 가능하게 하는 핵심 객체들에 대해서 알아보았습니다. 어떻게 보면, ApplicationContext를 이용하지 않고, 스프링 없이 의존관계 주입을 구현했던 것이 더 편해 보입니다.

 

  그렇다면, 사람들은 도대체 왜 의존관계 주입을 직접 구현하지 않고, 스프링 프레임워크를 사용하는 것일까요? 단순한 의존관계 주입을 넘어선 스프링의 강력한 기능들 때문에 Spring Framework를 사용한다고 하는데, 앞으로 어떤 강력한 기능들이 있는지 한 번 공부해 보겠습니다!

 

이전 글: 관심사의 분리 - ② Spring으로 개발하기

 

[Spring Framework]관심사의 분리 -② Spring으로 개발하기

이제 본격적으로 Spring Framework로 개발을 시작해보려 합니다. Spring 없이 개발을 했을 때와 마찬가지로, 자동차와 운전자라는 예제를 가지고 코드를 짜보겠습니다. Spring Framework를 이용해 관심사의

belklog.tistory.com

 

반응형

댓글