IT/Programming

[스프링/Spring]AOP 개념

또닝 2017. 6. 10. 18:53

AOP(Aspect Oriented Programming) : 관점 지향 프로그래밍

기능을 핵심 비지니스 로직과 공통 모듈로 구분하고, 핵심 로직에 영향을 미치지 않고 사이사이에 공통 모듈을 효과적으로 잘 끼워넣도록 하는 개발 방법이다. 공통모듈(트랜잭션/로그/보안/인증 처리 등)을 만든 후에 코드 밖에서 이 모듈을 비지니스 로직에 삽입하는 것이 바로 AOP 적인 개발이다. 코드 밖에서 설정된다는 것이 핵심이다.

자체적인 언어라기보다는 기존의 객체 지향 프로그래밍(Object Oriented Programming) 언어를 보완하는 확장 형태로 사용되고 있다. 자바에서 사용되는 AOP도구 중 대표적인 것으로 AspectJ, JBossAOP, SpringAOP가 존재한다.

 

AOP가 사용되는 경우

1. 간단한 메소드 성능 검사

2. 트랜잭션 처리

3. 예외 반환

4. 아키텍쳐 검증

 

AOP 목적 및 장점

- AOP의 필요성을 이해하는 가장 기초가 되는 개념은 '관심의 분리(Separation of Concerns)'이다.

- 핵심관점(업무로직) + 횡단관점(트랜잭션/로그/보안/인증 처리 등)으로 관심의 분리를 실현한다.

- 중복코드 제거로 코드의 간결성과 생선성 향상된다.

- 코드의 재사용성 극대화한다.

- 효율적인 유지보수가 가능하다.

- 변화 수용이 용이하다.

 

AOP 주요 용어

1. Advice : 언제 공통 관심 기능을 핵심 로직에 적용할지 정의한다.

2. Joinpoint : Advice를 적용 가능한 지점이다.

3. Pointcut : Joinpoint의 부분 집합으로서 실제로 Advice가 적용되는 Jointpoint를 나타낸다.

4. Weaving : Adivece를 핵심 로직 코드에 적용하는 것이다.

[ Weaving 방법 ]

1. 컴파일시에 Weaving 하기

- AspectJ에서 사용하는 방식으로, 컴파일시에 알맞은 위치에 공통 코드를 삽입한다.

2. 클래스 로딩시에 Weaving 하기

- AOP 라이브러리를 이용하여 JVM이 클래스를 로딩할 때 클래스 정보를 변경할 수 있는 에이전트를 제공한다.

3. 런타임시에 Weaving 하기

- 프록시를 이용하여 핵심 로직 실행 전, 후에 공통 기능을 적용한다.

5. Aspect : 여러 객체에 공통으로 적용되는 공통 관심 사항이다.

 

AOP 지원 방식 3가지

- 스프링은 프록시 기반의 런타임 Weaving 방식을 지원한다.

- 스프링은 AOP구현을 위해 다음의 3가지 방식을 제공한다.

1. XML 스키마 기반의 POJO 클래스를 이용한 AOP 구현

2. AspectJ 5/6에서 정의한 @Aspect 어노테이션 기반의 AOP 구현

3. 스프링 API를 이용한 AOP 구현