Spring Framework/의존성 주입(Dependency Injection)

의존성 주입 관리 기법들 소개

Hcode 2023. 11. 10.

@Primary

  • 장점
    • 기본 빈을 쉽게 설정할 수 있다.
    • 특별한 지정 없이도 해당 빈이 자동으로 주입된다.
  • 단점
    • 하나의 기본 빈만 설정할 수 있다.
    • 다양한 상황에서 다른 빈을 주입하고 싶을 때 유연성이 떨어진다.
  • 추천 사용법
    • 대부분의 경우에 적합한 기본 처리기가 있고, 예외적인 상황만 다른 처리기를 사용하고자 할 때 사용한다.
  • 엣지 케이스
    • 여러 구현체 중 하나를 기본값으로 설정했지만, 특정 케이스에서 다른 구현체를 사용해야 할 때 문제가 될 수 있다.

 

@Qualifier

  • 장점
    • 특정 빈을 명시적으로 지정할 수 있다.
    • 의존성 주입에서의 명확성과 제어가 가능하다.
  • 단점
    • 빈의 이름을 문자열로 지정해야 하기 때문에, 리팩토링 시 오류를 일으킬 수 있는 가능성이 있다.
  • 추천 사용법
    • 특정 상황에서 특정 구현체를 사용해야 할 때, 또는 여러 빈 중 하나를 선택해야 할 때 사용한다.
  • 엣지 케이스
    • 빈의 이름이 변경되었을 때, 문자열 기반의 지정은 컴파일 시점에 오류를 발견하기 어렵다.

 

Autowired with Constructor

  • 장점
    • 생성자 주입은 순환 의존성을 방지한다.
    • 불변성과 테스트 용이성을 보장한다.
  • 단점
    • 상대적으로 코드가 더 장황해질 수 있다.
  • 추천 사용법
    • 컴포넌트의 필수 의존성을 명확히 하고 싶을 때 사용한다.
  • 엣지 케이스
    • 생성자가 많은 매개변수를 받을 경우, 코드가 복잡해지고 관리가 어려워질 수 있다.

 

Bean 이름으로 지정

  • 장점
    • 빈의 이름을 통해 명시적으로 주입할 수 있으며, @Qualifier와 유사하다.
  • 단점
    • 문자열 기반으로 빈을 지정하기 때문에, 리팩토링 시 오류를 발견하기 어렵다.
  • 추천 사용법
    • 빈의 이름이 명확할 때 주입 시 사용한다.
  • 엣지 케이스
    • 같은 타입의 다른 빈이 여러 개 있고, 이름을 통해 구분해야 할 경우 혼동을 일으킬 수 있다.

 

@Profile

  • 장점
    • 환경(개발, 스테이징, 프로덕션)에 따라 다른 빈을 활성화할 수 있어 관리가 편리하다.
  • 단점
    • 프로파일 관리가 복잡해질 수 있으며, 환경 설정이 잘못될 여지가 있다.
  • 추천 사용법
    • 환경별로 다른 구현이 필요할 때 사용한다.
  • 엣지 케이스
    • 환경 설정이 잘못되어 예상치 못한 빈이 주입될 수 있다.

 

@Conditional

  • 장점
    • 상황에 따라 빈을 유연하게 등록하고 관리할 수 있다.
  • 단점
    • 조건 로직이 복잡해질 수 있다.
    • 조건에 따라 빈이 생성되지 않아, 예상치 못한 동작이 발생할 수 있다.
  • 추천 사용법
    • 애플리케이션의 상태나 설정에 따라 다른 빈을 사용하고 싶을 때 사용한다.
  • 엣지 케이스
    • 조건이 너무 복잡하거나, 런타임에 조건을 평가해야 할 경우 문제가 발생할 수 있다.

 

프로그래밍 방식 빈 등록 및 지정

  • 장점
    • 코드를 통해 빈 등록을 제어할 수 있으므로 매우 유연하다.
  • 단점
    • 코드가 복잡해진다.
    • 빈 등록 과정이 불투명해질 수 있다.
  • 추천 사용법
    • 동적으로 빈을 생성하거나 런타임에 결정해야 할 때 사용한다.
  • 엣지 케이스
    • 빈의 생성 로직이 애플리케이션의 다른 부분과 긴밀하게 결합될 수 있다.

 

빈 팩토리를 사용한 동적 빈 주입

  • 장점
    • 런타임에 빈을 동적으로 생성하고 관리할 수 있다.
  • 단점
    • 빈 팩토리의 구현이 복잡해질 수 있다.
    • 오버헤드가 발생할 수 있다.
  • 추천 사용법
    • 사용자의 요청이나 애플리케이션의 상태에 따라 다른 빈을 동적으로 생성해야 할 때 사용한다.
  • 엣지 케이스
    • 동적으로 생성되는 빈의 수명 관리가 어려울 수 있다.

 

Environment 기반의 빈 주입

  • 장점
    • 애플리케이션의 실행 환경에 따라 적절한 빈을 선택할 수 있다.
  • 단점
    • 환경 설정이 복잡해질 수 있다.
    • 설정 오류로 인한 문제가 발생할 수 있다.
  • 추천 사용법
    • 환경 변수나 시스템 프로퍼티에 기반한 빈 선택이 필요할 때 사용한다.
  • 엣지 케이스
    • 환경 변수가 예상과 다르게 설정되거나, 누락될 경우 문제가 발생할 수 있다.

댓글