Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AOP #1

Open
mic050r opened this issue Oct 2, 2024 · 0 comments
Open

AOP #1

mic050r opened this issue Oct 2, 2024 · 0 comments
Assignees
Labels
documentation Improvements or additions to documentation

Comments

@mic050r
Copy link
Member

mic050r commented Oct 2, 2024

AOP 용어

  1. join point : 관심사가 될 가능성이 있는 메서드들

  2. pointcut : join point중 실제 관심사

  3. advice : pointcut에 적용되는 충고

  4. target class : advice가 적용되는 클래스

  5. aspect : pointcut+advice를 합쳐놓은 것

  6. advisor : advice를 모아놓은 곳

  7. primary concern(핵심관심) :꼭 실행되어야 할 기능들

  8. cross cutting concern(횡단관심) : 충고

  9. 필요라이브러리 : aspectjweaver, aspectjrt

  10. 충고 삽입시점 : before, after, around, after-returning, after-throwing

  11. Execution명시자

    1. Pointcut을 저정할 때 사용하는 문법
    2. execution(접근제한자 리턴타입 클래스이름 메서드이름(매개변수))
    3. 접근 제한자 : public만 지원된다.
    4. * : 하나의 모든 것을 의미한다.
    5. .. : 개수 상관없이 모든 것을 의미한다.

1. Join Point (관심사가 될 가능성이 있는 메서드들)

  • 의미: 프로그램에서 실제로 실행될 가능성이 있는 모든 메서드입니다.
  • 비유: 집 안의 모든 전등 스위치를 생각해보세요. 각각의 스위치는 켜거나 끌 수 있는 가능성이 있습니다. 이때, 모든 스위치가 Join Point입니다.

2. Pointcut (Join Point 중 실제 관심사)

  • 의미: Join Point 중에서 우리가 실제로 관심을 가지고 있는 특정 메서드들입니다.
  • 비유: 모든 전등 스위치 중에서 거실의 전등 스위치만을 켜고 싶다고 생각해보세요. 이때, 거실 전등 스위치가 바로 Pointcut입니다. 즉, 전체 중에서 우리가 관심을 갖는 부분만 선택한 거죠.

3. Advice (Pointcut에 적용되는 충고)

  • 의미: Pointcut에 어떤 행동(충고)을 추가하는 것입니다. 즉, 선택한 메서드(Pointcut)에 대해 미리 또는 후에 해야 할 추가 작업을 말합니다.
  • 비유: 거실의 스위치를 켤 때, 스위치를 켜기 전 **"전기 절약을 위해 잠시 꺼둘까?"**라는 생각을 한다면, 그게 바로 Advice입니다. 스위치를 켜기 전에 할 수 있는 추가적인 행동이죠.

4. Target Class (Advice가 적용되는 클래스)

  • 의미: Advice가 적용되는 실제 클래스입니다.
  • 비유: 거실이라고 생각해보세요. 거실은 스위치를 적용할 대상이 됩니다. 즉, 거실이 Target Class입니다.

5. Aspect (Pointcut + Advice를 합쳐놓은 것)

  • 의미: AdvicePointcut을 합쳐놓은 것을 말합니다. 즉, 언제 어떤 행동을 할지를 다 묶어 놓은 것입니다.
  • 비유: 거실 스위치켜기 전에 전기 절약 경고를 항상 띄우는 설정이라고 보면 됩니다. 이게 바로 Aspect입니다. 어떤 시점(스위치)에서 어떤 행동(경고)을 할지를 모두 정리한 것이죠.

6. Advisor (Advice를 모아놓은 곳)

  • 의미: 여러 Advice를 모아둔 것입니다.
  • 비유: 거실뿐만 아니라 부엌이나 방의 스위치에 적용할 경고 목록을 모두 모아둔 목록이라고 보면 됩니다. 여러 조언(Advice)을 한 곳에 모아 둔 것이죠.

7. Primary Concern (핵심 관심)

  • 의미: 우리가 프로그램에서 기본적으로 해야 하는 핵심 기능입니다.
  • 비유: 전등을 켜고 끄는 일입니다. 이게 프로그램의 주요 기능이죠. 스위치를 켜는 것이 핵심입니다.

8. Cross-Cutting Concern (횡단 관심사)

  • 의미: 핵심 기능 이외에 부가적으로 수행해야 하는 작업들을 말합니다. 예를 들어 로깅, 트랜잭션 관리, 보안 등이 이에 해당합니다.
  • 비유: 스위치를 켜고 끄는 것이 핵심 기능(Primary Concern)이지만, 스위치를 켜기 전에 **"전기 절약 경고"**를 띄우는 것이 바로 Cross-Cutting Concern입니다. 이건 전등을 켜는 행위에 꼭 붙어다니는 부가적인 기능입니다.

요약하면:

  • Join Point: 프로그램의 모든 메서드들 (전등 스위치 전부)
  • Pointcut: 관심 있는 특정 메서드 (거실 스위치)
  • Advice: Pointcut에 적용되는 추가 작업 (스위치를 켜기 전에 전기 절약 경고)
  • Target Class: 실제로 Advice가 적용되는 클래스 (거실)
  • Aspect: 언제, 어떤 메서드에 어떤 추가 작업을 할지 모두 합친 것 (거실 스위치에 전기 절약 경고 설정)
  • Advisor: 여러 Advice를 모아둔 것 (각 방 스위치에 적용할 경고 목록)
  • Primary Concern: 핵심 기능 (전등 켜기)
  • Cross-Cutting Concern: 부가적인 작업 (전기 절약 경고)
@mic050r mic050r self-assigned this Oct 2, 2024
mic050r added a commit that referenced this issue Oct 2, 2024
- resource > config.xml
- Main > ClassPathXmlApplicationContext
- pom.xml
mic050r added a commit that referenced this issue Oct 2, 2024
- 타겟 클래스 bean 등록
- Aspect bean 등록 후
- AOP 설정에 충고 등록
mic050r added a commit that referenced this issue Oct 2, 2024
- <aop:pointcut>: 포인트컷을 정의하기 위한 태그
- id="point": 이 포인트컷의 ID. 나중에 Advice에서 참조할 수 있도록 식별자 역할을 한다.
- expression="execution(* org.example.bean.TargetClass.*(..))": 어떤 메서드를 대상으로 포인트컷을 적용할지 명시한다.
mic050r added a commit that referenced this issue Oct 2, 2024
- 메소드 호출 전에 동작
mic050r added a commit that referenced this issue Oct 2, 2024
- 메소드 호출 흐에 동작
mic050r added a commit that referenced this issue Oct 2, 2024
- 메소드 호출 전과 후에 동작
mic050r added a commit that referenced this issue Oct 2, 2024
- 정상 종료 시 동작
mic050r added a commit that referenced this issue Oct 2, 2024
- 예외 발생 시 동작
mic050r added a commit that referenced this issue Oct 2, 2024
- 최신 버전으로 수정해서 오류 해결
@mic050r mic050r added the documentation Improvements or additions to documentation label Oct 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

1 participant