본문 바로가기

Programming/Java&Spring

Spring AOP

AOP(Aspect Oriented Programming)


객체지향 프로그래밍(OOP)은 다수의 객체들에 분산되어 중복적으로 존재하는 공통 관심사가 존재한다.

이들은 프로그램을 복잡하게 만들고, 코드의 변경을 어렵게 한다.

관점지향 프로그래밍(AOP) 이러한 객체지향 프로그래밍의 문제점을 보완하는 방법으로 핵심 관심사를 분리하여 프로그램 모듈화를 향상시키는 프로그래밍 스타일이다.

Core(Primary) concern(핵심 관심사)은 일반적으로 구현하려고 하는 핵심 비지니스 기능을 말한다.

Cross-cutting concern(횡단 관심사)은 보안, 로깅, 트랜잭션, 인증과 같이 시스템 관리를 위한 기능들을 말한다.

AOP는 Crooss-cutting concern를 어떻게 다룰 것인가에 대한 새로운 패러다임이라고 할 수 있다.

AOP는 객체를 Core concern과 Cross-cutting concern으로 분리하고, 횡단 관심사를 관점(Aspect)이라는 모듈로 정의하고 핵심 관심사와 엮어서(Weaving) 처리할 수 있는 방법을 제공한다.

AOP 장점


• 중복 코드의 제거

  횡단 관심(CrossCutting Concerns)을 여러 모듈에 반복적으로 기술되는 현상을 방지

• 비지니스 로직의 가독성 향상

  핵심기능 코드로부터 횡단 관심 코드를 분리함으로써 비지니스 로직의 가독성 향상

• 생산성 향상

  비지니스 로직의 독립으로 인한 개발의 집중력을 높임

• 재사용성 향상

  횡단 관심 코드는 여러 모듈에서 재사용될 수 있음

• 변경 용이성 증대

   횡단 관심 코드가 하나의 모듈로 관리되기 때문에 이에 대한 변경 발생시 용이하게 수행할 수 있음

AOP 주요 용어


• Joinpoint 

class의 인스턴스 생성 시점, 메소드를 호출하는 시점, Exception이 발생하는 시점과 같이 어플리케이션을 실행할 때 특정 작업이 실행되는 시점을 의미한다. 메소드, 예외, 변경 가능한 필드가 될 수 있다.

• Pointcut

분리된 기능들을 결합시키기 위한 규칙이 필요하다. Target class와 Advice가 결합(Weaving)될 때 둘사이의 결합 규칙을 정의하는 것다. Advice가 어떤 Joinpoint에 적용돼야 하는지를 정의한다.

• Advice

Aspect의 실제 구현체로 Joinpoint에 삽입되어 동작할 수 있는 코드이다. Advice는 Joinpoint와 결합하여 동작하는 시점에 따라 before advice, after advice, around advice 타입으로 구분된다.

• Aspect

여러 객체에 공통으로 적용되는 공통 관심 사항을 Aspect라고 한다.

• Advisor

Spring AOP에서만 사용되는 용어이다. Aspect와 유사한 의미. 관점 지향에서 관점을 나타내는 개념이라 볼 수 있다.

• Target

Advice를 받는 객체이다. 핵심 비지니스 로직이 있는 객체라고 생각하면 된다. 

• Weaving

Aspect를 Target 객체에 적용하여 새로운 프록시 객체를 생성하는 과정이다.

• Proxy

Target객체에 Advice가 적용된 후 생성되는 객체이다. Spring은 프록시를 통해 AOP를 지원한다.

Aspect


<aop:config> : AOP 설정 정보를 나타내는 루트 태그

• <aop:pointcut> : Pointcut을 설정

<aop:aspect> : Aspect를 설정

<aop:advisor> : Spring API를 사용한 Advice를 이용할 때

 

 


 

 

 

 

'Programming > Java&Spring' 카테고리의 다른 글

자바 변수명 규칙  (0) 2021.04.18
Spring IoC/DI  (0) 2019.12.05