본문 바로가기

건승하고있어요/Spring framework

[Spring] 스프링2일차 - 스프링AOP

반응형

스프링 AOP


비지니스 컴포넌트 개발에서 가장 중요한 원칙 두 가지

★낮은 결합도 & 높은 응집도★ 


-의존성주입(Dependency Injection) => 낮은 결합도를 가능하게 해줌

-AOP(Aspect Oriented Programming) => 높은 응집도를 위한 기능


비즈니스 메소드에 부가적인 코드들이 반복해서 등장 => 코드 분석과 유지보수를 어렵게 만듦

AOP는 이러한 부가적인 공통코드들을 효율적으로 관리하는데 주목


관심분리(Separation of Concerns)

 횡단관심(Crosscutting Concerns)

 메소드마다 공통으로 등장하는 로깅이나 예외, 트랜잭션 처리같은 코드 

 핵심관심(Core Concerns)

 사용자의 요청에 따라 실제로 수행되는 비지니스 로직 

 

이 두 관심을 완벽하게 분리할 수 있다면 실제로 우리가 구현하는 메소드에는 실제 비지니스 로직만으로 구성 가능

-> 더욱 간결하고 응집도 높은 코드 유지가능

PERO, 기존의 OOP(Objecct-Oriented Programming, 객체지향)언어에서는 횡단관심에 해당하는 공통 코드를 완벽하게 독립적인 모듈로 분리해 내기 어려움

그래서 AOP가 나왔엉! 


AOP 시작하기

AOP 라이브러리추가 : 해당 프로젝트의 pom.xml 파일에 AOP관련 라이브러리를 추가

<!-- AspectJ -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

<version>${org.aspectj-version}</version>

</dependency>

<!-- AspectJ Weaver -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>${org.aspectj-version}</version>

</dependency>

<!-- AspectJ Tools -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjtools</artifactId>

<version>${org.aspectj-version}</version>

</dependency>


<!-- AspectJ Tools -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjtools</artifactId>

<version>${org.aspectj-version}</version>

</dependency>

요것은 없어도 된다는거 같은데, 자꾸 오류가 났다. 그래서 넣어줬더니 해결되었다.

(참고: http://bigfat.tistory.com/102)



네임스페이스 추가

저번에 Context를 추가했던 것처럼 namespace 탭을 누르고 aop를 체크

그러면 <beans>에 

xmlns:aop="http://www.springframework.org/schema/aop"

가 추가된다.



반응형