Zin0_0 2021. 1. 30. 00:11
반응형

Spring IoC/DI 컨테이너

  • 컨테이너

    • 인스턴스의 생명주기를 관리

    • 생성된 인스턴스에게 추가 기능을 제공

    • ex ) WAS의 Servlet 컨테이너

  • IoC(Inversion of Control)

    • 제어의 역전

      • 컨테이너가 개발자(코드) 대신 오브젝트의 제어권을 가지고 있어서 제어의 역전이라함
    • ex) 서블릿 클래스는 개발자가 만들지만, 서블릿을 메소드에 맞게 호출하는 것은 WAS

  • DI(Dependency Injection)

    • 의존성 주입

      • 클래스 사이의 의존 관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동으로 연결
    • 어노테이션을 통해 사용

    • 코드 예시

    •     // 미적용 사례
      class 엔진 {
      
      }
      
      class 자동차 {
           엔진 v5 = new 엔진();
      }
    •     // 적용 사례
      @Component
      class 엔진 {
      
      }
      
      @Component
      class 자동차 {
           @Autowired
           엔진 v5;
      }
  • Spring에서 제공하는 IoC/DI 컨테이너

    • BeanFactory

      • IoC/DI에 대한 기본 기능을 가짐

      • ApplicationContext

        • BeanFactory의 모든 기능 포함

        • 일반적으로 BeanFactory보다 추천됨

        • 트랜잭션처리, AOP 등에 대한 처리 가능

        • BeanPostProcessor, BeanFactoryPostProcessor등을 자동으로 등록하고 국제화 처리, 어플리케이션 이벤트 등을 처리

    • BeanPostProcessor

      • 컨테이너의 기본 로직을 오버라이딩

      • 인스턴스화와 의존성 처리 로직 등을 개발자가 원하는대로 구현하도록 함

    • BeanFactoryPostProcessor

      • 설정된 메타 데이터를 커스터마이징 가능
    • AOP

      • Aspect Oriented Programming

        • 관점 지향 프로그래밍

        • 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누고 그 관점을 기준으로 각각 모듈화를 하겠다.

      • 여러 부분에서 중복된 코드들을 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용

      • 주요 개념

        • Aspect

          • 흩어진 관심사(여러 군데에 중복된 코드들)를 모듈화한 것

          • 주로 부가기능을 모듈화함

        • Target

          • Aspect를 적용하는 곳(클래스, 메소드 ..)
        • **Advice**

          • 실직적으로 어떤 일을 해야하는가에 대한 것

          • **실질적인 부가기능을 담은 구현체**

        • JointPoint

          • Advice가 적용될 위치, 끼어들 수 있는 지점

          • 메소드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용 가능

        • PointCut

          • JointPoint의 상세 스펙을 정의

          • `A란 메소드의 진입 시점에 호출할 것`과 같이 구체적으로 Advice가 실행될 지점을 정할 수 있음

      • Spring AOP 특징

        • 프록시 패턴 기반의 AOP 구현체

          • 접근 제어 및 부가기능을 추가하기 위해 프록시 객체를 씀
        • 스프링 Bean에만 AOP 적용 가능

        • 모든 AOP 기능을 제공하는 것이 아닌, 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 지원하는 목적

          • 중복 코드, 프록시 클래스 작성의 번거로움, 객체간 관계 복잡도 증가 등

Reference

https://www.boostcourse.org/web326/lecture/58970/

https://engkimbs.tistory.com/746

반응형