AOP: Aspect Oriented Programming → 관점 지향 프로그래밍
관점 지향 프로그래밍이라는게 뭘까? 여기서 말하는 관점은, 실 비즈니스 로직 외의 부가적인 기능을 담당하는 개념이라고 보면 될 것 같다. Logging, Transaction, Security .. 등등 말이다.
🧐 그럼 이걸 왜 중점적으로 바라보는가?
OOP는 객체 중심 언어이다. 이는 객체를 활용해서 모듈화를 진행하겠다는 취지인데, 그럼 AOP 도 뭔가 이러한 모듈화를 진행하겠다는 뉘앙스 아닐까? 이름을 비슷하게 지었으면 그 의도가 비슷하니까 아닐까? 하는 합리적인 의심이 든다.
🧐 그럼 이걸 왜 모듈화 할까?
흔히 사용하는 비율로는 메서드 실행시간이 있다. 예를 들어 어떤 팀원이 A 서비스의 메서드 실행시간이 알고 싶다고 해서 기능을 추가해줬다고 하자. 근데 이 팀원이 마음에 쏙 든다고 유저 서비스 전반에 대한 비즈니스 로직에도 적용하고 싶다고 말한다. 한 20개 정도의 메서드가 있었다면, 좀 노가다 하면 가능하겠다 싶어서 그렇게 적용하고 팀원한테 보여줬다. 이 팀원이 월급 줄 것도 아니면서 이번엔 다른 서비스의 일부 메서드들도 그렇게 적용해달라고 한다. 근데 그게 200개가 넘는다고 하자. 그럼 이제 유혈사태가 일어나게 된다.
이런 것처럼 다른 서비스 레이어에서 특정 부가 서비스에 대한 수요가 있을 수 있다. 이렇게 겹치는 부가 서비스들을 우리는 횡단 관심사라고 부른다.
이런 것들을 매번 저 메서드가 있는 곳으로 가서 저런 기능들을 추가해야하면 얼마나 귀찮고 유지보수가 힘들어지겠는가? 비즈니스 로직의 부가 기능 수요가 늘어날 수록 중복은 커지고 개발자는 허리가 휠 것이다.
이러한 관심사들을 한 곳에 모아서 관리할 수 있도록 디자인 하는 것을 AOP 라고 한다.
즉, 핵심적인 비즈니스 로직으로부터 횡단 관심사를 분리하여 한 곳에서 다룰 수 있도록 하는 것에 목적을 둔 프로그래밍 기법이다.