티스토리 뷰
핵심 기능과 부가기능
- 업무 로직을 포함하는 기능을 핵심 기능 (Core Concerns)
- 핵심 기능을 도와주는 부가적인 기능을 부가기능 (Cross-cutting Concerns)
- 객체 지향의 기본 원칙을 적용하여도 핵심 기능에서 부가 기능을 분리해서 모듈화 하는 것은 매우 어려움.
출처 : Tacademy
AOP(Aspect Oriented Programming)-관점 지향 프로그래밍의 개요
AOP는 어플리케이션에서의 관심자의 분리(기능의 분리) 즉, 핵심적인 기능에서 부가적인 기능을 분리한 부가기능을 애스펙트(Aspect)라는 독특한 모듈형태로 만들어서 설계하고 개발하는 방법
- OOP를 적용하여도 핵심 기능에서 부가 기능을 쉽게 분리된 모듈로 작성하기 어려운 문제점을 AOP가 해결해준다고 볼 수 있다.
- AOP는 부가기능을 Aspect로 정의하여, 핵심기능에서 부가기능을 분리함으로써 핵심 기능을 설계하고 구현할때 객체 지향적인 가치를 지킬 수 있도록 도와주는 개념.
Aspect
- 애스팩트는 부가기능을 정의한 코드인 어드바이스(Advice)와 어드바이스를 어디엣 적용하는지를 결정하는 포인트컷(PointCut)을 합친 개념.
* Advice + PointCut = Aspect
- AOP 개념을 적용하면 핵심기능 코드 사이에 침투된 부가기능을 독립적인 에스펙트로 구분해 낼 수 있다.
- 구분된 부가기능 애스펙트를 런타임 시에 필요한 위치에 동적으로 참여하게 할 수 있다.
AOP용어
타겟(Target)
- 핵심 기능을 담고 있는 모듈로, 타겟은 부가 기능을 부여할 대상이 된다.
어드바이스(Advice)
- 어드바이스는 타겟에 제공할 부가기능을 담고 있는 모듈이다.
조인 포인트(JointPoint)
- 어드바이스가 적용될 수 있는 위치를 말함
- 즉, 타겟 객체가 구현한 인터페이스의 모든 메서드는 조인 포인트가 된다.
포인트컷(PointCut)
- 어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식
- 포인트컷 표현식은 execution으로 시작하고, 메서드의 Signature를 비교하는 방법을 주로 이용
애스펙트(Aspect)
- 애스펙트는 AOP의 기본 모듈
- 애스펙트 = 어드바이스 + 포인트컷
- 애스펙트는 싱글턴 형태의 객체로 존재.
어드바이저(Advisior)
- 어드바이저 = 어드바이스 + 포인트컷
- 어드바이저는 Spring AOP에서만 사용되는 특별한 용어.
위빙(Weaving)
- 위빙은 포인트컷에 의해서 결정된 타겟의 조인 포인트에 부가기능 (어드바이스)을 삽입하는 과정을 뜻한다.
- 위비은 AOP가 핵심기능(타겟)의 코드에 영향을 주지 않으면서 필요한 부가기능(어드바이스)을 추가할 수 있도록 해주는 식심적인 처리과정
Spring AOP의 구현 방식
XML 기반의 POJO 클래스를 이용한 AOP 구현
- 부가 기능을 제공하는 Advice 클래스를 작성
- XML 설정 파일에 <aop:config>태그를 이용하여 애스펙트를 설정. (즉, 어드바이스와 포인트컷 설정)
@Aspect어노테이션을 이용한 AOP 구현
- @Aspect 어노테이션을 이용해서 부가기능을 제공하는 Aspect 클래스를 작성. 이때 Aspect 클래스는 어드바이스를 구현하는 메서드와 포인트컷을 포함.
- XML 설정 파일에 <aop:aspectj-autoproxy />를 설정.
'Java > Spring' 카테고리의 다른 글
WYSIWYG Editor Summernote 도입 (1) | 2017.04.05 |
---|---|
예제 보고 따라하다 겪는 LifeCycleException (6) | 2017.01.13 |
Spring JDBC (1) | 2017.01.08 |
사용자 관리 프로젝트 아키텍쳐 (0) | 2017.01.08 |
Annotation을 이용한 Bean 등록 (0) | 2017.01.07 |