티스토리 뷰
AOP에 관해 간단히 알아 볼 일이 생겨서, 이것저것 조사해 보다가
개인적으로 정리해보았다.
AOP란
- Aspect-Oriented Programming: 관점 지향 프로그래밍
- 특정 기능이 있는 클래스 안에는 본질적인(핵심적인) 처리만 기술 하고, 본질적이지 않은(추가 기능, 부가 기능) 기능들을 따로 기술
- 구체적으로 로그 출력, 예외 처리 등 공통화할 수 있는 처리를 Aspect라는 하나의 단위로 모아 어떠한 객체가 원래 해야 할 일만 기술할 수 있도록 만드는 기술
AOP의 필요성
- 기존의 객체 지향 프로그래밍(OOP: Object Oriented Programming)으로는 모듈화 및 유지보수가 쉽지 않음. 구현된 모듈이 다른 핵심 관심을 구현한 모듈과 긴밀히 결합되어 있기 때문
- 실제로 모듈화가 잘 된 애플리케이션 클래스를 보더라도 핵심기능을 위한 코드보다 다양한 부가적인 기능과 처리를 위한 부분(Figure 1.)의 양이 더 많아지기 마련. 이는 코드의 중복, 모듈화, 유지보수, 코드의 유연성 저하 등의 문제점을 야기
AOP의 구성요소 & 동작
- AOP의 구성요소 & 동작
- Join point: 횡단 관심 모듈의 기능이 삽입되어 동작할 수 있는 실행 가능한 특정 위치(ex. 메소드 호출 또는 리턴 되는 시점, 인스턴스 생성 시점, 예외 핸들러가 동작하는 시점 등)
- Point cut: 어떤 클래스의 어느 join point를 사용할 것인지를 결정하는 선택 기능
- Advice: 각 join point에 삽입되어져 동작할 수 있는 코드
- Interceptor: DispatcherServlet이 controller를 호출하기 전, 후에 요청과 응답을 가로채는 advice(ex. 로그인 여부를 판단하여 로그인 시 요청페이지로 이동, 비 로그인 시 메인 페이지로 이동)
- Weaving / cross cutting: point cut에 의해서 결정된 join point에 지정된 advice를 삽입하는 과정. weaving은 AOP가 기존 핵심 관심 모듈의 코드에 전혀 영향을 주지 않으면서, 필요한 횡단 관심 기능을 추가할 수 있게 해주는 핵심적인 처리 과정. 다른 표현으로는 crosscutting
- Introduction: 정적인 방식의 AOP기술. 동적인 AOP방식(join point에 advice 적용)과는 달리 기존의 클래스와 인터페이스에 필요한 메소드나 필드를 추가하여 사용
- Aspect: point cut(어디에서)과 advice(무엇을 할 것인지)를 합쳐놓은 것.
- AOP가 핵심 관심 모듈의 코드를 직접 건드리지 않고 필요한 기능이 작동하도록 하는 데는 weaving 또는 crosscutting이라고 불리는 특수한 작업이 필요(Figure 2.). 핵심 관심 모듈이 자신이 필요한 횡단 관심 모듈을 찾아 사용하는 대신에 AOP에서는 weaving 작업을 통해 핵심 관심 모듈의 사이사이에 필요한 횡단 관심 코드가 동작 하도록 함. 이를 통해 AOP는 기존의 OOP로 작성된 코드들을 수정하지 않고도 필요한 횡단 관심 기능을 효과적으로 적용 가능
AOP의 문제점
- 표준의 부재: AOP는 현재 정해진 표준이 없으며 표준을 정할 기구나 조직도 없음. 용어부터 시작해서 문법, 구현 방법에 이르기까지 AOP와 관련해서 통일된 것이 없다. 따라서 AOP 툴을 만드는 팀과 업체에 따라서 그 내용과 형식이 상당히 차이가 나는 경우도 있다.
- OOP와의 충돌: AOP의 비판자들 중 상당수는 AOP가 OOP의 정신을 훼손하고 OOP의 중요 원칙을 깨뜨린다고 한다. 이 부분은 아직도 많은 논쟁이 진행중인 부분이다. 대표적으로 AOP는 OOP의 캡슐화를 깨뜨리고 객체의 내부에 직접적인 영향을 줄 수 있기 때문에 객체지향적인 장점을 손상하고 시스템을 복잡하게 만든다고 한다. 기존의 클래스와 코드의 어떤 부분에라도 영향을 줄 수 있다는 면에서 일견 일리가 있는 주장이다. 하지만 AOP가 없이 그러한 횡단관심 기능을 핵심 모듈 내부에 직접 작성해서 쓰는 것은 과연 객체지향의 원칙에 맞는 일인가? 그게 아니라면 현실적으로 객체지향적인 방법으로 그 부분을 해결할 수 있는 효과적인 방법을 제시해야 할 것이다. 결국 OOP의 한계와 약점이 있는 곳에서 AOP가 출발하기 때문에 이것을 노골적으로 드러내는 AOP가 OOP와 충돌하는 것은 어쩔 수 없는 현실이다.
참고: http://www.zdnet.co.kr/news/news_view.asp?artice_id=00000039147106&type=det&re=
'etc.' 카테고리의 다른 글
TDD란 - 테스트 주도 개발 (0) | 2016.10.19 |
---|
댓글
최근에 올라온 글
최근에 달린 댓글
TAG
- return
- CDN
- mouseout
- Each
- ssl
- opener
- c:foreach
- multipart/form-data
- fmt
- excel file download
- bootstrap
- httpurlconnection
- poi
- mouseleave
- Spring
- trim
- mouseover
- InputStream
- jquery filedownload
- OutputStream
- ColorPicker
- 프로시저
- popup
- 인코딩
- jqGrid
- mouseenter
- setInterval
- JQuery
- mybatis
- 제이쿼리
- Total
- Today
- Yesterday