1 분 소요

Spring Aop, Ioc, DI 의 개념

Spring Aop

  • AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다.

    관점 지향은 어떤 로직을 기준으로 서비스 로직과 인프라 로직으로 나누어서 보고 인프라 로직을 모듈화 할 수 있는 프로그래밍 기법입니다.

    • 인프라 로직 : 서비스 로직을 제외한 부가기능, 애플리케이션의 전 영역에서 나타날 수가 있음, 따라서 중복 코드를 만들어 낼 수 있음
  • AOP는 컴파일 시, 로드 타임 시, 런타임 시 3가지 경우에 적용을 시킬 수 있고

    스프링 AOP 가 주로 사용하는 방법은 런타임시에 A라는 클래스 타입의 Bean 을 만들 때 A 타입의 Proxy Bean 을 만들어서 Aspect 코드를 추가하여 동작하게 합니다.

  • 대표적인 예로는 @Transcational 이 있습니다.

Spring Aop 의 적용

1) 컴파일 타임 적용

  • 컴파일 시점에 바이트 코드를 조작하여 AOP가 적용된 바이트 코드를 생성하는 방법.

2) 로드 타임 적용

  • 순수하게 컴파일한 뒤, 클래스를 로딩하는 시점에 클래스 정보를 변경하는 방법

3) 런타임 적용

스프링 AOP가 주로 사용하는 방법. A라는 클래스 타입의 Bean을 만들 때 A 타입의 Proxy Bean을 만들어 Proxy Bean이 Aspect 코드를 추가하여 동작하는 방법.

  • Aspect 코드 : 인프라 로직들을 모듈화 한 것

스프링 DI

  • 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.
  • DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

    의존관계 주입은 크게 4가지 방법이 있다. 

    1. 생성자 주입
      • 생성자를 통해서 의존 관계를 주입 받는 방법이다.
      • 생성자 호출시점에 딱 1번만 호출되는 것이 보장 되므로 의존관계가 불변하다.
    2. 수정자 주입(setter 주입)
      • 선택, 변경 가능성이 있는 의존관계에 사용
    3. 필드 주입
      • DI 프레임워크가 없으면 아무것도 할 수 없다.
    4. 일반 메서드 주입

## Spring IOC

  • (inversion of control)의 약자로 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 한다.
  • 즉 인스턴스의 생성부터 소멸까지를 IoC 컨테이너가 대신 관리해줍니다.이 과정에서 DI(의존성 주입)를 통해 IoC컨테이너에 주입시킵니다.

태그:

카테고리:

업데이트: