AOP
- Aspect-Oriented Programming, 관점 지향 프로그래밍
- 관점 = 관심사 = 개발을 하는 데 있어서 필요한 고민거리나 염두에 두어야 하는 작업
- 어플리케이션의 비즈니스를 수행하는 핵심적인 로직은 아니지만, 정상적인 동작을 위해서 고려하야 하는 내용들
- 관심사의 분리 : 관심사에 대한 코드를 매번 비즈니스 로직을 구현할 때 마다 반영하지 않고, 분리하여 개발한다.
- 개발자가 염두해야 하는 내용들을 관심사로 분리하여 만들어 놓고, 핵심 비즈니스 로직에는 해당하는 비즈니스 로직만 작성되도록 함 (관심사 + 비즈니스 => AOP => 관심사 / 비즈니스)
- 관심사는 핵심 로직을 수행하기 위한 사전 로직이나 사후 로직
* 관심사의 예시
- 나눗셈에서 나누는 수가 0인지 체크
- 비즈니스 로직의 코드와 관심사로 분리해 놓았던 코드를 컴파일or실행 시점에 결합시킴
- 실제 실행은 결합된 상태의 코드가 실행되므로, 개발자는 비즈니스 로직에 집중하여 코드를 작성하고, 어떤 관심사에 결합실킬지 확인하여 설정
- AOP를 적용하는 것은 기존의 코드를 수정하지 않고도 원하는 관심사를 엮을 수 있다는 것
- Aspect, Advice : Aspect는 관심사라는 추상적인 개념이며 Advice는 Aspect를 구현한 코드임
- Target : 순수한 비즈니스 로직
- JoinPoint : Target객체가 가진 여러개의 메서드
- PointCut : Target에는 여러개의 메서드(JoinPoint)가 있기 때문에 어떤 메서드와 결합할 것인지 결정하는 것, 관심사와 비즈니스 로직이 결합되는 지점을 결정하는 것
- Proxy : Target을 전체적으로 감싸는 존재, 내부적으로 Target을 호출할 때, 중간에 필요한 관심사를 거쳐서 Target을 호출하도록 자동/수동으로 설정됨, 스프링의 AOP기능을 이용하여 자동으로 생성되는 auto-proxy기능을 이용, 관심사와 메서드가 결합된 상태로 메서드를 호출하면 자동으로 관심사가 결합된 상태로 동작
=> 외부에서의 호출은 Proxy객체를 통해 Target객체의 JoinPoint메서드를 호출하는 방식임
Advice는 동작 위치에 따라 구분됨
- Before Advice : Target의 JoinPoint실행 전, 코드의 실행 자체에는 관여 못함
- After Advice : 정상or예외발생 후 구분 없이 동작
- After Returning Advice : 모든 실행이 정상완료 후에 동작
- Afte Throwing Advice : 예외 발생 후에 동작
- Around Advice : 메서드 실행 자체를 제어, 직접 대상 메서드를 호출하고 결과나 예외를 처리
- Target에 어떤 Advice를 적용할 것인지 XMl을 이용한 설정 or Annotation으로 설정이 가능
- Target의 JoinPoint는 PointCut에 의해 Advice와 결합하여 원래 자신에게는 없는 기능을 가지게 됨
PointCut의 설정
- execution(@execution) : 메서드를 기준으로 설정
- within(@within) : 특정 타입(class)를 기준으로 설정
- this : 주어진 인터페이스를 구현한 객체를 대상으로 설정
- args(@args) : 특정 파라미터를 가지는 대상들만을 설정
- @annotation : 특정 어노테이션이 적용된 대상들만을 설정
'WEB > spring' 카테고리의 다른 글
Maven 프로젝트 생성 (0) | 2020.04.28 |
---|---|
AOP예시 (0) | 2020.03.21 |
REST 예시 (0) | 2020.02.27 |
HikariCP 커넥션 풀 (0) | 2019.12.30 |
이클립스 프로젝트 JDBC 연결 (0) | 2019.12.30 |