- 기본 개념
스프링은 기존의 비즈니스 로직 외 작성해야 하는 코드를 별도로 분리함으로써 개발자가 좀 더 비즈니스 로직에만 집중해서 처리할 수 있는 방법을 제공한다. 즉, 공통적이고, 반복적이고, 그러나 비즈니스 로직의 핵심이 아닌 부분(이런 것을 횡단 관심사 cross-concern이라고 한다.)`을 처리할때 AOP를 이용할 수 있다.
AOP는 OOP를 대신하는 새로운 개념이 아니라, OOP를 더욱 OOP 답게 사용할 수 있도록 도와주는 개념이다
객체를 재사용함으로써 개발자들은 반복되는 코드의 양을 굉장히 많이 줄일 수 있었다. 그럼에도 불구하고 로그, 권한 체크, 인증, 예외 처리 등 필수적으로 해야하는 코드들은 반복될 수 밖에 없었다. 이러한 부분을 AOP가 해결해준다. 기능을 비즈니스 로직과 공통 모듈로 구분한 후에 개발자의 코드 밖에서, 필요한 시점에 비즈니스 로직에 삽입하여 실행되도록 한다.
# 간단한 용어 설명
- Advice : 실제 적용시키고 싶은 코드 자체( Aspect에 해당하는 클래스를 설계하여 @Advice를 적용하면 Advice가 된다.)
- target : 비즈니스 로직을 수행하는 객체 즉, Aspect를 적용해야 하는 대상 객체이다.
- Join points : 작성된 Advice가 활약할 수 있는 위치.
- Point cuts : 여러 Join points 중에서 Advice를 적용할 대상을 선택하는 정보. 이를 통해서 특정 메소드는 Advice가 적용된 형태로 동작한다.
즉, 원래 객체인 target을 호출할 때 외부에서 직접 target을 호출하는 것이 아니라, Advice가 적용된 Proxy 객체를 통해서 호출하게 되므로, 기존의 코드를 수정하지 않고 코드의 앞이나 뒤에서 특정 기능이 동작할 수 있는 것이다.
- 적용
컨트롤러에서 서비스를 호출할 때 넘기는 파라미터의 수집과, 서비스 클래스의 특정 메소드가 수행되기 이전과 이후에의 시간을 측정하여 서비스 클래스의 메소드 실행에 걸리는 시간을 측정해보는 것이 목적이다.
1. AOP 를 활용하기 위해, pom.xml 파일에 spring-aop 라이브러리를 추가한다.
2. AOP 기능을 적용하기 위해서는 AspectJ 언어의 문법을 이용하기 때문에 이와 관련된 라이브러리를 추가한다.
3. Service 클래스와 Advice 클래스의 객체를 스프링이 관리할 수 있도록 root-context.xml에 component-scan을 추가해주고,
AOP의 설정을 통한 자동적인 Proxy 객체 생성을 위해 다음 코드도 함께 추가해준다. (이를 위해서는 namespace에 aop를 체크해주어야 한다.)
4. 컨트롤러 코드 작성
5. 서비스 코드 작성
6. 화면 (.jsp파일) 작성
7. Advice 작성
@Around 애노테이션 안에 문자열로 명시한 패키지의, 모든 클래스의 모든 메소드가 실행되기 전에 해당 Around애노테이션이 적용된 메소드인 around() 를 먼저 실행하겠다는 의미이다.
8. 테스트 결과
웹 브라우저에서는 컨트롤러의 home2() 메소드에 매핑되는 url로 요청하였는데,
Console에 찍힌 logger를 보면 "doB......"를 출력하는 Service클래스의 doB메소드가 실행되기 이전과 이후에 수행되도록 설계한 @Advice가 적용된 메소드인 around() 메소드가 적절히 수행되는 것( 파라미터 수집과, 실행시간 측정)을 확인할 수 있다.
'웹 개발(OLD) > Spring Framework(OLD)' 카테고리의 다른 글
JAVA Object, JSON 변환 (GSON 라이브러리) (0) | 2016.05.19 |
---|---|
Spring Batch 프로그램 - 어노테이션 방식 (2) | 2016.05.12 |
Spring Transaction 처리 (0) | 2016.04.15 |
Spring MVC 원리 (6) | 2016.04.11 |
Interceptor에서의 Logger (0) | 2016.04.08 |