AOP & Spring

Woozy9ucci·2023년 12월 21일
0

관점 지향 프로그래밍 AOP (Aspect-Oriented Programming)

  • AOP?

    • 핵심 로직과 부가기능을 분리, 부가기능(횡단 관심사)을 모듈화하여 재사용 할 수 있도록 하는 프로그래밍 패러다임
  • 횡단 관심사?

    • 여러 모듈이나 객체에서 공통적으로 발생하는 로깅, 보안, 트랜잭션 관리 등
  • 목적?

    • 횡단 관심사를 별도의 모듈로 분리하여 중복코드를 최소화, 유지보수성과 재사용성을 향상
      (OOP의 한계를 보완)
  • 주요 개념

    • ①Aspect

      • 횡단 관심사를 모듈화 한 단위 (e.g. Transaction)
    • ②PointCut

      • Aspect가 적용될 대상 (프로그램 상 실제 위치 e.g. 메서드, 클래스, 어노테이션..)
    • ③JoinPoint

      • Aspect가 적용될 프로그램의 실행 지점 (tx.begin() 과 tx.commit() 사이)
    • ④Advice

      • 횡단 관심사를 언제, 어떻게 처리할지 정의한 것 (joinPoint 앞, 뒤, 예외 발생 시 등 다양한 시점에 적용할 수 있다)

Java AOP Framwork (Spring AOP vs AspectJ)

  • Weaving?

    • Aspect를 실제 프로그램 코드에 적용하는 과정
  • Weaving 방식

    • Compile-time Weaving
      • 컴파일 시점에 AOP 적용을 확인하고 새로운 클래스를 만들어 줌
      • AspectJ
    • Load-time Weaving
      • JVM에서 Class를 로딩하는 시점에 바이트코드를 변경 (원본클래스 유지)
      • AspectJ
    • Run-time Weaving
      • 객체에 직접 접근하지 않고 프록시를 통해 접근하여 AOP적용
      • SpringAOP
  • 성능

    • AspectJ 가 SpringAOP에 비해 8~35배 빠름 (SpringAOP는 프록시를 거쳐야하기 떄문에 오버헤드가 있다)
    • SpringAOP가 간단하게 적용할 수 있음 (AspectJ 는 별도의 컴파일러, weaver 필요)

0개의 댓글

관련 채용 정보