[개념 확인 문제]
[AOP의 개념]
AOP는 Aspect Oriented Programming의 약자로 이라고 불린다.
관점 지향은 쉽게 말해 어떤 로직을 기준으로 , 으로 나누어서 보고 그 관점을 기준으로 각각 하겠다는 것이다. 여기서 는 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.
AOP는 중요한 로직은 아니지만, 사전 조건이나 사후 조건 같은 를 과 분리시켜 하고, 실행할 때 와 을 하는 방식이다.
이러한 AOP는 을 분리하여 반복되는 부분을 추출해 핵심 로직에 영향을 미치지 않고 소스의 중복을 줄이는 방법으로 기존 에서 공통 관심 기능을 여러 모듈에서 적용하며 발생하는 한계를 극복하기 위해 나오게 되었다.
[AOP의 용어]
1.
- 개발자가 작성한 핵심 비즈니스 로직을 가지는 객체
- 순수한 비즈니스 로직을 의미하고 어떠한 관심사들과도 관계를 맺지 않는다.
2.
- 내부적으로 Target을 호출하지만, 중간에 필요한 관심사들을 거쳐서 Target을 호출하도록 자동 혹은 수동으로 작성된다.
- 외부에서의 호출은 Proxy객체를 통해서 Target 객체의 JoinPoint를 호출하는 방식이다.
3.
- Target이 가진 여러 메서드
- Advice가 Target에 적용될 수 있는 위치, 시점
4.
- 부가 기능이 적용될 대상(method)을 선정하는 방법
- 관심사와 비즈니스 로직이 결합되는 지점을 결정하는 방법
- Advice를 적용할 JoinPoint를 선별하는 기능을 정의한 모듈
5.
- 관심사 자체를 의미하는 추상명사
- 부가 기능 모듈
- 부가될 기능을 정의한 Advice와, Advice를 어디에 적용할지를 결정하는 PointCut을 함께 갖고있음
6.
- Aspect를 구현한 코드
- 실제적으로 부가기능을 담은 구현체
- Target에 종속되지 않기 때문에 부가기능에만 집중할 수 있음
[Advice의 동작위치]
Advice는 실제 걱정거리를 분리해 놓은 코드를 의미한다. Advice는 그 동작 위치에 따라 다음과 같이 구분된다.
- - Target의 JoinPoint를 호출하기 전에 실행되는 코드로, 코드의 실행 자체에는 관여할 수 없음
- - 모든 실행이 정상적으로 이루어진 후에 동작하는 코드
- - 예외가 발생한 뒤에 동작하는 코드
- - 정상적으로 실행되거나 예외가 발생했을 때 구분 없이 실행되는 코드
- - 메서드의 실행 자체를 제어할 수 있는 가장 강력한 코드로, 직접 대상 메서드를 호출하고 결과나 예외를 처리 할 수 있음
Target에 어떤 Advice를 적용할 것인지는 1). 을 이용하는 방식을 사용하거나, 2). 을 이용하는 방식을 사용할 수 있다.
[Pointcut의 형태]
Pointcut은 어떤 JoinPoint에 결합할 것인지를 결정하는 설정이다.
AOP에서 Target은 결과적으로 Pointcut에 의해서 자신에게 없는 기능들을 가지게 된다.
Pointcut은 다양한 형태로 선언해서 사용할 수 있는데 주로 사용되는 설정은 다음과 같다.
- - 메서드를 기준으로 Pointcut을 설정한다.
- - 특정한 타입(클래스)을 기준으로 Pointcut을 설정한다.
- - 주어진 인터페이스를 구현한 객체를 대상으로 Pointcut을 설정한다.
- - 특정한 파라미터를 가지는 대상들만을 Pointcut으로 설정한다.
- - 특정한 어노테이션이 적용된 대상들만을 Pointcut으로 설정한다.
답은 여기서 확인 -> https://e-you.tistory.com/326
[면접 질문 대비 문제]
1. AOP에 대해서 설명하시오.
- 관점을 기준으로 프로그래밍 하는 기법
- 공통 관심 사항을 구현한 코드를 핵심 로직을 구현한 코드 안에 삽입하는 것
등등..
2. AOP와 OOP를 비교하여 설명하시오.
AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고한다.
애플리케이션의 핵심적인 기능과 부가적인 기능을 분리해 관점을 기준으로 프로그래밍하는 기법이다.
OOP는 Object Oriented Programming의 약자로 객체 지향 프로그래밍이라고 한다. OOP와 AOP는 서로 상반되는 개념이 아니며 오히려 OOP를 더욱 OOP답게 사용할 수 있도록 하는 것이 OOP이다.
OOP는 비지니스 로직을 모듈화해 객체를 재사용함으로 코드의 중복을 많이 줄일 수 있었지만, 그럼에도 반복되는 코드를 없앨수는 없다.
AOP가 이러한 부분을 해결해주었다. 기능을 비지니스 로직과 공통 모듈로 구분한 후 개발자의 코드 밖에서 필요한 시점에 비지니스 로직에 삽입하여 실행되도록 한다.
AOP를 사용하므로써 중복 코드를 제거하고, 재활용성이 극대화가 된다.
3. AOP 주요 용어들을 설명하시오.
1. Target
- 개발자가 작성한 핵심 비즈니스 로직을 가지는 객체
- 순수한 비즈니스 로직을 의미하고 어떠한 관심사들과도 관계를 맺지 않는다.
2. Proxy
- 내부적으로 Target을 호출하지만, 중간에 필요한 관심사들을 거쳐서 Target을 호출하도록 자동 혹은 수동으로 작성된다.
- 외부에서의 호출은 Proxy객체를 통해서 Target 객체의 JoinPoint를 호출하는 방식이다.
3. JoinPoint
- Target이 가진 여러 메서드
- Advice가 Target에 적용될 수 있는 위치, 시점
4. PointCut
- 부가 기능이 적용될 대상(method)을 선정하는 방법
- 관심사와 비즈니스 로직이 결합되는 지점을 결정하는 방법
- Advice를 적용할 JoinPoint를 선별하는 기능을 정의한 모듈
5. Aspect
- 관심사 자체를 의미하는 추상명사
- 부가 기능 모듈
- 부가될 기능을 정의한 Advice와, Advice를 어디에 적용할지를 결정하는 PointCut을 함께 갖고있음
6. Advice
- Aspect를 구현한 코드
- 실제적으로 부가기능을 담은 구현체
- Target에 종속되지 않기 때문에 부가기능에만 집중할 수 있음