[SPRING] AOP

2021. 7. 31. 19:59·SPRING
728x90

AOP (Aspect Oriented Programming)

  • 관점지향 프로그래밍, 핵심관점(업무로직) + 횡단관점(트랜잭션/로그/보안/인증 처리등)으로 관심의 분리를 실현
  • 중복을 줄여서 적은 코드 수정으로 전체 변경을 할 수 있게 하자라는 목적에서 출발
  • 중복되는 코드 제거, 효율적인 유지보수, 높은 생산성, 재활용성 극대화, 변화 수용이 용이 등의 장점이 있음
  • 자바진영에서 사용되는 AOP도구로는 AspectJ, Spring AOP가 존재함
  • Aspect로 모듈화하여 핵심적인 비즈니스 로직에 분리하여 재사용하겠다는 것이 AOP의 취지 
  • AOP는 횡단관심사를 깔끔하게 처리하기 어려운 OOP의 부족한 부분을 보조하려는 목적으로 나옴 

AOP 개념

https://www.baeldung.com/spring-aop 참고

  • Joinpoint : 메소드를 호출하는 '시점', 예외가 발생하는 '시점'과 같이 애플리케이션을 실행할 때 특정 작업이 실행되는 '시점'을 의미
  • Advice : Joinpoint에서 실행되어야하는 코드이며, 횡단관점에 해당함 (트랜잭션/로그/보안/인증 등) / 프록시가 호출하는 부가기능, 단순하게 프록시 로직 (어떤 로직을 적용할지 선택하는 것)
  • Target : 실질적인 비즈니스 로직을 구현하고 있는 코드이며 핵심관점에 해당함 (업무로직)
  • Pointcut : Target 클래스와 Advice가 결합될 때 둘 사이의 결합규칙을 정의하는 것 (Advice가 실행된 Target의 특정 메소드등을 지정)  / 어디에 부가 기능을 적용할지 적용하지 않을지 판단하는 필터링 로직
  • Aspect : Advice와 Pointcut을 합쳐서 하나의 Aspect라고 함, 즉 일정한 패턴을 가지는 클래스에 Advice를 적용하도록 지원할 수 있는 것 
  • Weaving : AOP에서 Joinpoint들을 Advice로 감싸는 과정, Weaving 하는 작업을 도와주는 것이 AOP가 하는 역할'
  • Adivisor : 단순하게 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것 

Spring AOP의 특징

  • 포인트 컷은 대상 여부를 확인하는 필터역할, 어드바이스는 부가 기능 로직 담당
  • 스프링은 Aspect의 적용 대상이 되는 객체에 대한 Proxy를 만들어 제공함
  • 대상객체(Target)를 사용하는 코드는 대상객체를 Proxy를 통하여 간접적으로 접근
  • Proxy는 공통기능(Advice)를 실행한 뒤 대상객체의 실제 메서드를 호출하거나 또는 대상객체의 실제 메소드가 호출된 뒤 공통기능을 실행

AOP 어드바이스 관련 어노테이션 종류 

  • @Before : Joinpoint전에 실행, 예외가 발생하는 경우만 제외하고 항상 실행
  • @After : Joinpoint에서 처리가 완료된 후 실행, 예외발생이나 정상 종료 여부와 상관없이 항상 실행
  • @AfterReturning : Joinpoint에서 정상적으로 종료한 후에 실행, 예외가 발생하면 실행 X
  • @AfterThrowing : Joinpoint에서 예외가 발생했을 때 실행, 예외가 발생하지 않고 정상적으로 종료하면 실행 X
  • @Around : Joinpoint 전후에 실행
저작자표시

'SPRING' 카테고리의 다른 글

[SPRING] Bean 생명주기 콜백 (PostConstruct / PreDestory)  (0) 2022.03.02
[SPRING] Transaction Propagation  (0) 2021.09.22
[SPRING] Interceptor  (0) 2021.07.11
[SPRING] DISPATCHER-SERVLET  (0) 2021.06.07
[SPRING] Bean  (0) 2021.05.23
'SPRING' 카테고리의 다른 글
  • [SPRING] Bean 생명주기 콜백 (PostConstruct / PreDestory)
  • [SPRING] Transaction Propagation
  • [SPRING] Interceptor
  • [SPRING] DISPATCHER-SERVLET
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    docker
    Kafka
    go
    Spring
    Elk
    SQL
    이펙티브코틀린
    AWS
    splunk
    cleancode
    IntelliJ
    ElasticSearch
    JPA
    이펙티브 코틀린
    java
    엘라스틱서치
    코틀린
    클린코드
    프로그래머스
    자바
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[SPRING] AOP
상단으로

티스토리툴바