본문 바로가기
BackEnd FrontEnd/Spring

AOP

by forkballpitch 2017. 9. 27.
728x90
728x90

AOP관점지향 프로그래밍으로서 관점지향과 횡단적 관심을 분리하는것

로깅기능,디비,트랜잭션,보안 등을 공통적으로 처리할 있는 기능을 제공

 

4) AOP

횡단 관심사와 이에 영향 받는 객체 결합도를 낮추는데 목적이 있다.

쉽게 말해 클래스들이 공통으로 갖는 기능이나 절차 등을 하나의 것으로 묶어 빼내어 별도로 관리하려는 목적.

 - 이러한 부가적인 업무의 예로 로그인(Login), 트랜잭션(Transaction), 보안(Security), 캐싱(Caching)과 같은 내부 처리(비지니스, Business) 작업이 있다.

스프링 프레임워크에서의 애스펙트(Aspect)란

 - 주업무가 아닌 업무.

 - 보조업무 : 로그, 트랜잭션, 보안처리.

스프링에서의 AOP (Aspect-Oriented Programming)

 

1) 개념

 

* 스프링은 4가지 형태의 핸들러(어드바이스, Advice)를 제공.

* 스프링에서는 핸들러를 어드바이스(Advice)라는 개념으로 사용.

 

 

 

* 어드바이스(Advice) 란?

 - 타깃 오브젝트(Target Object) 적용할 부가 기능을 담은 오브젝트

 - 메인 업무에 보조적으로 추가될 보조 업무.

2) 스프링 프레임워크에서의 4가지 형태의 Advice

 

 

* 포인트 컷 & 조인포인트

 

 - 위빙 (Weaving) : 보조업무가 프록시(Proxy) 통해서 업무에 주입되는 . 즉, 타깃 객체에 애스펙트를 적용해서 새로운 프록시 객체를 생성하는 절차.

 - 조인포인트 (Joint Point) : 위빙하게 되는 함수. 지점.

 - 포인트 (PointCuts) : 객체의 특정 함수만 조인포인트 역할을 하도록 하는 . 

특정 함수(add, subtract) 만 조인포인트 함수가 되도 록 포인트 지정.

특정 포인트 컷에 특정 어드바이스(핸들러) 지정.

프록시(Proxy)란?

 

 - 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장하여 클라이언트 클라이언트의 요청을 받아주어 처리하는 대리자 역할.

프록시의 단어 자체로는 '대리인'이라는 의미를 내포하고 있음. 스프링 AOP에서의 프록시란 말그대로 대리하여 업무를 처리. 함수 호출자는 주요 업무가 아닌 보조 업무를 프록시에게 맡기고, 프록시는 내부적으로 이러한 보조 업무를 처리.

  업무와 보조 업무를 분리(크로스 컷팅, Cross Cutting)하고 보조 업무를 프록시(Proxy)에게 넘긴다!

 

 

-----------------------------

이러한 AOP 구현에 있어서 XML 방식의 문제점.

 * XML URL 수만큼 Bean객체를 생성하여 객체 값을 설정 해야하는 어려움이 있음.

 * 문제가 되는 이유는 Controller 클래스에는 URL 매핑되는 오버라이드(Override) handleRequest 함수가 하나씩만 배정되어 있음.

 * URL 반응하는 Controller 함수 하나 하나마다 매번 캡슐(java 페이지) 생성해야 하므로, 코드 작성의 어려움이 있음. 소스 페이지(JSP, XML, JAVA ) 여러 곳에 산재하게 . -> 서비스 규모에 따른 너무 많은 개체 관리.

 AOP with Annotation(애노테이션)

 

* 애노테이션(Annotation) & 오토와이어링(Autowiring)

 애노테이션은 특수한 주석으로 자체적으로 어떠한 기능을 수행하는 것은 아니지만, 애노테이션이 가리키는 지시어(정보)를 기반으로 컴파일러는 애노테이션이 적용된 클래스 또는 매서드, 프로퍼트 등에 적절한 기능을 부여한다.

728x90
728x90

'BackEnd FrontEnd > Spring' 카테고리의 다른 글

java.sql.SQLException: Unknown system variable 'query_cache_size' 오류가 날때  (0) 2019.12.10
OAuth2 구현하기 & postman test  (0) 2019.12.01
IOC  (0) 2017.09.27
Spring 특징  (0) 2017.09.27