OOP를 더욱 빛나게 해주는, AOP

    AOP(관점지향프로그래밍, Aspect Oriented Programming)는 스프링 프레임워크(Spring Framework)을 써야만 되는 이유중 하나로, 대규모 프로그래밍을 매우 강력하게 만들어 줍니다. 관점지향 프로그램을 이해하기에 앞서 우리는 OOP(객체지향 프로그래밍, Object Oriented Programming)에 대해서 먼저 선 이해를 해야 합니다.


    프로그램은 소프트웨어 위기를 겪게 되면서, 패러다임이 유지보수를 편하게 할 수 있는 쪽으로 전환을 시작하게 됩니다. 그러면서 객체지향 프로그램이 나오게 됩니다. 즉 소스가 소스끼리 얽히고 설키는 것이 아니라 소스 하나하나를 재활용할 수 있게 만들어서 조립하는 방식으로 만드는 것이죠.


    대표적인 언어가 자바(Java) 입니다. 하지만 일반적으로 웹프로젝트를 해보셨다면, 전혀 객체지향적이지 않다는 사실을 알겁니다. 그리고, 반복적인 코드를 계속 써야 한다는 사실도 알게 될 것입니다. 특히 Log나 세션 같은 처리를 할 때는 모든 클래스에 다 부착이 됩니다.


    참 비효율적인 모습이며, 이런 것들로 인해서 객체 지향이 불가능해 지기도 합니다. 매번 호출하는 로그와 세션들을 뺄 수 없을까? 라는 생각을 갖게 되면서 나오는 것이 바로 관점 지향이 되는 것입니다. 즉, 현재 객체지향이 하나 하나 클래스들로 구성이 되어 있다고 한다면 관점 지향에서 바라보는 것은 이 모든 클래스를 관통하는 공통적인 놈을 밖으로 빼서 컴파일 할때 불러 들이는 역할을 수행하자는 것입니다.



    OOP의 한계를 극복하기 위한 패러다임, AOP의 개요


    AOP(Aspect Oriented Programming)의 개념

    - 요구사항에 대해 핵심 관심사항과 횡단 관심사항으로 분할, 개발, 통합하여 모듈화를 극대화하는 프로그래밍 기법

    - 핵심 관심사(Core Concerns)에 대한 관점과 횡단 관심사(Cross-cutting Concerns)에 대한 관점들로 프로그램을 분해해 Weaving 을 통해 프로그램을 구현하는 기법

    - 횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임 (위키피디아)



    AOP의 특징

    • 단순/집중 :  개발절차 단순화 및 개발자에게는 비즈니스 기능에 대한 집중 가능
    • 비캡슐화 : 핵심 비즈니스 영역보다는 주변 업무 중심 공통 모듈에 해당
    • Aspect 이용 : 독립된 Aspect 단위변경을 통해 전체 응용시스템 변경 용이
    • OOP 기반 : OOP 사상을 기본으로 한 cross cut aspect 프로그래밍

    OOP 기반이 이해가 안되실 수 있습니다. AOP는 OOP를 뛰어넘는 사상이 아닙니다. AOP는 OOP를 보다 더 OOP답게 만들어주는 사상이기 때문에 OOP 기반이 되는 것이죠.



    AOP의 동작원리 및 구성요소


    AOP의 동작원리


    - 핵심관심과 횡단관심을 분리하고 서로 간에 위빙(weaving)을 통해 구현



    AOP의 구성요소


    • 핵심관심 : 시스템의 핵심 가치와 목적이 그대로 드러난 관심 영역
    • 횡단관심 : 쉽게 분리된 모듈로 작성하기 힘든 요구사항, 공토모듈
    • Joint Point : 횡단 관심의 기능이 삽입되어 실행될 수 있는 특정 위치
    • Point-Cut : 어느 Joint Point를 사용할 것인지를 결정하는 선택 기능
    • Advice : Joint Point에 삽입되어 동작되는 모듈
    • Aspect : Point-cut 과 Advice를 합쳐 놓은 코드
    • Weaving : Joint Point 에 해당하는 Advice를 삽입하는 과정



    AOP의 실행 절차


    실행 절차도


    실행 절차

    순서

    내용

    1

    - 클라이언트는 직접 타겟 객체를 참조하지 않고 프락시를 통해서 호출

    2

    - 프락시는 클라이언트의 호출을 받으면 3번 처럼 Aspect 모듈을 호출

    3

    - Cross Concerns에서는 타겟 객체의 메소드를 호출전에 advice의 내용을 수행

    4

    - 타겟 객체의 전에 Aspect 모듈을 호출해서 마무리 작업을 할 수 있고 그 후 최종적으로 클라이언트에 반환값을 넘겨준다



    OOP와  OOP + AOP의 차이






    참고자료

    https://www.slideshare.net/koneru9999/aspect-oriented-programing-introduction

    https://1netwiki.com/wiki/10

    위키피디아 - 관점 지향 프로그래밍


    댓글

    Designed by JB FACTORY