AOP는 관점 지향 프로그래밍이라 불리우는 프로그래밍 기법중 하나이며,
그 중 OOP(객체 지향 프로그래밍)와 비교되곤하는데, AOP는 OOP의 한계와 단점을 보완하여 좀 더 효율적인 개발을 하기위한 개념이다.
OOP를 통해 지금까지 객체를 재사용함으로써 개발자들은 반복되는 코드의 양을 굉장히 많이 줄일수가 있었지만 권한 체크, 인증, 예외 처리 등등 어쩔수없이 반복되는 코드들의 반복은 해결하기 힘들었다.
이러한 점을 해결하기위해 AOP에서 중요하게 생각하는 취지는 우선적으로 관심사 분리인데 말 그대로 각 역할의 분리라는 개념이다 흩어진 관심사를 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 관심사 분리에 의미이다.
OOP가 비지니스 로직을 모듈화 했다면 AOP는 비지니스 로직을 포함한 기능을 공통 모듈로 구분하여 분리하는데 이로인해 우리들은 필요한 물건들을 적재적소하여 관리라는 개념을 좀 더 명확하게 함!
↓
우리들은 프로젝트를 진행할때 분리라는 개념을 머리로는 이해하고있지만 막상 개발을 시작하며 코딩할때에는 신경을 쓰지못하여 여기저기 흩어진코드, 얽힌 구조, 비효율적이게 중복되는 코드들을 볼수 있었다.
AOP라는 명확한 개념을 각인하고 개발을 시작하고 가시적이게 구조를 짜기시작했을때는 내 파트가 아닌 다른 기능에도 구분점이 생겼고, 협업을 할때에 다른 기능간에 간섭이없어 편하게 쭉쭉 자기일에만 집중할수있었던거같다 그리고 수정이나 기능에 보완점을 추가할때 부담이 가지않게 바로바로 코드를 작성할수있어서 적응과 속도적인 측면에서 상향된 효과를 봤다.
개발자도 사람이라 기계적으로 일할수없음에 어느정도 틀을 잡고 작업을 하는게 효율성과 안정성을 높일수 있다는걸 깨달았다.
내가 했었던 개발과 프로젝트를 진행할 때 필수적으로 권한, 인증, 밸리데이션 등을 메소드에 추가하거나 프로세스에 추가하여 개발에 30% 이상이 이 과정을 포함하고 진행한다,
또한 타 기능에 간섭을 생각하여 개발하다 보니 원계획과는 틀어지는 상황이 있으며
개발자의 업무에 고려해야 할 점도 늘고, 스트레스 또한 불필요하게 증대되고 있다.
이 부분은 불안함이 있어서도 있겠지만 명확하게 기능의 구분 점이 없이 진행되어있는 코드들에 문제점이라 생각한다. 계속되는 상황에 중복코드, 중복기능, 기능의 무게 증가 등 여러 안 좋은 상황으로 이어지는 중이지만
AOP개념을 각인하고 진행한다면 좀 더 나은 개발을 시작할 수 있을 거 같습니다.