[Spring] AOP 관련 용어 정리

WOOK JONG KIM·2022년 10월 22일
0

패캠_java&Spring

목록 보기
41/103
post-thumbnail

AOP

출처: https://sjh836.tistory.com/157 [빨간색코딩:티스토리]

IoC가 낮은 결합도와 관련된 것이라면 AOP 는 높은 응집도와 관련되어 있다.

서비스들의 비즈니스 메소드들은 복잡한 코드로 구성되어있는데, 그 중 핵심 로직은 얼마안되고 대부분은 트랜잭션, 로깅 처리, 인증과 관련된 코드들이 있을 수 있다.

이럴 때 비핵심이지만 꼭 필요하고, 공통화할 수 있는 부분을 따로 빼서(횡단 분리) 관리하는 것

AOP 용어

JoinPoint

클라이언트가 호출하는 모든 비즈니스 메소드, 조인포인트 중에서 포인트컷되기 때문에 포인트컷의 후보로 생각할 수 있다.

PointCut

특정 조건에 의해 필터링된 조인포인트, 수많은 조인포인트 중에 특정 메소드에서만 횡단 공통기능을 수행시키기 위해서 사용

표현식 : 리턴타입 패키지경로 클래스명 메소드명(매개변수)

Advice

횡단 관심에 해당하는 공통 기능의 코드, 독립된 클래스의 메소드로 작성

위빙(Weaving)

포인트컷으로 지정한 핵심 관심 메소드가 호출될 때, 어드바이스에 해당하는 횡단 관심 메소드가 삽입되는 과정을 의미한다

이를 통해 비즈니스 메소드를 수정하지 않고도 횡단 관심에 해당하는 기능을 추가하거나 변경이 가능해진다.

Aspect

포인트컷과 어드바이스의 결합이다.
-> 어떤 포인트컷 메소드에 대해 어떤 어드바이스 메소드를 실행할지 결정


PointCut 표현식

포인트컷을 이용하면 어드바이스 메소드가 적용될 비즈니스 메소드를 정확하게 필터링

지시자의 종류

execution : 가장 정교한 포인트컷을 만들수 있다. 리턴타입 + 패키지경로 클래스명 메소드명(매개변수)
within : 타입패턴 내에 해당하는 모든 것들을 포인트컷
bean : bean이름으로 포인트컷

리턴 타입 지정

패키지 지정

클래스 지정

메서드 지정

매개변수 지정


JoinPoint 인터페이스

어드바이스 메소드를 의미있게 구현하려면 클라이언트가 호출한 비즈니스 메소드의 정보가 필요하다.
-> 예를들면 예외가 터졌는데, 예외발생한 메소드의 이름이 뭔지 등을 기록할 필요가 있을 수 있다. 이럴때 JoinPoint 인터페이스가 제공하는 유용한 API들이 있다.


사용법

JoinPoint를 어드바이스 메소드 매개변수로 선언해야한다.
-> 이때 인자는 스프링 컨테이너가 넘겨준다.
ex. 메소드명(JoinPoint jp)

이때 Around 어드바이스만 다른 어드바이스와 약간 다른데, ProceedingJoinPoint 객체를 인자로 선언해야한다.(proceed() 등이 추가로 구현되어있음)

ProceedingJoinPoint 는 JoinPoint를 상속받는다.

profile
Journey for Backend Developer

0개의 댓글