728x90
AOP는 Aspect Oriented Programming(관점 지향 프로그래밍)의 약어로 객체지향 프로그래밍을 더욱 발전시키기 위한 개념이다. 관점 지향은 로직을 기준으로 핵짐적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것이다.
예로, 핵심 관점은 적용하고자 하는 핵심 비즈니스 로직이다. 부가적인 관점은 핵심 로직을 실행하기 위해 행해지는 로깅, 보안, 트랜잭션 등을 예로 들 수 있다.
AOP에서 각 관점을 기준으로 로직을 모듈화 하는 것은 코드들을 부분적으로 나누어 모듈화 하겠다는 의미이다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는데 이것이 횡단 관심(Crosscut Concerns)이라 한다.
- Core Concern(핵심 관심) : 각 서비스의 핵심 비즈니스 로직 ex). 계좌이체, 입출금, 이자계산
- Crosscut Concern(흩어진 관심 / 횡단 관심) : 공통 모듈 ex). 로깅, 보안, 트랜잭션
객체지향 프로그래밍에서는 계좌이체, 대출승인, 이자계산 3가지의 비즈니스 동작이 각각의 OOP로 프로그래밍된 것을 볼 수 있다. 반면, AOP는 3가지 모두가 공통적으로 갖는 로직이 있는 것을 확인할 수 있다. 이를, 각각의 OOP 소스코드에서 제거한 후, 외부로 빼내어 하나의 공통 모듈로 만들 수 있는데, 이러한 관점에서 AOP는 OOP를 더 발전시킨 기법이라 볼 수 있다.
AOP개념을 도입하여 얻는 장점
- 각 비즈니스 로직을 구현하는 개발자는 하나의 비즈니스 코드에만 집중이 가능하기에 코드가 간결해지고 유지보수가 쉬워진다.
- 재활용성이 OOP보다 더욱 높아진다.
AOP의 구성 요소
- Aspect : Crosscut Concern을 모듈화 한 것.
- Target : Aspect를 적용하는 곳
- Advice : 실질적으로 어떤 일을 해야 할 지에 대한 것
- JointPoint : Advice가 적용될 위치
- PointCut : JointPoint의 상세한 스펙을 정의한 것.
728x90
'TIL' 카테고리의 다른 글
What is 코딩 컨벤션? (0) | 2022.06.29 |
---|---|
지속적 통합(Continuous Integration) / 지속적 배포(Continuous Deployment) (0) | 2022.06.26 |
Spring Security(스프링 시큐리티)를 사용한 로그인 (0) | 2022.06.16 |
22.06.11 TIL (0) | 2022.06.11 |
절차지향 프로그래밍 (0) | 2022.06.10 |