반응형
관점 지향 프로그램(Aspect Oriented Programming, AOP)의 개요
가. 관점 지향 프로그램의 정의
- 핵심 관심사(Core Concerns)에 대한 관점과 횡단 관심사(Cross-cutting Concerns)에 대한 관점들로 프로그램을 분해해 객체지향 방식(OOP)에서 추구하는 모듈을 효과적으로 지원하도록 하는 프로그래밍 기법.
나 관점 지향 프로그램의 특징
특징 | 내용 |
모듈화 |
|
캡슐화 |
|
단순화 |
|
융합화 |
|
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와 충돌하는 것은 어쩔 수 없는 현실임. |
반응형
'TechNote > 소프트웨어 공학(SW)' 카테고리의 다른 글
015. 디자인 패턴과 아키텍처 스타일 비교 (0) | 2022.10.01 |
---|---|
014. 디자인 패턴 (0) | 2022.10.01 |
012. 객체 지향 (0) | 2022.10.01 |
011. 소프트웨어 역공학 (0) | 2022.10.01 |
010. 3R (Reverse Engineering, Re Engineering, Re Use) (0) | 2022.10.01 |
댓글