zoaseo
To Infinity And Beyond
zoaseo
전체 방문자
오늘
어제
  • 분류 전체보기 (760)
    • 개발이 좋아서 (378)
      • SAP가 좋아서 (0)
      • Java가 좋아서 (42)
      • Spring이 좋아서 (50)
      • JPA가 좋아서 (0)
      • QueryDSL이 좋아서 (26)
      • Docker가 좋아서 (7)
      • Redis가 좋아서 (7)
      • AWS가 좋아서 (5)
      • CI/CD가 좋아서 (6)
      • Troubleshooting이 좋아서 (4)
      • Kotlin이 좋아서 (7)
      • SQL이 좋아서 (6)
      • HTTP가 좋아서 (21)
      • JavaScript가 좋아서 (30)
      • TypeScript가 좋아서 (6)
      • Vue가 좋아서 (21)
      • Flutter가 좋아서 (61)
      • React가 좋아서 (20)
      • Redux(React)가 좋아서 (2)
      • Angular가 좋아서 (22)
      • HTML이 좋아서 (9)
      • CSS가 좋아서 (15)
      • PHP가 좋아서 (9)
      • Illustrator가 좋아서 (2)
    • 노력이 좋아서 (169)
    • 결과물이 좋아서 (14)
    • 코딩연습이 좋아서 (168)
      • 이론이 좋아서 (62)
      • SQL이 좋아서 (90)
    • 유용한 사이트가 좋아서 (28)
    • Github (2)

인기 글

티스토리

hELLO · Designed By 정상우.
zoaseo

To Infinity And Beyond

개발이 좋아서/Spring이 좋아서

AOP - 개념

2024. 12. 31. 12:46

적용방식

  • 컴파일 시점
  • 클래스 로딩 시점
  • 런타임 시점(프록시)

 

컴파일 시점 단점 - 컴파일 시점에 부가 기능을 적용하려면 특별한 컴파일러도 필요하고 복잡하다. (AspectJ가 제공하는 특별한 컴파일러를 사용해야 한다.)

 

클래스 로딩 시점 단점 - 로드 타임 위빙은 자바를 실행할 때 특별한 옵션('java -javaagent')을 통해 클래스 로더 조작기를 지정해야 하는데, 이 부분이 번거롭고 운영하기 어렵다.

 

특징

- 컴파일 시점: 실제 대상 코드에 애스팩트를 통한 부가 기능 호출 코드가 포함된다. AspectJ를 직접 사용해야 한 다.

- 클래스 로딩 시점: 실제 대상 코드에 애스팩트를 통한 부가 기능 호출 코드가 포함된다. AspectJ를 직접 사용해야 한다.

- 런타임 시점: 실제 대상 코드는 그대로 유지된다. 대신에 프록시를 통해 부가 기능이 적용된다. 따라서 항상 프록 시를 통해야 부가 기능을 사용할 수 있다. 스프링 AOP는 이 방식을 사용한다.

 

※ 컴파일 시점, 클래스 로딩 시점은 AspectJ로 적용 가능 지점(조인 포인트)가 넓다. 하지만 (런타임 시점)프록시 방식을 사용하는 스프링AOP의 조인 포인트는 메서드 실행으로 제한된다. 스프링 빈에만 AOP를 적용할 수 있다.

※ 스프링은 AspectJ의 문법을 차용하고 프록시 방식의 AOP를 적용한다. AspectJ를 직접 사용하는 것이 아니다.

※ AspectJ는 너무 복잡하다. 실무에서는 스프링 AOP 기능만 사용해도 대부분의 문제를 해결할 수 있다.

 

AOP 용어 정리

  • 조인 포인트(Join point)
  • 어드바이스가 적용될 수 있는 위치, 메서드 실행, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 지점
  • 조인 포인트는 추상적인 개념이다. AOP를 적용할 수 있는 모든 지점
  • 스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메서드 실행 지점으로 제한된다.
  • 포인트컷(Pointcut)
  • 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능
  • 주로 AspectJ 표현식을 사용해서 지정
  • 프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별 가능
  • 타겟(Target)
  • 어드바이스를 받는 객체, 포인트컷으로 결정
  • 어드 바이스(Advice)
  • 부가 기능
  • 특정 조인 포인트에서 Aspect에 의해 취해지는 조치
  • Around(주변), Before(전), After(후)와 같은 다양한 종류의 어드바이스가 있음
  • 에스펙트(Aspect)
  • 어드바이스 + 포인트컷을 모듈화 한 것
  • @Aspect를 생각하면 됨
  • 여러 어드바이스와 포인트컷이 함께 존재
  • 어드바이저(Advisor)
  • 하나의 어드바이스와 하나의 포인트컷으로 구성
  • 스프링 AOP에서만 사용되는 특별한 용어
  • 위빙(Weaving)
  • 포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것
  • 위빙을 통해 핵심 기능 코드에 영향을 주지 않고 부가 기능을 추가할 수 있음
  • AOP 적용을 위해 에스펙트를 객체에 연결한 상태
  • AOP 프록시
  • AOP 기능을 구현하기 위해 만든 프록시 객체, 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시이다.

'개발이 좋아서 > Spring이 좋아서' 카테고리의 다른 글

AOP - 포인트컷  (0) 2025.01.02
AOP - 구현  (0) 2024.12.31
빈 후처리기  (0) 2024.12.30
포인트컷, 어드바이스, 어드바이저  (0) 2024.12.30
프록시 팩토리  (0) 2024.12.30

    티스토리툴바