본문 바로가기
IT/Spring boot

[Spring boot] Application Context

by kyu-nahc 2024. 8. 9.
반응형

 

Application Context란?

Application Context란 무엇일까?

먼저 Spring framework는 IoC 개념이 적용된 대표적인 기술이다.

IoC( Inversion of Control )란 제어의 역전을 의미하며,

전통적인 프로그래밍에서는 개발자가 프로그램의 흐름과 제어를 직접 다루지만,

IoC는 프레임워크 자체가 객체의 생성, 관리, 제어 흐름을 담당하도록 변경하는 개념이다.

 

Spring은 IoC를 지원하기 위해 Application Context라는 컨테이너를 제공한다.

즉 Applicatation Context란 애플리케이션 전반에 걸쳐 모든 구성요소의

제어작업을 담당하는 IoC 엔진이라고 할 수 있다.

 

빈의 생성과 관계 설정 같은 제어를 담당하는 IoC 컨테이너인 빈 팩토리가 존재하고,

Application Context는 해당 빈 팩토리를 상속받아

빈의 생성과 관계 설정 역할과 더불어 추가적인 기능을 담당한다.

여기서 추가적인 기능이란, AOP, 메시지 소스 처리, 이벤트 발행 등을 포함하고 있다.

Application Context는 위의 추가적인 기능과 함께 별도의 설정 정보(@Configuration)를 참고하고,

IoC를 적용하여 빈의 생성, 관계 설정 등의 제어 작업을 총괄한다.

따라서 Application Context는 직접 객체를 생성하고 관계를 맺어주는 코드가 존재하는 것이 아닌,

그런 생성 정보와 연관 관계 정보에 대한 설정을 읽어 처리한다.

 

 

빈(Bean) 요청 시의 처리 과정

Application Context의 핵심 기술인 Bean에 대한 처리 내용이다.

Client에서 Bean을 요청하면 Application Context는 다음과 같은 과정을 거치게 된다.

  1. Application Context는 @Configuration이 붙은 클래스들을 설정 정보로 등록하고,
    @Bean이 붙은 메소드의 이름으로 Bean 목록을 생성
  2. Client가 원하는 Bean을 요청
  3. Application Context는 자신의 Bean 목록에서 요청한 이름을 확인
  4. Application Context는 설정 클래스로부터 Bean 생성을 요청하고,
    생성된 Bean을 돌려준다.

 

위의 사진은 Bean 요청에 따른 처리 과정을 나타낸다.

Application Context는 @Configuration이 붙은 클래스들을 설정 정보로 등록하고,

@Bean이 붙은 메소드의 이름으로 Bean 목록을 생성한다.

그리고 클라이언트가 해당 Bean을 요청한다면

Application Context는 자신의 Bean 목록에서 요청한 이름을 찾고,

존재한다면 Bean 생성 메소드를 호출하여 객체를 생성하고 돌려준다.

 

 

Application Context의 장점

클라이언트는 @Configuration이 붙은 구체적인 팩토리 클래스를 알 필요가 없다.

애플리케이션이 발전하면 팩토리 클래스가 계속해서 증가할 것이다.

Application Context 가 없다면 클라이언트는 원하는 객체를 가져오려면

어떤 팩토리 클래스에 접근해야 하는지 알아야 하는 번거로움이 생긴다.

반면에 Application Context를 사용하면 팩토리가 아무리 많아져도 이에 직접 접근할 필요가 없어진다.

즉, 일관된 방식으로 원하는 빈을 가져올 수 있다.

 

종합 IoC 서비스를 제공

Application Context는 객체의 생성과 관계 설정이 다가 아니다.

객체가 만들어지는 방식과 시점 및 전략 등을 다르게 가져갈 수 있고,

그 외에도 후처리나 정보의 조합 인터셉트 등과 같은 다양한 기능이 존재한다.

 

다양한 빈 검색 방법을 제공

Application Context 에서 빈 목록을 관리하여,

빈의 이름이나 타입 또는 어노테이션 설정 등으로 빈을 찾을 수 있다.

이러한 빈을 직접 찾는 방식은 의존성 검색(dependency lookup)으로 불린다.

 

 

Application Context 초기화

Spring boot가 아닌 일반 Spring Framework에서는 초기화를 직접 해줘야 한다.

web.xml 에서 ContextLoaderListener를 사용하여 Context를 초기화를 진행할 수 있다.

ContextLoaderListener를 통해 웹 애플리케이션이 시작될 때,

Spring Application Context를 초기화하고 필요한 빈들을 로드하는 역할을 진행한다.

 

하지만 Spring boot에서는 @SpringBootApplication 어노테이션을 통해

자동으로 Application Context의 초기화를 시킬 수 있다.

SpringBoot는 내부적으로 톰캣을 내장하고 있어서 초기화가 자동으로 이루어지는 것이다.

@SpringBootApplication 어노테이션이 붙은 클래스를 기준으로 애플리케이션이 자동으로 구성되며,

@Configuration, @EnableAutoConfiguration, @ComponentScan 등을 모두 포함한다.

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

 

따라서 @SpringBootApplication 어노테이션을 사용하고, SpringApplication.run() 메소드를 통해

ApplicationContext를 초기화하고 애플리케이션을 실행할 수 있다.

 

참고자료

https://velog.io/@wooyong99/Spring-Application-Context

https://mangkyu.tistory.com/151

 

반응형

loading