차근차근/Spring

2.용어정리(3)-AOP

예쁜꽃이피었으면 2021. 12. 8. 17:19
AOP(Aspect Orientated Programming)
- 관점 중심 프로그래밍
- 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법
- 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 연결함으로써, 유지보수 혹은 재사용에 용이 하도록 프로그래밍 하는 것
더보기

AOP(Aspect Orientated Programming)

  • 관점 중심 프로그래밍
  • 흩어진 Aspect 를 모듈화 할 수 있는 프로그래밍 기법
  • 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 연결함으로써, 유지 보수 혹은 재사용에 용이하도록 프로그래밍 하는 것

OOP에서는..

  • 객체지향 원칙에 따라 관심사가 같은 데이터를 한곳에 모아 분리, 낮은 결합도를 갖게 해 독립적이고 유연한 모듈로 캡슐화를 함
  • 이러한 과정 중 중복된 코드들이 많아지고 가독성, 확장성, 유지 보수성을 떨어뜨림

AOP에서는..

  • 핵심기능과 공통기능을 분리시켜 핵심 로직에 영향을 끼치지 않게 공통기능을 끼워 넣는 개발 형태
  • 무분별하게 중복되는 코드를 한 곳에 모아 공통기능을 한 곳에 보관함으로써 공통 기능 하나의 수정으로 모든 핵심기능들의 공통기능을 수정 할 수 있어 효율적인 유지보수 가능 및 재활용성이 극대화

AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)

- 관점 지향

: 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고

관점을 기준으로 각각 모듈화(어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것) 하겠다는 것

ex) 핵심적인 관점 : 핵심 비즈니스 로직

     부가적인 관점 : 핵심로직을 실행하기 위해 행해지는 DB연결, 로깅, 파일 입출력 등..

- IoC가 낮은 결합도와 관련된 것이라면 AOP 는 높은 응집도와 관련되어 있다.

- Crosscutting Conerns (흩어진 관심사)

: 각 관점을 기준으로 로직을 모듈화 한다는 것은 부분적으로 나눠서 모듈화하겠다는 의미이다. 이때 소스코드 상에서 다른 부분에 계속 반복해서 쓰는 코드들이 있는데 이것이 Crosscutting Conerns이다.

https://engkimbs.tistory.com/746
https://sjh836.tistory.com/157

=> 흩어진 관심사를 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

 

 

반응형