스프링 내부에서 DI 가 일어나는 과정

헨도·2025년 3월 11일
0

SpringBoot

목록 보기
26/30
post-thumbnail

DI 란?

  • 객체 간의 의존 관계를 설정하는 방식으로, 스프링은 이를 통해 결합도를 낮추고 유연한 코드 구조를 만듭니다.
  • 스프링에서는 IoC(Inversion of Control) 컨테이너가 이를 관리하며, 주로 @Autowired 어노테이션이나 XML 설정 등을 통해 DI 가 이루어집니다.

스프링의 DI 과정

1. 스프링 컨테이너 초기화 (ApplicationContext)

  • ApplicationContext 는 스프링 IoC 컨테이너의 구현체로, 스프링 애플리케이션의 핵심입니다.
    컨테이너는 애플리케이션이 실행되면 먼저 초기화되며, 설정 파일 또는 클래스에서 제공된 정보를 바탕으로 객체들을 생성하고 관리합니다.

  • 설정 파일에는 base.xml 과 같은 XML 파일이 있을 수 있고, @Configuration 이 붙은 자바 설정 클래스일 수도 있다.

2. Bean 정의 (Bean Definition)

  • 스프링은 Bean 을 관리하는데, Bean 은 스프링 컨테이너에 의해 관리되는 객체이다.
  • Bean 정의란 @Bean 어노테이션을 사용하거나 XML 파일에서 < bean > 태그로 등록한 객체의 정의를 의미합니다.
  • 스프링 컨테이너는 Bean 의 메타데이터(클래스 타입, 의존성, 리사이클 정보 등)을 관리합니다.

3. DI 방식

  • 생성자 주입, Setter 주입, 필드 주입

4. Bean 생성 및 의존성 주입

  • 스프링이 Bean 을 생성할 때, 필요한 의존성을 찾고 이를 주입하는 방식으로 DI 가 이루어진다.
  • 스프링은 스캔(컴포넌트 스캔) 을 통해 @Component, @Service, @Repository 등 어노테이션이 붙은 클래스를 자동으로 인식하여 Bean 으로 등록합니다.
  • Bean 생성 후, 의존성 주입이 필요한 클래스에 대해 자동으로 의존성을 주입합니다.

5. 의존성 주입 과정

  • 자동 주입 (Autowired) : 스프링은 @Autowired 어노테이션을 사용하여 의존성 자동 주입
  • 수동 주입 : 주입할 Bean 을 명시적으로 정의하는 방법

6. 컨테이너가 Bean 을 관리

  • 스프링은 Singleton 스코프를 기본으로 관리하며, prototype 등의 다른 스코프를 통해 객체의 생명주기를 관리할 수 있다.

  • 의존성 주입이 완료된 후, 애플리케이션에서 사용되는 동안 스프링은 객체의 라이프사이클을 관리합니다.
    예를 들어, Bean 이 하나만 생성되어야 한다면 singleton 으로 설정하여 동일한 객체를 반환하고, prototype 으로 설정하면 매번 새로운 객체를 생성합니다.

7. 애플리케이션 실행

  • 최종적으로 애플리케이션이 실행될 때, 스프링 컨테이너가 모든 의존성 주입을 완료하고, 비즈니스 로직을 처리할 수 있도록 애플리케이션이 준비됩니다.

요약

  1. 스프링에서 DI 는 IoC 컨테이너가 Bean 을 생성하고 관리하면서 이루어집니다.

  2. 의존성 주입은 생성자 주입, Setter 주입, 필드 주입 방식으로 이루어지며, 스프링 Bean 을 생성하면서 필요한 의존성을 자동으로 주입합니다.

  3. 스프링 컨테이너는 ApplicationContext 객체를 관리하고, 이를 통해 애플리케이션의 객체 생명주기와 의존성 관계를 관리합니다.

profile
Junior Backend Developer

0개의 댓글