AOP(Aspect Orientated Programming)
- 관점 중심 프로그래밍
- 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법
- 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 연결함으로써, 유지보수 혹은 재사용에 용이 하도록 프로그래밍 하는 것
AOP(Aspect Orientated Programming)
- 관점 중심 프로그래밍
- 흩어진 Aspect 를 모듈화 할 수 있는 프로그래밍 기법
- 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 연결함으로써, 유지 보수 혹은 재사용에 용이하도록 프로그래밍 하는 것
OOP에서는..
- 객체지향 원칙에 따라 관심사가 같은 데이터를 한곳에 모아 분리, 낮은 결합도를 갖게 해 독립적이고 유연한 모듈로 캡슐화를 함
- 이러한 과정 중 중복된 코드들이 많아지고 가독성, 확장성, 유지 보수성을 떨어뜨림
AOP에서는..
- 핵심기능과 공통기능을 분리시켜 핵심 로직에 영향을 끼치지 않게 공통기능을 끼워 넣는 개발 형태
- 무분별하게 중복되는 코드를 한 곳에 모아 공통기능을 한 곳에 보관함으로써 공통 기능 하나의 수정으로 모든 핵심기능들의 공통기능을 수정 할 수 있어 효율적인 유지보수 가능 및 재활용성이 극대화
AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)
- 관점 지향
: 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고
그 관점을 기준으로 각각 모듈화(어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것) 하겠다는 것
ex) 핵심적인 관점 : 핵심 비즈니스 로직
부가적인 관점 : 핵심로직을 실행하기 위해 행해지는 DB연결, 로깅, 파일 입출력 등..
- IoC가 낮은 결합도와 관련된 것이라면 AOP 는 높은 응집도와 관련되어 있다.
- Crosscutting Conerns (흩어진 관심사)
: 각 관점을 기준으로 로직을 모듈화 한다는 것은 부분적으로 나눠서 모듈화하겠다는 의미이다. 이때 소스코드 상에서 다른 부분에 계속 반복해서 쓰는 코드들이 있는데 이것이 Crosscutting Conerns이다.
=> 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지이다.
AOP주요개념
1) 조인포인트(JoinPoint)
- Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능
- 클라이언트가 호출하는 모든 비즈니스 메소드, 조인포인트 주에서 포인트컷 되기 때문에 포인트컷의 후보로 생각할 수 있다.
2) 포인트컷(PointCut)
- JoinPoint의 상세한 스펙을 정의한 것. 'A라는 메서드의 진입 시점에 호출할 것'과 같이 구체적으로 Advice가 실행될 지점을 정할 수 있다.
- 특정 조건에 의해 필터링된 조인포인트, 수많은 조인포인트 중에 특정 메소드에서만 횡단공통기능을 수행시키기 위해서 사용한다.
3) 어드바이스(Advice)
- 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체
- 횡단 관심에 해당하는 공통기능의 코드, 독립된 클래스의 메소드로 작성한다.
4) 타겟(Target)
- Aspect를 적용하는 곳 (클래스, 메서드..)
5) 위빙(Weaving)
- 포인트컷으로 지정한 핵심관심 메소드가 호출될 때, 어드바이스에 해당하는 횡단 관심 메소드가 삽입되는 과정을 의미한다. 이를 통해 비즈니스 메소드를 수정하지 않고도 횡단 관심에 해당하는 기능을 추가하거나 변경이 가능해진다.
6) 애스팩트(Aspect)
- 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함
- 포인트컷과 어드바이스의 결합니다. 어떤 포인트컷 메소드에 대해 어떤 어드바이스 메소드를 실행할지 결정한다.
[참조]
https://hatreasuree.tistory.com/10
https://engkimbs.tistory.com/746
https://sjh836.tistory.com/157
https://heidish.tistory.com/79?category=889082
https://heidish.tistory.com/70
'차근차근 > Spring' 카테고리의 다른 글
2.용어정리(5)-싱글톤패턴 (0) | 2021.12.09 |
---|---|
2.용어정리(4)-ViewResolver,prefix,suffix (0) | 2021.12.09 |
2.용어정리(1)-Model1,Model2,SpringMVC,POJO (0) | 2021.12.08 |
1.스프링의 구조 (0) | 2021.12.08 |
mybatis-spring SqlSessionTemplate Public Methods (0) | 2021.12.07 |