[Spring] 관점 지향 프로그래밍 핵심기능과 부가기능 개요 weaving Aspect 등 관련 용어


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

프로그램 다운로드 없이 컴퓨터 자동 종료 및 예약 종료 간단하게 하기

 

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

 

1) 특정한 함수(핵심기능) 호출 전이나 후에 뭔가 공통적인 처리가 필요하다면 AOP 구현한다.

– 로깅, 트랜잭션, 인증

 

2) OOP로 처리하기에는 다소 까다로운 부분을 AOP라는 처리 방식을 도입하여 손쉽게 공통 기능을 추가, 수정, 삭제 할 수 있도록 하였다.

2. 핵심기능과 부가기능

 

1) 업무(biz) 로직을 포함하는 기능을 핵심 기능(Core Concerns)

2) 핵심기능을 도와주는 부가적인 기능(로깅, 보안 등)을 부가기능이라고한다. (Crosscutting-Concerns)이라고 부른다.

3) 객체지향의 기본 원칙을 적용하여도 핵심기능에서 부가기능을 분리해서 모듈화하는 것은 매우 어렵다.

3. AOP (Aspect Oriented Programming) 개요

 

1) 애플리케이션에서 관심사의 분리(기능의 분리) 즉, 핵심적인 기능에서 부가적인 기능을 분리한다.

2) 분리한 부가기능을 에스펙트(Aspect)라는 독특한 모듈형태로 만들어서 설계하고 개발하는 방법이다.

3) AOP는 부가기능을 에스택트로 정의하여, 핵심기능에서 부가기능을 분리함으로써 객체지향적인 가치를 지킬 수 있도록 도와준다.

4) 부가 기능(advice)을 동적으로 추가해주는 기술

5) 메서드의 시작 또는 끝에 자동으로 코드(advice)를 추가해주는 기술




4. AOP 관련 용어

 

1) target (타겟)

– advice가 추가될 객체

– 핵심 기능을 담고 있는 모듈

– 타겟은 부가기능을 부여할 대상이 된다.

 

2) advice

– target에 동적으로 추가될 부가 기능(코드)

– 타겟에 제공할 부가기능을 담고 있는 모듈

– 조인, AOP에서 실제로 적용하는 기능 (로깅, 트랜잭션, 인증 등)

 

3) join point

– advice가 추가(join)될 대상(메서드)

– 어드바이스가 적용될 수 있는 위치

– 타겟 객체가 구현한 인터페이스의 모든 메서드는 조인 포인트가 된다.

– 모듈화된 특정 기능이 실행될 수 있는 연결 포인트

 

4) pointcut

– join point들을 정의한 패턴

– join point중에서 해당 Aspect를 적용할 대상을 뽑을 조건식

– 어드바이스를 적용할 타겟의 메서드를 선별하는 정규 표현식이다.

– 포인트컷 표현식은 execution으로 시작하고, 메서드의 Signature를 비교하는 방법을 주로 이용한다.

ex) execution(* kr.co.yahoo.*.*(..)

 

5) proxy 

– target에 advice가 동적으로 추가되어 생성된 객체

– Spring은 프록시 기반의 AOP를 지원한다.
– Spring은 타겟(target)객체에 대한 프록시를 만들어 제공한다.
– 타겟을 감싸는 프록시는 실행시간(runtime)에 생성이 된다.
– 프록시는 어드바이스를 타겟 객체에 적용하면서 생성되는 객체이다.

– 대상 오브젝트에 Aspect를 적용하는 경우 advice를 덧붙이기 위해 하는 작업

 

6) weaving(위빙)

– target에 advice를 추가해서 proxy를 생성하는 것이다.

– Advice를 비즈니스 로직 코드에 삽입하는 것.

– 위빙은 포인트컷에 의해서 결정된 타겟의 조인 포인트에 부가기능(advice)을 삽입하는 과정을 뜻한다.

– 위빙은 AOP가 핵심기능(target)의 코드에 영향을 주지 않으면서 필요한 부가기능(advice)을 추가할 수 있도록 해주는 핵심적인 처리과정이다.

 

7) Aspect

– 여러 클래스나 기능에 걸쳐서 있는 관심사, 그리고 그것들을 모듈화한 것을 말한다.

– 에스팩트는 AOP의 기본 모듈이다.

– 에스팩트 = 어드바이스 + 포인트컷.

– 에스팩트는 싱글톤 형태의 객체로 존재한다.

– AOP 중에서 가장 많이 활용되는 부분은 @Transaction(트랜잭션 관리) 기능




5. Advice 종류 – 어노테이션

 

1) before advice – @Before

– 메서드의 시작 부분에 추가되는 부가 기능

– 전처리 어드바이스

– 프록시는 타겟 객체에 대한  호출을 가로챈 다음 어드바이스의 부가기능 로직을 수행하고 타겟의 핵심기능 로직을 호출한다.

 

2) after advice – @After

– 메서드의 끝 부분에 추가되는 부가 기능

– 후처리 어드바이스

– 타겟의 핵심기능 로직 메서드를 호출한 후에 부가기능(advice)을 수행하는 경우

 

3) around advice – @Around

– 메서드의 시작과 끝 부분에 추가되는 부가 기능

 

4) after returning – @AfterReturning

– 예외가 발생하지 않았을 때 실행되는 부가 기능

 

5) after throwing – @AfterThrowing

– 예외가 발생하였을 때 실행되는 부가 기능




6. pointcut expression (표현식)

 

1) advice가 추가될 메서드를 지정하기 위한 패턴

2) execution(반환타입 패키지명.클래스명.메서드명(매개변수 목록))

– “execution(* kr.co.yahoo.*.*(..))”

예1) execution(* hello(..))
– hello라는 이름을 가진 메서드를 선정하는 것이다.
– 파라미터는 모든 종류를 다 허용한다는 의미.

예2) execution(* hello())
– hello라는 이름을 가진 메서드를 선정하는 것이다. 단, 매개변수가 없는 것만 선택하는 것이다.

예3) execution(* kr.co.yahoo.user.service.UserServiceImpl.*(..))
– kr.co.yahoo.user.service.UserServiceImpl 클래스를 직접 지정하여 이 클래스가 가진 모든 메서드를 선택함.

예4) execution(* kr.co.yahoo.user.service.*.*(..))
– kr.co.yahoo.user.service 패키지의 모든 클래스에 적용된다.
– 서브 패키지의 클래스는 포함되지 않는다.

예5) execution(* kr.co.yahoo.user.service..*.*(..))
– kr.co.yahoo.user.service 패키지의 모든 클래스에 적용된다.
– 서브 패키지의 모든 클래스까지 포함한다.

예6) execution(* *..MyClass.*(..))
– 패키지에 상관없이 MyClass라는 이름의 모든 클래스에 적용된다.
– 다른 패키지에 같은 이름의 클래스가 있어도 적용이 된다.




7. JoinPoint 인터페이스

 

1) Spring AOP 혹은 AspectJ에서 AOP가 적용되는 지점

2) 해당 지점을 JoinPoint라는 인터페이스로 나타낸다.

3) 어드바이스는 JoinPoint의 하위 클래스인 ProceedingJoinPoint의 파라미터를 필수적으로 선언해야한다.

 

택배 배송조회 자세히 하는 방법 !

[HTML & CSS]선택자 종류 문법 배치속성 반응형 플렉스 박스 정렬