Spring | AOP 이용 | AOP이란?


Spring Framework에 있어서 DI(Dependency Injection 의존성 주입)와 더불어 중요한 근간이 되는 “AOP"이라는 기술이 있다.

AOP는 “Aspect Oriented Programming (관점 지향 프로그래밍)“의 약자이다. Aspect이라는 것은 일반적으로 “횡단적 관심사"라는 것이다.

객체 지향 프로그램은 “클래스"를 기준으로 작성된다. 각각의 클래스마다, 그 클래스에 필요한 기능을 메서드로 구현하는 것이다. 이 수법은 사고방식으로써는 잘되어 있지만, 반대로 “클래스마다 완벽하게 결정되어 있어야 한다"것이 몹시 번거려워질 수도 있다.

예를 들어, 프로그램의 개발 중에 작동 상황을 확인하기 위해 곳곳에 System.out.println 문장을 쓰고 값을 출력시키는 것은 누구든지 흔하게 하는 방법이다. 그런데, 이것은 생각해 보면 굉장히 귀찮은 방법이다. 다수의 클래스가 있으면, 각 클래스의 각 메소드마다 println을 쓰고 나가지 않으면 안된다. 또한, 그렇게 프로그램이 완성된 후에는 모든 println을 제거하지 않으면 안된다.

이런 “다수의 클래스에 걸쳐 공통적으로 필요한 처리"가 횡단적 관심사이다. 만약 여러 클래스의 메서드에 println 문장을 자동으로 삽입 할 수 있는 기능이 있으면 상당히 편리 아니지 않을까? 그리고 필요가 없어지면 자동으로 삭제 할 수 있다면? 이것이 바로 AOP의 개념이다.

DI가 “의존성(값) 주입"이라면, AOP는 “처리 주입"이라고 해도 좋을 것이다. 외부에서 클래스의 특정 부분에 미리 준비 해둔 처리를 삽입하거나 제거하거나 하는 것이 AOP에서 실현되는 것이다.

pom.xml 준비
우선 프로젝트에 AOP 관련 라이브러리를 추가하자. pom.xml을 열고 <dependencies> 태그 안에 아래에 있는 내용을 추가하자.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>4.3.10.RELEASE</version>
</dependency>

여기에 추가하는 것은 Spring AOP 라이브러리이다. groupId에 org.springframework를 지정하고, artifactId에 spring-aop를 지정한다. 또한 버전은 Spring Framework 4.3.10으로 이용하도록 맞춰 지정하고 있다. Spring Framework의 버전이 다르면 거기에 맞춰서 버전을 조정하면 된다.