AOP란? (+인터셉터와 AOP의 차이점)

coding S's avatar
Apr 19, 2024
AOP란? (+인터셉터와 AOP의 차이점)

[ AOP란? ]

핵심 기능과 부가 기능을 분리해줌 (+유효성 검사에 유용) 프로그램의 여러 부분에서 공통으로 사용되는 기능들을 한 곳에 모아서 관리하는 것 공통 기능들은 그 기능을 필요로 하는 각 지점에 동일한 코드를 반복해서 작성해야 한다. 하지만 AOP를 사용하면, 이런 공통 기능들을 특별한 모듈로 분리하여 관리할 수 있다. 그 결과, 필요할 때마다 이 관점을 프로그램의 적절한 지점에 '삽입'함으로써, 코드의 중복을 줄이고 프로그램의 구조를 더 명확하게 만들 수 있다.
 

[ AOP 용어 정리 ]

1. Aspect 생성: 로깅 기능(Advice)을 포함하는 Aspect를 정의한다. (클래스 생성) 2. Advice 정의: 메서드 실행 전후에 로그를 남기는 코드를 작성한다. (수행할 메서드 생성) 3. Pointcut 설정: 로깅 기능을 적용할 메서드를 결정한다. 예를 들어, 모든 public 메서드에 로깅을 적용하려면 해당하는 패턴을 Pointcut에 지정. (깃발에 별칭주기) 4. Advice 적용: 설정한 Pointcut에 따라 메서드 실행 전후에 로그를 남기는 Advice가 실행된다. (PointCut(별칭) 적용)
Advice (어드바이스) 특정 조인 포인트(JoinPoint)에 적용할 작업이나 동작을 정의한 것. 즉, 포인트컷(Pointcut)에 의해 선택된 특정 지점에서 실제로 실행될 코드의 조각
 

[ 인터셉터와 AOP의 차이점 ]

인터셉트 - 메서드 실행 전에 실행 AOP - 리플렉션을 기반으로 함 (메서드 분석 가능 / 어노테이션으로 적용)
리플렉션을 사용하기 위해서는 프로그램의 '메인'을 제어할 수 있어야하는데, 우린 핵심 컴포넌트인 디스패처 서블릿을 제어 할 수가 없어서 리플렉션 적용을 할 수 없다... 이런 이유로 리플렉션 적용하고 싶으면 AOP 문법을 써! 하고 제공하는 것! -> 동적으로 메서드를 분석하고 조작하고 싶은 경우에 AOP를 사용 -> 리플렉션을 직접 적용하기 어려운 웹 애플리케이션 환경에서 AOP를 사용하는 것이 일반적
💡
* 복잡한 프로그램에서 공통 기능을 효율적으로 관리하고 싶다면 AOP 사용! * 간단하게 요청이나 응답을 처리하고 싶다면 (분석 안해도 되면) 인터셉트를 사용!
💡
AOP는 인터셉터랑 비슷하다. 그러나 다른 점 → JoinPoint (+어노테이션으로 적용시킴)
 

notion image
💡
여기 DTO가 있으면 분석할 것임
 

[ JoinPoint란? ]

* 프로그램 실행 중에 Aspect(관점)가 적용될 수 있는 특정 지점으로 프로그램의 어떤 지점에 Aspect를 적용할지 결정한다. * 메서드가 호출될 때, 객체가 생성되기 전이나 후, 예외가 발생했을 때 등 다양한 시점이 JoinPoint! * JoinPoint를 통해 특정 메서드 호출 전후, 객체 생성 전후 등 프로그램의 다양한 지점에 Aspect를 적용
 
Share article

codingb