ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AOP 정의
    Spring-diary/AOP 2020. 3. 4. 22:42

    정의

    • AOP란 OOP를 OOP답게 프로그래밍 하기 위한 프로그래밍 기법이다. 
    • 관점에 따라 프로그래밍을 한다고 해서 관점 지향 프로그래밍이라고 한다. 
    • AOP의 가장 기초가 되는 개념은 핵심적인 부분만 집중할 수 있도록 필수적인 요소이지만
      중복해서 작성해야 하는 핵심 이외의 코드들은 외부로 빼놓는 것이다. 

    여러 객체에서 공통적으로 들어가는 필수 기능들을 횡단 관심이라 한다.

    • 횡단 관심을 제거하여 핵심관심(비즈니스 로직)만 집중할 수 있도록 하는 프로그래밍 기법이 AOP이다.

    *위빙(Weaving)

    핵심 관심 모듈의 중간 중간 필요한 횡단 관심 모듈을 직접 호출하지 않고 위빙이라 불리는 작업을 통해 
    횡단 관심 코드가 삽입 되도록 한다. 

    핵심 관심 모듈 범위에서는 횡단 관심 모듈에 대해 인식할 필요가 전혀 없다.

     

     

    *3가지 Weaving 방식

    • 컴파일시 Weaving
    • 클래스 로딩 시 Weaving
    • 런타임 시 Weaving

    -컴파일 시, 클래스 로딩 시 Weaving은 AspectJ 라이브러리를 추가하여 구현할 때 사용된다.

    -런타임 시 Weaving하는 방식은 Spring-AOP에서 사용하는 방식인데 소스코드나 클래스 정보 자체를 변경하지 않는다.
     대신 프록시를 생성하여 AOP를 적용한다. 프록시 기반의 AOP는 핵심 로직을 구현할 개체에 직접 접근하는 것이 아닌
     중간에 프록시를 생성하여 프록시를 통해 핵심 로직의 객체에 접근한다.
     (프록시는 핵심 로직을 실행하기 전 또는 후에 공통 모듈 기능을 적용하는 방식으로 AOP를 구현한다.)

    프록시를 이용한 AOP 구현

    • 스프링은 프록시를 이용하여 AOP를 구현한다.
    • 스프링은 Aspect의 적용대상이 되는 객체에 대한 프록시를 만들어 제공한다.
    • 비즈니스 로직에 접근 시 대상 객체로 바로 접근하는 것이 아닌 프록시를 통해서 간접적으로 접근한다.
    • 이 과정에서 프록시는 공통 기능을 실행한 뒤 대상 객체의 실제 메소드를 호출하거나 실제 메소드 호출후 공통 기능을 실행한다.
    • 대상 타겟은 빈객체가 생성 되는데 런타임 시에 오브젝트 생성 설정에 따라서 스프링 컨테이너가 지정한 빈 객체에 대한 프록시 객체를 생성하고, 원본 빈 객체 대신에 프록시 객체를 사용하게 한다.

     

     

     

     

     

    용어

    위빙을 하기위해 쓰이는 용어들

    Pointcut

    어느 부분(where)에 횡단 관심 모듈을 삽입 할 것인지 정의하는 것.

    -자바 프로그래밍은 Method의 호출로 실행되기 때문에 Method에 횡단 관심 모듈을 삽입한다.

    -접근 제어자,반환타입,패키지,클래스,이름,파라미터,예외를 작성하여 pointcut을 정의한다.

    Joinpoint

    언제(when) 횡단 관심 모듈을 삽입할지 정의하는 것.

    -메서드 실행 전(before)

    -메서드 실행 후 (after)

    -반환된 후(AfterReturning)

    -예외가 던져지는 시점(AfterThrowing)

    -메서드 실행 전,후(around)

    -pointcut이 메서드이기 때문에,메서드를 기준으로 joinpoint가 정의된다.

    -Spring에서는 5가지 경우에 대해서 Annotation을 제공한다.

    Advice 핵심 관심 모듈에 삽입 될 횡단 관심 모듈(what)을 의미.
    Aspect

    여러 객체에 공통으로 적용되는 기능을 Aspect라고 하며
    Pointcut과 Advice의 조합이다.

     

    ex)

    -트랜잭션

    -보안

     

     

     

     

     

     

     

    'Spring-diary > AOP' 카테고리의 다른 글

    AfterReturningAdvice  (0) 2020.03.04
    BeforeAdvice  (0) 2020.03.04
    StopWatch  (0) 2020.02.07
    Method 출력 후 코드 삽입  (0) 2020.02.07
    Method 출력 전 코드 삽입  (0) 2020.02.07

    댓글

Designed by Tistory.