본문 바로가기
TechNote/소프트웨어 공학(SW)

013. 관점 지향 프로그래밍 (Aspect Oriented Programming)

by 도지웅 2022. 10. 1.
반응형

관점 지향 프로그램(Aspect Oriented Programming, AOP)의 개요

가. 관점 지향 프로그램의 정의

  • 핵심 관심사(Core Concerns)에 대한 관점과 횡단 관심사(Cross-cutting Concerns)에 대한 관점들로 프로그램을 분해해 객체지향 방식(OOP)에서 추구하는 모듈을 효과적으로 지원하도록 하는 프로그래밍 기법.

나 관점 지향 프로그램의 특징

특징 내용
모듈화
  •  횡단 관심사를 포괄적이고 체계적으로 모듈화함으로 혁신적인 횡단 관심사의 구현 방법을 도입함
캡슐화
  •  AOP에서 횡단 관심사는 애스펙트라는 새로운 단위로 캡슐화함으로 모듈화가 이루어짐
단순화
  •  핵심 모듈은 더 이상 횡단 관심사의 모듈을 직접 포함하지 않으며 횡단 관심사의 모든 복잡성은 애스펙트로 분리
융합화
  •  AOP는 소프트웨어시스템을 상호독립적인 관심사의 합성으로 간주하여 소프트웨어 시스템을 제작하는 새로운 방법론의 시작을 열게 됨

 

2. 관점 지향 프로그램, AOP 동작원리 및 구성요소

가. Aspect Oriented Programming의 동작원리

관점 OOP - 관심의 산재 AOP - 관심의 모듈화  
동작
원리
원리- 해당 시스템의 가치와 목적이 그대로 드러나는 관점
- 기존의 객체지향 분석설계를 통해 쉽게 모듈화/추상화가 가능
- 대부분의 Business Logic 해당.
- 핵심관점의 구현에 추가되는 부가적인 관점
- 모듈화나 추상화가 어려운 관점
- 모듈로 만드는 것이 어려운 것이 아니라 모듈화해서 핵심관점과의 연결이 어려움
- Logging, Security, Transaction, Error Handle..
동작

나. 관점 지향 프로그램 구성요소

구성요소 설명
구성도



* Target 주가 되는 비즈니스 로직을 구현하고 있는 클래스
Joint Point - Target 즉, 주가 되는 비즈니스 로직을 가지는 인스턴스에 이벤트가 발생하는 시점
- 예를 들면 인스턴스가 생성되거나, 인스턴스의 특정 메소드가 호출되는 시점 또는 Exception이 발생하는 시점
Advice - Target의 주된 비즈니스 로직에 추가로 실행되어질 로직이 구현된 부분
Point Cut - Target의 Joint Point에 Advice를 결합하기 위해서 필요한 패턴을 말함. 결합 규칙
Weaving - Target에 Advice 기능을 결합시키는 것, 핵심로직 코드에 공통 코드가 삽입되는 행위를 Weaving
Aspect - Target의 Joint Point에 Advice 기능이 Weaving 되어 Target에 주된 비즈니스로직에 Advice 기능을 지원할 수 있도록 하는 완성된 클래스. Advice + Point Cut
  • AOP는 기능을 핵심 비즈니스 로직과 공통 모듈로 구분하고, 핵심 로직에 영향을 미치지 않고 필요한 시점에 공통 모듈을 효과적으로 삽입(적용) 하는 개발 방법 구조임.

3. 관점 지향 프로그램(AOP)의 활용 영역 및 연구과제

가. 관점 지향 프로그램 활용 영역

영역 처리 내용
로깅과 모니터링 - 시스템 개발 및 운영시점에 모든 메소드의 시작과 끝에 디버깅이 가능하도록 로깅 메시지를 추가해야 하는 경우 적용(DEBUG 레벨)
- 메소드를 호출할 때 전달되는 모든 인자를 로깅 메시지로 출력(DEBUG 레벨)
- 데이터베이스와 인터페이스에서 500ms 이상 소요되는 메소드에 대해 로깅 메시지 출력(WARN레벨)
보안 - Application에 추가된 사용자를 삭제하는 기능은 ‘admin’권한을 가진 관리자만 처리시점
트랜잭션 처리 - 트랜잭션의 경우 비즈니스 로직의 전후에 설정 처리하여 정합성 유지 시점에 적용
기타 - 로그작성(logging)과 보안/인증(security/authentication), 트랜잭션(transaction), 리소스풀링(resource pooling), 에러 검사(error checking), 정책 적용(policy enforcement), 멀티쓰레드 안전관리(multithread safety), 데이터 퍼시스턴스(data persistence) 등의 적용
  • OP는 객체지향 프로그래밍(OOP)을 보완해 더욱 모듈화를 효과적으로 지원하기 위한 프로그램으로써 다양한 활용이 가능함.

나. 연구과제

과제 연구 사항
표준의 부재 - AOP는 현재 정해진 표준이 없으며 표준을 정할 기구나 조직이 없음.
- AOP 연구자들과 툴 개발팀, 개발자들 사이에 많은 의견을 모으고 표준을 위한 노력이 요구되며, 현재 AOP는 발전하고 진화해야 하는 단계에 있기 때문에 다양한 창조적인 시도들이 가능한 현 상태가 어느 정도 더 유지되어야 할 것임.
학습이 어려움 - AOP를 배우는 것은 기존 OOP에 대한 완벽한 지식을 바탕으로 한다고 해도 사실 상당한 발상의 전환이 필요하고 그 개념이 난해한 부분이 많이 존재.
- 더 많은 개발자들과 이론가들이 충분히 그 기술과 개념에 익숙해져야 할 시간이 필요할 것이고, 또 AOP 기반의 애플리케이션을 설계하고 구현하는데 필요한 다양한 방법론과 설계 기술들이 등장하게 될 것.
OOP와의 충돌 - AOP는 OOP의 캡슐화를 깨뜨리고 객체의 내부에 직접적인 영향을 줄 수 있기 때문에 객체지향적인 장점을 손상하고 시스템을 복잡하게 만듦.
- 결국 OOP의 한계와 약점이 있는 곳에서 AOP가 출발하기 때문에 이것을 노골적으로 드러내는 AOP가 OOP와 충돌하는 것은 어쩔 수 없는 현실임.

 

반응형

댓글