너와 나의 프로그래밍
Spring Framework - Spring AOP의 개념과 용어 본문
[Spring Framework] Spring AOP의 개념과 용어
Chpater1. AOP(Aspect Oriented Programming)의 개념
Spring Framework의 비지니스 컴포넌트 개발에서 가장 중요한 '낮은 결합도와 높은 응집도' 개념중 AOP는 '높은 응집도'에 해당한다.(낮은 결합도 = IoC)
AOP는 비지니스 로직은 아니지만 비지니스 로직만큼 중요한 역할을 한다.(응...?)
하지만 비지니스 로직에 계속 이러한 부가적인 코드들을 추가하게 되면 비지니스 로직에 매번 반복적인 코드와 함께 코드 분석과 유지보수를 어렵하게 한다.
AOP는 이러한 부가적인 '공통 코드'들을 효율적으로 관리하는 데 주목한다.
AOP의 핵심 개념은 '관심 분리'에 있다. '관심'은 '횡단 관심'과 '핵심 관심'으로 나뉜다.
'횡단 관심'은 로깅이나 예외, 트랜잭션 처리 같은 코드같이 비지니스 컴포넌트에 공통적으로 추가되고 실행되어야 하는 코드들을 말한다.
'핵심 관심'은 기존 비지니스 로직을 말한다.
즉, AOP는 비지니스 로직에 반복적으로 부가적 기능을 사용하는 것들이다.
쉽게 말해서 비지니스 로직에 코드를 반복적으로 추가하는 것이 아니라 xml 파일이나 어노테이션(Annotation)을 주입해 한꺼번에 처리 할 수 있다.
더 쉽게 말해서 비지니스 로직을 실행하는 중간에 꼽사리를 낀다고 생각하면 될 것 같다.🤣🤣🤣🤣
chapter2. AOP 용어
- JoinPoint : 클라이언트가 호출하는 모든 비즈니스 메소드로서, 주로*Impl 클래스의 모든 메소드를 조인포인트(JoinPoint)라고 생각하면 된다.
- Pointcut : 수많은 비즈니스 메소드 중에서 원하는 특정 메소드에만 필터(포인트컷 표현식)을 적용해 공통 기능을 수행시킬 수 있다.
- Advice : 횡단 관심에 해당하는 공통 기능의 코드를 의미하며, 독립된 클래스의 메소드로 작성한다. 그리고 어드바이스로 구현된 메소드가 언제 동작할지 스프링 설정 .xml이나 어노테이션으로 지정할 수 있다.
- Weaving : 포인트컷으로 지정한 핵심 관심 메소드가 호출될 때, 어드바이스에 해당하는 횡단 관심 메소드가 삽입되는 과정. 위빙을 통해서 비즈니스 메소를 수정하지 않고도 횡단 관ㅅ미에 해당하는 기능을 추가하거나 변경할 수 있다.
- Aspect : AOP의 핵심. 포인트컷과 어드바이스의 결합으로서, 어떤 포인트컷 메소드에 어떤 어드바이스 메소드를 실행할 지 결정한다.
즉, AOP는
JoinPoint를 실행 → 포인트컷으로 지정한 메소드가 호출되는 순간 어드바이스 메소드가 실행
어드바이스 메소드 삽입→ Aspect 설정에 따라 위빙 처리가 된다.
chapter3. Advice 동작 시점
- Before Advice : 포인트컷으로 지정된 메소드를 호출 시 메소드가 실행되기 전에 처리할 내용을 기술하기 위해 사용
- After Returning Advice : 포인트컷으로 지정된 메소드가 정상적으로 실행되고 나서, 메소드 수행 결과로 생성된 데이터를 리턴하는 시점에 동작. 비지니스 메소드의 결과로 얻은 결과 데이터를 이용하여 사후 로직을 추가할 때 사용된다.
- After Throwing Advice : 포인트컷으로 지정한 메소드가 실행되다가 예외가 발생하는 시점에 동작. 예외 처리 어드바이스를 설정할 때 사용한다.
- After Advice : 예외 발생 여부에 상관없이 무조건 수행되는 어드바이스를 등록할 때 사용.
- Around Advice : 다른 Advice는 실행 전 후의 수행되는 처리를 위해서 설정했다면 Around Advice는 클라이언트의 메소드 호출을 가로챈 뒤 실행 전/후의 처리를 동시에 처리할 수 있다.
사실 글로 이해를 하는 것 보다는 역시 개발자라면 코드로 이해를 하는 것이 더 빠를거라고 생각한다.
(코드로 알아보는 AOP는 추후 작성 할 예정입니다...🙄🙄🙄)
참조 : 스프링 퀵 스타트
'Back-End > Spring Framework' 카테고리의 다른 글
Spring Framework - AOP JoinPoint와 Annotation (4) | 2020.08.10 |
---|---|
Spring Framework - AOP Element와 Advice (0) | 2020.08.05 |
Spring Framework - Annotation 기반 설정 - 2 (0) | 2020.07.12 |
Spring Framework - Annotation 기반 설정 - 1 (2) | 2020.07.11 |
Spring Framework - 의존성 주입 방식 (0) | 2020.07.08 |