본문 바로가기
Spring

[Spring] 10. AOP(관점 지향 프로그래밍)

by ssunooo 2024. 10. 16.

 

 

 

프로그래밍 패러다임


절차 지향 프로그래밍 (Procedural Programming) :  문제를 해결하는데 최적화 ex) C언어
객체 지향 프로그래밍 (Object Oriented Programming, OOP) : 프로그램을 제작하는데 최적화 ex) JAVA
관점 지향 프로그래밍 (Aspect Oriented Programming, AOP) : 기능을 수행하는데 최적화 ex) Spring



핵심기능과 공통기능

 

  • 핵심 기능 (핵심 관심(관점), 핵심 로직, 비즈니스 메서드, 서비스, 종단 처리된 기능)
    ex) CRUD
  • 공통 기능 (공통 로직, 공통 관심(관점), 횡단 관심, 횡단 처리된 기능)
    ex) 인가, 허가 확인
    ex) 인증(본인 인증), 유효성 검사
    ex) 로그(로깅)
    ex) 보안
    ex) 트랜잭션 처리 (DB)

 

 

 

 

AOP의 핵심 개념

어떤 핵심관심(PointCut)에 대해 언제 어떤 공통로직(Advice)을 호출해야하는지

 

 

 


1. Pointcut

 

프로그램 실행 중 특정 지점(Join Point)을 정의

어떤 메서드 호출, 객체 생성, 예외 발생 등의 지점 지정

 

<PointCut 설정 코드 - applicationContext.xml>

<aop:pointcut id="bPointcut" expression="execution(* com.koreait.app.biz.board..*Impl.select*(..))"/>

 


메서드 부분 : 패키지 경로 (com.koreait.app.biz.board..*Impl.select*)
인풋 부분 : 개수 타입 무관하게 ((..))
아웃풋 부분 : 타입에 무관하게(특정되어 있지 않음) (*)


2. Aspect(Advisor, 어드바이저) 
애스팩트, 어드바이스+포인트컷, 어드바이스(공통로직)와 포인트컷(핵심관심)의 결합
설정 그 자체를 의미하는 경우가 많음

<aop:aspect ref="la">
			<aop:before method="printLog" pointcut-ref="aPointcut"/>
</aop:aspect>



동작 시점 aspect설정

  • after 핵심관심 후
  • after-returning 핵심관심 후 (반환하는것이 있을 때)
  • after-throwing 에러발생 후
  • before 핵심관심 전
  • around 핵심관심 전 후



용어 정리

 

Advice : 횡단 처리, 공통관심


관점 지향 프로그래밍(AOP) : Advice의 메서드(공통 로직)를 제시간에 호출  

 

Jointpoint : 조인 포인트, 포인트컷 후보(포인트컷이 될수 있는 대상)
앞으로 될수있는 모든 CRUD를 의미함

Weaving : 위빙, 핵심관심에 공통로직을 끼워넣는 과정
스프링에서는 실행시 위빙처리가 수행됨
런타임 위빙 방식 ↔ 컴파일 방식


 

2024.10.16