Notice
Recent Posts
Recent Comments
Link
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 개발 일상 기록

[Spring] 스프링 AOP(Aspect Oriented Programming) 본문

Spring

[Spring] 스프링 AOP(Aspect Oriented Programming)

느린 거북이 2021. 5. 6. 08:54

스프링 AOP (Aspect-Orienten Programming)

AOP는 관점 지향 프로그래밍이라고 불립니다. 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것을 뜻합니다. AOP에서 각 관점을 기준으로 로직으로 로직을 모듈화 한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미입니다. 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는데 이것을 흩어진 관심사라고 부릅니다.

관점 지향 프로그래밍

기능별로 class를 분리했음에도 불구하고 생기는 중복코드의 단점을 해결하고자 하온 방식, 공통기능과 핵심부분을 분리하여, 필요할 때에만 공통기능을 핵심부위에 넣어주는 방식입니다. 

 

횡단 분할 기법이란 OOP와 같은 모듈화가 뛰어난 방법을 사용하더라도 결국 쉽게 분리된 모듈로 작성하기 힘든 요구사항이 실제 어플리케이션 설계와 개발에서 자주 발견된다는 점이다. 이를 AOP에서는 횡단 관심이라고 한다.

 

위의 사진에서 처럼 핵심관점은 아이템, 사냥, 캐릭터 등이 될 수 있고 횡단 관심은 보안, 통제, DB 등의 그밖에 것을을 이야기 할 수 있습니다. 이처럼 흩어진 횡단 관심사들을 Aspect로 모듈화하고 핵심 관심에서 분리하여 재사용한다는 것이 AOP의 취지이자 핵심입니다.

AOP의 주요 개념

Aspect(에스펙트) : 부가기능 모듈을 에스펙트라고 부릅니다. 핵심기능에 부가되어 의미를 갖는 특별한 모듈

Target(타겟) : 부가기능을 부여할 대상을 이야기합니다.

Advice(어드바이스) : 실질적으로 부가기능을 담은 구현체를 이야기 합니다.

JoinPoint(조인포인트) : Advice가 적용될 위치, 다른 AOP 프레임워크와 달리  Spring에서는 메소드 조인포인트만 제공

PointCut(포인트컷) : JoinPoint의 상세한 스펙을 정의함으로써 Advice가 실행될 지점을 정할 수 있다.

AOP가 사용되는 경우

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

개발 도중 특히  DB에 다량의 데이터를 넣고 빼는 등의 배치 작업에 대하여 시간을 측정해보고 쿼리를 개선하는 작업은 매우 의미가 있다. 이 경우 매번 해당 메소드 처음과 끝에 System.currentTimeMills();를 사용하거나, Spring이 제공하는 stopWatch코드를 사용하기는 매우 번거롭습니다. 이런 경우 해당 작업을 하는 코드를 밖에서 설정하고 해당 부분을 사용하는 편이 편리합니다.

 

2. 트랜잭션 처리

 

트랜잭션의 경우 비지니스 로직의 전후에 설정됩니다. 하지만 매번 사용하는 트랜잭션의 코드는 번거롭고, 소스를 더욱 복잡하게 보여줍니다.

 

3. 예외 반환

 

Spring에는 DataAccessException이라는 매우 잘 정의되어 있는 예외 계층구조가 있습니다. 구조가 별로 안 좋은 예외들이 발생했을 때, 그걸 잡아서 잘 정의되어 있는 예외 계층 구조로 변환해서 다시 던지는 에스펙트는 제 3의 프레임워크를 사용할 때, 본인의 애플리케이션에서 별도의 예외 계층 구조로 변환하고 싶을 때 유용합니다.

 

4. 로깅, 인증, 권한 등

AOP의 특징

1. 스프링에서 AOP구현은 접근 제어 및 부가기능을 추가하기 위해서 Proxy를 이용한다. 이 때문에 다른 AOP의 기능과 비교해서 매우 제한적인 부분만을 지원한다.

2. 스프링 내에 프록시 빈에서만 AOP를 적용 가능하다. 설정 구조 상 다른 XML기반의 AOP에 비해 복잡한 편이다.

3. 모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC(제어의 역전)와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 지원하는 것이 목적입니다.

 

Comments