AOP - 개념, 용어

귀찮Lee·2022년 6월 20일
0

Spring

목록 보기
10/30

◎ AOP (Aspect Oriented Programming)

  • OOP (객체 지향 프로그래밍)

    • 핵심 : 공통된 목적을 띈 데이터와 동작을 묶어 하나의 객체로 정의
    • 장점 : 객체의 적극적 활용을 통해, 기능을 재사용 할 수 있다.
    • 객체를 잘 사용하기 위해서는 관심사 분리가 필수이다. (Single Responsibility Principle과 연관 있음)
  • OOP의 문제점

    • 업무와는 관련 없지만 필수적인 부가기능(Cross-cutting Concerns)이 필요
    • 이는 다른 기능들에 공통적으로 필요한 경우가 많음
      ex) 트랙젝션, 보안, 로깅
    • 비즈니스 부분을 처리하는 클래스와 횡단 관심사(부가 기능) 이 공존하게 된다.
      • 메서드의 복잡도 증가 - 비즈니스 코드 파악이 어려워짐
      • 부가 기능 메서드가 반복적 구현 - 부가 기능 모듈화가 어려움
  • AOP (Aspect Oriented Programming)

    • Aspect : 여러 유형과 객체 간에 발생하는 문제 (ex. 트랜잭션)의 모듈화를 가능하게 한다.
    • 기존과 다른 프로그램 구조 사고 방식을 제공함으로써 객체 지향 프로그래밍(OOP)의 부족한 부분을 보완
    • 필요성
      • 소프트웨어 개발에서 변경 지점은 하나가 될 수 있도록 잘 모듈화 되어야 한다.
      • 부가 기능처럼 전반에 적용하는 부분은 OOP 방식으로 해결이 어렵기 때문에 AOP 방식이 필요하다.
  • AOP의 핵심 기능과 부가 기능

    • 핵심 기능
      • 객체가 제공하는 고유의 기능 (업무 로직 등등)
      • ex) Controller, Service, Repository
    • 부가 기능
      • 핵심 기능을 보조하기 위해 제공되는 기능
      • 단독으로 사용하지 않고, 핵심 기능과 함께 사용됨
      • 부가 기능이 필요한 경우 하나의 형태로 합쳐져 로직을 완성함
      • 서비스 실행시, 핵심 기능과 부가 기능이 함께 실행됨

◎ AOP 용어

  • 애스팩트(Aspect)

    • 여러 객체에 공통으로 적용되는 기능
    • 어드바이스 + 포인트컷을 모듈화하여 애플리케이션에 포함되는 횡단 기능
  • 조인 포인트(Join Point)

    • 어플리케이션 실행 흐름에서의 특정 포인트(AOP를 적용할 수 있는 지점)를 의미
    • 어플리케이션에 새로운 동작을 추가하기 위해 관심 코드(aspect code)를 추가할 수 있다.
    • 스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행 지점으로 제한
  • 어드바이스(Advice)

    • 조인 포인트에서 수행되는 코드를 의미 (Aspect를 언제 핵심 코드에 적용할지 정의)
  • 포인트 컷(Pointcut)

    • 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능
    • 스프링 AOP는 프록시 방식을 사용하므로 메소드 실행 지점만 포인트 컷으로 선별 가능
  • 위빙(Weaving)

    • 포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것을 의미
      • Advice를 핵심코드에 적용하는 것을 의미
    • 핵심 기능 코드에 영향을 주지 않고 부가 기능 추가 가능
  • AOP 프록시

    • 프록시 객체 : 원래 객체를 감싸고 있는 객체 (원래 객체와 타입은 동일)
    • AOP 기능을 구현하기 위해 만든 프록시 객체를 의미
    • Spring에서 JDK 동적 프록시 또는 CGLIB 프록시 사용
  • 타겟(Target)

    • 핵심 기능을 담고 있는 모듈로 타겟은 부가기능을 부여할 대상
    • Adivce를 받는 객체이고 포인트컷으로 결정함
  • 어드바이저(Advisor)

    • 하나의 어드바이스와 하나의 포인트 컷으로 구성
    • 스프링 AOP에서만 사용되는 특별한 용어
profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!

0개의 댓글