본문 바로가기

Java

AOP 란? 스프링 xml에서 <aop:config> 태그 용도

- AOP란? -

AOP는 Aspect-Oriented Programming를 줄인 말이다.
관점 지향 프로그래밍 정도로 번역한다.
OOP(Object-Oriented Programming)가
객체를 중심 요소로 놓고 개발해 보자는 자세라면,
AOP는 관점을 중심 요소로 두어 보자는 의미다.


관점을 중심으로 보자는 말은 무슨 뜻일까?
실생활에서 이런 말을 가끔 쓴다.
'소비자의 관점에서 생각해 보자.'
'학생의 관점에서 생각해 보자.'
똑같은 상황을 두고 다른 사람 입장에서 생각해 보자는 의미다.
무언가를 먹을 때도, 
소비자의 관점에서는 맛에 관심이 있을 것이고,
사업가의 입장에서는 얼마나 잘 팔리는지에 관심이 있을 것이고,
질병관리청의 입장에서는 위생에 관심이 있을 것이다.
이처럼 관점을 다르게 하면 관심 대상도 바뀐다.

프로그래밍도 마찬가지다.
이런 관점에서 보자면 A라는 기능에 관심이 있을 것이고,
저런 관점에서 보자면 B라는 기능에 관심이 있을 것이다.
프로그래밍을 앞에서 뒤로, 위에서 아래로 보는 것이 아니라
전체를 횡단하면서 기능을 중심으로 보자는 뜻이다.

예를 들어 보자.
A라는 클래스에서는 1, 2, 3번 기능을 사용하고 있고,
B라는 클래스에서는 1, 2번 기능을 사용하고 있고,
C라는 클래스에서는 1, 3, 4번 기능을 사용하고 있다.

이 프로그래밍을 기능 중심으로 다시 생각해 보자.
1번 기능은 A, B, C에서 사용하고 있고,
2번 기능은 A, B에서 사용하고,
3번 기능은 A, C에서 사용하고 있고,
4번 기능은 C에서 사용하고 있다.
이렇게 같은 프로그램이라도 관점을 다르게 해 가면서 생각해볼 수 있다.

만약에 1번 기능을 조금 수정해야 하는 상황이 생겼다.
그러면 A, B, C 클래스를 모두 찾아가서 일일이 수정해야 한다.
매우 번거로운 작업이고 반복적인 작업이다.
규모가 클수록 유지보수도 어려워진다.
기능 단위로 관리할 수 있다면 편하지 않을까?


- 스프링에서 AOP -

스프링에서는 이 AOP 개발 방법론을 어떻게 적용하고 있을까.
프록시라는 디자인 패턴을 활용한다.
어떤 기능을 불러다 쓰는 클래스를 클라이언트라고 해 보자.
클라이언트는 인터페이스만 불러다 쓴다.
껍데기만 있고 안은 비어 있는 상태다.
내부를 구현한 클래스는 나중에 넣어준다.
이렇게 하면 장점이 있다.
나중에 내부 구현을 다르게 하는 클래스로 바꾸어 넣기가 편하다.
왜냐하면 실제 코드는 건드리지 않아도 되기 때문이다.
어떤 구현체를 넣어줄지만 바꾸면 된다.
개방 폐쇄 원칙에 부합한다.

xml에서 <aop:config> 태그로 관리한다.
포인트컷, 조인 포인트, 어드바이스 등 여러 가지 옵션과 개념이 있다.
어떤 클래스들 또는 메소드들을 실행할 때 어떤 기능을 수행할지 설정하는 파일이다.


-220330


참고 자료 
https://devlog-wjdrbs96.tistory.com/398
https://heidish.tistory.com/75

반응형