본문 바로가기
프로그래밍/Spring

AOP(Aspect Oriented Programming)와 스프링(Spring)

by Mr-후 2018. 12. 17.
반응형

AOP(Aspect Oriented Programming)와 스프링(Spring)


어플리케이션 개발을 하다 보면 공통으로 사용되는 기능(로깅, 트랜잭션 관리, 보안 등)이 있는데 이런 공통 관심 사항들을 객체지향기법(상속이나 패턴등)을 사용해서 여러 모듈에 효과적으로 적용하는 한계를 극복하기 위해 AOP라는 기법이 도입되었다. 

어플리케이션 전반에 공통으로 사용되는 기능이 많아질수록 그리고 공통 모듈을 사용하는 클래스가 많아 질수록 의존 관계는 점점 복잡해지고 중복되는 문제가 발생. 

AOP(Aspect Oriented Programming)는 공통의 관심사항을 적용해서 발생하는 의존 관계의 복잡성과 코드 중복을 해소해 주는 프로그래밍 기법. AOP에서는 각 클래스에서 공통 관심 사항을 구현한 모듈에 대한 의존관계를 갖기 보다는 Aspect를 이용하여 핵심 로직을 구현한 각 클래스에 공통 기능을 적용하게 된다. 

AOP에서 중요한 점은 Aspect가 핵심 로직 구현 클래스에 의존하지 않는다는 점이다. 일반적으로 AOP에서는 설정 파일이나 설정 클래스 등을 이용하여 Aspect를 여러 클래스에 적용할 수 있도록 하고 있다. 하나의 Aspect를 개발하게 되면, Aspect를 수정할 필요 없이 여러 클래스에 적용할 수 있다. 

 <bean id="logging" class="com.zend4u.LoggingAspect" />

<aop:config>

<aop:pointcut id="servicePointcut" expression="execution(* *..*Service.*(..))" />


<aop:aspect id="loggingAspect" ref="logging">

<aop:around pointcut-ref="servicePointcut" method="logging" />

</aop:aspect>

</aop:config>


XML 스키마 확장(aop name space)을 통해 AOP를 설정, 위와 같이 설정할 경우 이름이 Service로 끝나는 인터페이스를 구현한 모든 클래스의 모든 메서드에 LoggingAspect가 적용된다. 


공통 관심 사항을 구현한 클래스를 작성했고, 공통 관심 사항을 어떻게 적용할지에 대한 내용을 설정 파일로 작성했다면 실제 Aspect가 적용되는지 테스트하는 일만 남게 된다. 

AOP를 적용하는 중요한 점은 공통 관심사항(LoggingAspect)를 적용한느 과정에서 핵심 로직을 구현한 클래스 (CarInsServiceImple)의 코드를 변경하지 않았다는 점. 단지 공통 관심 사항을 구현한 Aspect 클래스를 작성하였고, 설정 파일을 이용하여 Aspect를 핵심 로직을 구현한 클래스에 적용했을 뿐이다. 

간단한 설정만으로도 공통 기능을 여러 클래스에 적용할 수 있는 것이 AOP의 주요 장점 중의 하나이며, 스프링은 JEE 어플리케이션을 구현하는데에 필요한 수준으로 AOP를 지원하고 있다. 








출처 : SPRING 3.0프로그래밍 (웹개발자를 위한) / 최범균 저


반응형

'프로그래밍 > Spring' 카테고리의 다른 글

@Autowired 어노테이션  (0) 2018.12.18
@Required 어노테이션  (0) 2018.12.18
Bean 범위(scope)  (0) 2018.12.18
스프링(Spring) 컨테이너  (0) 2018.12.17
스프링(Spring) 프레임워크 & DI(Dependency Injection)패턴  (0) 2018.12.17