본문 바로가기
학습 log (이론)/web

'Spring' AOP

by abbear25 2017. 7. 6.

OOP(Object Oriented Programming)의 한계

중복되는 코드 발생, 지저분한 코드, 생산성과 재활용 저하


AOP(Aspect Oriented Programming)

핵심 모듈의 코드 사이에 공통 모듈이 동작하도록 처리하는 방법

핵심과 공통 모듈로 구분

*핵심 모듈: 일반 업무 프로세스 (게시글 등록, 수정, 삭제, 조회 등)

*공통 모듈: 전체 시스템에서 사용되는 기능 (로그처리, 트랜잭션, 인증, 보안 등)

핵심 로직에 영향을 미치지 않고 공통 모듈을 효과적으로 삽입하는 개발 방법

공통 모듈의 변경사항이 있을 경우 사용하는 쪽은 변경할 필요가 없음


AOP 특징

표준 자바 클래스로 작성

Runtime 시점에 Advice가 적용

메서드 단위의 조인포인트만 가능


AOP 용어

Join point

공통 관심 모듈의 기능이 삽입되어 동작될 수 있는 위치

메서드 호출, 필드 값 변경시점 등

스프링은 메서드 호출만 가능

Point cut

어떤 클래스의 Join point를 사용할 것인지 결정

Advice

공통 모듈을 핵심 모듈에 적용할 시기를 정의

게시판 목록 조회시에 실행에 걸린 시간

Before Advice: 대상 객체의 메서드 호출 전에 공통 모듈 실행

After Advice: 예외 발생 여부와 상관없이 메서드 실행 후 공통 모듈 실행

Around Advice: 대상 객체의 메서드 실행 전, 후 또는 예외 발생 시점에 공통 모듈 실행

After Returning Advice: 메서드가 예외 없이 실행된 이후에  공통 모듈 실행

After Throwing Advice: 메서드 실행중에 예외 발생한 경우 공통 모듈 실행

Weaving, Cross cutting

Point cut에 의해서 결정된 Join point에 지정된 Advice를 삽입하는 과정

Aspect

공통 모듈 (Point cut과 Advice를 합쳐놓은 것)


핵심 모듈에 공통 모듈을 삽입하는 3가지 방법

컴파일 시점에 코드에 공통 기능 추가

클래스 로딩 시점에 바이트 코드에 공통 기능 추가

실행 시에 프록시 (메시지를 중간에 가로채서 알아서 처리해주는 역할 수행) 객체를 생성해서 공통 기능 추가

*스프링 AOP는 프록시 객체를 자동으로 생성, 개발자는 공통 기능만 구현


XML 기반

<aop:*> 태그 정보

<aop:config>

AOP 루트 설정 태그, AOP 관련 설정 정보임을 표시

<aop:aspect>

Point cut과 Advice 설정을 위한 태그

<aop:pointcut>

Point cut을 지정하기 위해 사용, <aop:config>, <aop:aspect> 하위 태그

<aop:advisor>

Point cut과 Advice 클래스를 직접 연결할 경우 사용


<Advice> 태그 정보

<aop:before>

메서드 실행 전에 호출

<aop:after>

메서드 실행 후 무조건 호출

<aop:around>

메서드 호출 이전, 이후, 예외 발생 등 모든 시점에 적용 가능

<aop:after-returning>

메서드 정상 종료 후 호출

<aop:after-throwing>

예외 발생한 경우 호출


Pointcut 지시자

execution [접근제한자] 반환타입 [클래스이름.]메소드명(파라미터)

파라미터에 '..'이 오면 0개 이상 '*'이 오면 1개 이상의 파라미터가 오게 된다


반응형

'학습 log (이론) > web' 카테고리의 다른 글

'myBatis'  (0) 2017.07.27
'MongoDb'  (0) 2017.07.17
'Spring' IOC와 DI  (0) 2017.07.04
'AJAX'  (0) 2017.06.27
'JSP'  (0) 2017.06.22