AOP

supway·2022년 9월 21일
0

Tech

목록 보기
1/7

AOP (Aspect - Oriented Programming)

  • AOP란?
    => 여러 오브젝트에 나타나는 공통적인 부가 기능을 모듈화하여 재사용하는 기법

    ex) 성능 검사, 트랜잭션 처리, 로깅 등

  • 서비스에서는 비즈니스 로직(핵심 기능)만 수행되는 것이 좋다. 인프라 로직은 따로 빼서 AOP를 적용

  • AOP를 사용하지 않을 때 문제점

  1. 중복코드를 발생시키고 유지보수가 힘들어진다.
  2. 비즈니스 로직을 이해하기 어렵게 만듦

    ex) 시간 측정을 하는 기능을 여러 메서드에 적용을 시켜야 할때 그 대상 메서드가 수 억개라면 수작업으로 하기에는 비효율적이다.
    => 해결방안으로 AOP 적용이 존재

AOP 용어

  • Target : 부가 기능이 적용될 대상 ( 어떤 대상에 부가 기능을 적용할 것인가 )

  • Advice : 어떤 부가 기능을 언제 사용할지에 대한 정의

    ex)
    @Before : 메서드가 실행되기 전에 실행
    @AfterReturning : 메서드가 정상적으로 실행되었을 때 실행
    @AfterThrowing : 메서드가 예외를 발생시켰을 때 실행
    @After : @AfterReturning + @AfterThrowing
    @Around : 비즈니스 로직 전후로 실행

  • JoinPoint : 어드바이스가 적용될 수 있는 위치 ( 어디에 적용할 것인가)

    ex) 메서드, 필드, 객체, 생성자 등
    Spring AOP의 경우 메서드 호출 할때만 가능
    => 이유 : 프록시 기반의 AOP 이기 때문에

  • Point cut : Advice를 적용할 JoinPoint를 선별하는 작업
    원하는 메서드를 선택해서 적용할 수 있음

AOP의 구현 방법

  • 컴파일 => J.java -> J.class
    : J.java라는 클래스를 J.class 라는 파일로 컴파일 하는 시점에 AOP 적용

  • 클래스 로드시 => J.class를 컴파일해서 클래스 로더가 메모리 상에 올릴 때 적용

  • 프록시 패턴 => J라는 어떤 타겟 클래스를 프록시로 감싸서 부가 기능을 제공하는 프록시로 감싸서 실행을 하는 방식
    (Spring에서 IoC와 DI를 기반으로 하기 때문에 가능함)


우아한Tech의 테코톡(제이,뚱이님의 Spring AOP)을 참조하였습니다.

profile
개발잘하고싶은사람

0개의 댓글