[Spring] @Aspect 와 AOP 톺아보기

2022. 6. 5. 20:18ㆍBackend/🌿 Spring

이전 ν¬μŠ€νŒ…μ„ 톡해, μŠ€ν”„λ§μ—μ„œλŠ” μžλ™ ν”„λ‘μ‹œ 생성기 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ ν”„λ‘μ‹œλ₯Ό λ³„λ„μ˜ 섀정없이 생성할 수 μžˆμ—ˆλ‹€. 이 λ•Œ μžλ™ ν”„λ‘μ‹œ μƒμ„±κΈ°λŠ” μ–΄λ“œλ°”μ΄μ €λ₯Ό λͺ¨λ‘ μ°Ύμ•„ μžλ™μœΌλ‘œ ν”„λ‘μ‹œ 객체λ₯Ό μŠ€ν”„λ§ 빈으둜 λ“±λ‘ν•œλ‹€.

이번 ν¬μŠ€νŒ…μ—μ„œλŠ”, μ§€κΈˆκΉŒμ§€ 직접 Advisorλ₯Ό λ§Œλ“€μ—ˆλ˜ 것을 @Aspect μ–΄λ…Έν…Œμ΄μ…˜μ„ λŒ€μ‹  μ‚¬μš©ν•˜μ—¬ λ§Œλ“€μ–΄λ³΄κ³ , 이 @Aspect κ°€ μŠ€ν”„λ§ AOP κ°œλ…μ— μ–΄λ–»κ²Œ μ μš©λ˜λŠ”μ§€λ„ μ•Œμ•„λ³΄κ² λ‹€.

 

@Aspect Proxy

μžλ™ ν”„λ‘μ‹œ 생성기(AnnotationAwareAspectJAutoProxyCreator) λŠ” Advisor λ₯Ό μžλ™μœΌλ‘œ 찾아와(Advisor Type 탐색) ν•„μš”ν•œ 곳에 ν”„λ‘μ‹œλ₯Ό μƒμ„±ν•˜μ—¬ μ μš©ν•œλ‹€. μžλ™ ν”„λ‘μ‹œ μƒμ„±κΈ°λŠ” 좔가적인 μ—­ν• λ‘œ @Aspect μ–΄λ…Έν…ŒμΈμ…˜μ„ μ°Ύκ³ , 이것을 Advisor 둜 λ§Œλ“€μ–΄μ€€λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 이름 μ•žμ— AnnotationAware κ°€ λΆ™μ–΄μžˆλŠ” 것이닀. 

 

μžλ™ ν”„λ‘μ‹œ μƒμ„±κΈ°λŠ” 2가지 일을 ν•œλ‹€.
1. μš°μ„  @Aspect μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뢙은 클래슀λ₯Ό μ–΄λ“œλ°”μ΄μ €λ‘œ λ³€ν™˜ν•˜μ—¬ μ €μž₯ν•œλ‹€.
2. μ–΄λ“œλ°”μ΄μ €λ₯Ό 기반으둜 ν”„λ‘μ‹œλ₯Ό μƒμ„±ν•œλ‹€. μ–΄λ“œλ°”μ΄μ € 기반의 μ˜λ―ΈλŠ”, μ–΄λ“œλ°”μ΄μ €κ°€ ν¬ν•¨ν•œ ν¬μΈνŠΈμ»·μ„ μ‚¬μš©ν•΄ ν”„λ‘μ‹œ 생성 λŒ€μƒμ„ κ²°μ •ν•œλ‹€λŠ” 것이닀.

@Aspect λ₯Ό μ–΄λ“œλ°”μ΄μ €λ‘œ λ³€ν™˜ν•΄μ„œ μ €μž₯ν•˜λŠ” 과정을 μ•Œμ•„λ³΄μž. 

1. μ‹€ν–‰ : μŠ€ν”„λ§ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œλ”© μ‹œμ μ— μžλ™ ν”„λ‘μ‹œ 생성기λ₯Ό ν˜ΈμΆœν•œλ‹€.
2. λͺ¨λ“  @Aspect 빈 쑰회 : μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ—μ„œ @Aspect μ• λ…Έν…Œμ΄μ…˜μ΄ 뢙은 μŠ€ν”„λ§ λΉˆμ„ λͺ¨λ‘ μ‘°νšŒν•œλ‹€.

3. μ–΄λ“œλ°”μ΄μ € 생성 : @Aspect μ–΄λ“œλ°”μ΄μ € λΉŒλ”λ₯Ό 톡해 @Aspect μ–΄λ…Έν…Œμ΄μ…˜ 정보λ₯Ό 기반으둜 μ–΄λ“œλ°”μ΄μ €λ₯Ό μƒμ„±ν•œλ‹€. 

4. @Aspect 기반 μ–΄λ“œλ°”μ΄μ € μ €μž₯ : μƒμ„±ν•œ μ–΄λ“œλ°”μ΄μ €λ₯Ό @Aspect μ–΄λ“œλ°”μ΄μ € λΉŒλ” 내뢀에 μ €μž₯ν•œλ‹€.

@Asepct μ–΄λ“œλ°”μ΄μ € λΉŒλ”

BeanFactoryAspectAdvisorsBuilder 클래슀둜, @Aspect 정보λ₯Ό 기반으둜 포인트컷, μ–΄λ“œλ°”μ΄μŠ€, μ–΄λ“œλ°”μ΄μ €λ₯Ό μƒμ„±ν•˜κ³  λ³΄κ΄€ν•˜λŠ” 것을 λ‹΄λ‹Ήν•œλ‹€. @Aspect 의 정보λ₯Ό 기반으둜 μ–΄λ“œλ°”μ΄μ €λ₯Ό λ§Œλ“€κ³ , @Aspect μ–΄λ“œλ°”μ΄μ € λΉŒλ” λ‚΄λΆ€ μ €μž₯μ†Œμ— μΊμ‹œν•˜κ³ , μΊμ‹œμ— μ–΄λ“œλ°”μ΄μ €κ°€ 이미 λ§Œλ“€μ–΄μ Έ μžˆλŠ” 경우 μΊμ‹œμ— μ €μž₯된 μ–΄λ“œλ°”μ΄μ €λ₯Ό λ°˜ν™˜ν•œλ‹€.

μžλ™ ν”„λ‘μ‹œ 생성기 λ™μž‘ κ³Όμ •

1. 생성 : μŠ€ν”„λ§ 빈 λŒ€μƒ 객체 생성
2. 전달 : 객체λ₯Ό μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— λ“±λ‘ν•˜κΈ° 직전, 빈 ν›„μ²˜λ¦¬κΈ°μ— 전달
3-1. Advisor 빈 쑰회 : @Bean μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뢙은 Advisor 객체λ₯Ό λͺ¨λ‘ μ‘°νšŒν•œλ‹€.
3-2. @Aspect Advisor 쑰회 : @Aspect μ–΄λ“œλ°”μ΄μ € λΉŒλ” 내뢀에 μ €μž₯된 Advisor λ₯Ό λͺ¨λ‘ μ‘°νšŒν•œλ‹€.
4. ν”„λ‘μ‹œ 적용 λŒ€μƒ 체크 : μ‘°νšŒν•œ Advisor 의 ν¬μΈνŠΈμ»·μ„ μ‚¬μš©ν•΄, ν•΄λ‹Ή 객체가 ν”„λ‘μ‹œ 적용 λŒ€μƒμΈμ§€ λͺ¨λ‘ μ²΄ν¬ν•œλ‹€.
5. ν”„λ‘μ‹œ 생성 및 빈 등둝 : ν”„λ‘μ‹œ 적용 λŒ€μƒμ΄λ©΄ ν”„λ‘μ‹œλ₯Ό μƒμ„±ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆμ— λ“±λ‘ν•œλ‹€. 그렇지 μ•ŠμœΌλ©΄ 원본 객체λ₯Ό λ°˜ν™˜ν•˜μ—¬ μŠ€ν”„λ§ 빈으둜 λ“±λ‘ν•œλ‹€.

AOP λž€?

사전적 μ •μ˜λŠ” 관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Aspect Orient Programming)을 μ˜λ―Έν•˜μ§€λ§Œ 크게 와닿지 μ•ŠλŠ”λ‹€. μ˜ˆμ‹œλ‘œ AOP λ₯Ό μ΄ν•΄ν•΄λ³΄μž.

μŠ€ν”„λ§μ—μ„œλŠ” 주둜 Service λ ˆμ΄μ–΄μ— λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ‚˜νƒ€λ‚΄λ©°, λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심 κΈ°λŠ₯이라 μΉ­ν•  수 μžˆλ‹€. 이 λ•Œ Service λ ˆμ΄μ–΄μ˜ 각 λ©”μ„œλ“œλ§ˆλ‹€ 둜그λ₯Ό 찍고 μ‹Άλ‹€λ©΄, 각 λ©”μ„œλ“œλ§ˆλ‹€ 둜그 μ‚½μž… λ‘œμ§μ„ λ„£κ±°λ‚˜, λ‘œκΉ… μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό 각 λ©”μ„œλ“œμ—μ„œ ν˜ΈμΆœν•  수 μžˆλ‹€. 이런 둜그 좔적 λ‘œμ§μ€ λΆ€κ°€ κΈ°λŠ₯이라 λΆ€λ₯Ό 수 μžˆλ‹€.

그런데 μ„œλΉ„μŠ€ λ ˆμ΄μ–΄λ₯Ό λ„˜μ–΄, 컨트둀러 λ ˆμ΄μ–΄μ™€ λ ˆν¬μ§€ν† λ¦¬ λ ˆμ΄μ–΄μ—μ„œλ„ 둜그λ₯Ό 찍고 μ‹Άλ‹€λ©΄? μ½”λ“œ κ³³κ³³μ—μ„œ 둜그 호좜 λ‘œμ§μ„ μ‚½μž…ν•΄μ•Όν•˜κ³ , μ΄λŠ” μ½”λ“œμ˜ 가독성도 λ–¨μ–΄μ§ˆ λΏλ”λŸ¬ SRP도 지킀지 λͺ»ν•˜λŠ” κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•œλ‹€.

즉 λΆ€κ°€ κΈ°λŠ₯을 μ μš©ν•˜λ €λ©΄ μ•„λž˜μ™€ 같은 λ¬Έμ œκ°€ μ‘΄μž¬ν•  수 μžˆλ‹€.

  • λΆ€κ°€ κΈ°λŠ₯을 μ μš©ν•  λ•Œ μ•„μ£Ό λ§Žμ€ 반볡이 ν•„μš”ν•˜λ‹€.
  • λΆ€κ°€ κΈ°λŠ₯이 μ—¬λŸ¬ 곳에 νΌμ Έμ„œ 쀑볡 μ½”λ“œλ₯Ό λ§Œλ“€μ–΄λ‚Έλ‹€.
  • λΆ€κ°€ κΈ°λŠ₯을 λ³€κ²½ν•  λ•Œ 쀑볡 λ•Œλ¬Έμ— λ§Žμ€ μˆ˜μ •μ΄ ν•„μš”ν•˜λ‹€.
  • λΆ€κ°€ κΈ°λŠ₯의 적용 λŒ€μƒμ„ λ³€κ²½ν•  λ•Œ λ§Žμ€ μˆ˜μ •μ΄ ν•„μš”ν•˜λ‹€.


이제 관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μΈ AOP κ°€ μ–΄λ–»κ²Œ 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ”μ§€ μ•Œμ•„λ³΄μž.

μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ λ³€κ²½ 지점은 ν•˜λ‚˜κ°€ 될 수 μžˆλ„λ‘ 잘 λͺ¨λ“ˆν™” ν•΄μ•Όν•œλ‹€. 그것이 SRP λ‹ˆκΉŒ.

 

AOP μ†Œκ°œ - Aspect (관점)

핡심 둜직 곳곳에 λΌμ—¬μžˆλŠ” λΆ€κ°€ κΈ°λŠ₯을 어디에 μ μš©ν• μ§€, 그리고 λΆ€κ°€ κΈ°λŠ₯ 자체λ₯Ό μ •μ˜ν•˜λŠ” μ½”λ“œλ₯Ό ν•˜λ‚˜λ‘œ 합쳐 λͺ¨λ“ˆμ„ λ§Œλ“€μ—ˆλŠ”λ°, 그것을 Aspect 라 ν•œλ‹€. μ‰½κ²Œ μ–˜κΈ°ν•΄μ„œ λΆ€κ°€ κΈ°λŠ₯ μžμ²΄μ™€, λΆ€κ°€ κΈ°λŠ₯을 어디에 μ μš©ν• μ§€ μ •μ˜(=Aspect)ν•œ  κ²ƒμ„ μ˜λ―Έν•œλ‹€. μ•žμ„œ μ„€λͺ…ν•œ @Aspect κ°€ λ°”λ‘œ 그것이며, μŠ€ν”„λ§μ΄ μ œκ³΅ν•˜λŠ” μ–΄λ“œλ°”μ΄μ €λ„ μ–΄λ“œλ°”μ΄μŠ€(λΆ€κ°€ κΈ°λŠ₯)κ³Ό 포인트컷(적용 λŒ€μƒ μœ„μΉ˜)을 가지기에 κ°œλ…μƒ ν•˜λ‚˜μ˜ Aspect 라 ν•  수 μžˆλ‹€.


AspectλŠ” κ΄€μ μ΄λΌλŠ” 뜻으둜, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ°”λΌλ³΄λŠ” 관점을 ν•˜λ‚˜μ˜ 객체가 μ•„λ‹Œ, νš‘λ‹¨ κ΄€μ‹¬μ‚¬λ‘œ λ³΄λŠ” 것이닀.

AOP λ₯Ό μ‚¬μš©ν•˜λ©΄, νš‘λ‹¨ κ΄€μ‹¬μ‚¬μ˜ κ΄€μ μœΌλ‘œ μ›ν•˜λŠ” 곳에 λΆ€κ°€ κΈ°λŠ₯을 뢙일 수 μžˆλ‹€.

 

AspectJ ν”„λ ˆμž„μ›Œν¬

AOP 의 λŒ€ν‘œμ μΈ κ΅¬ν˜„ ν”„λ ˆμž„μ›Œν¬λ‘œ, μŠ€ν”„λ§ AOP λŠ” λŒ€λΆ€λΆ„ AspectJ의 문법을 μ°¨μš©ν•œλ‹€. λͺ…ν™•νžˆ μ§šμ–΄μ•Ό ν•  점은, μŠ€ν”„λ§ AOP 와 AspectJ λŠ” λ³„λ„μ˜ κ΅¬ν˜„μ΄λ©°, μŠ€ν”„λ§ AOPλŠ” AspectJ κ°€ μ œκ³΅ν•˜λŠ” 일뢀 κΈ°λŠ₯만 μ œκ³΅ν•  뿐이닀.
AspectJ λ₯Ό μ‚¬μš©ν•˜λ©΄ νš‘λ‹¨ κ΄€μ‹¬μ‚¬μ˜ κΉ”λ”ν•œ λͺ¨λ“ˆν™”κ°€ κ°€λŠ₯해진닀.

  • 였λ₯˜ 검사 및 처리
  • 동기화
  • μ„±λŠ₯ μ΅œμ ν™”(캐싱)
  • λͺ¨λ‹ˆν„°λ§ 및 λ‘œκΉ…

 

AOP 적용 방식

μœ„ κ·Έλ¦Όμ—μ„œλ„ 봀듯이, AOP λ₯Ό μ‚¬μš©ν•˜λ©΄ 핡심 λ‘œμ§μ— λ…Ήμ•„μ Έ 있던 λΆ€κ°€ κΈ°λŠ₯을 μ™„μ „νžˆ 뢄리해낼 수 μžˆλ‹€.
κ·Έλ ‡λ‹€λ©΄ AOP λ₯Ό μ‚¬μš©ν•  λ•Œ λΆ€κ°€ κΈ°λŠ₯ λ‘œμ§μ€ μ–΄λ–€ λ°©μ‹μœΌλ‘œ μ‹€μ œ λ‘œμ§μ— μΆ”κ°€ 될 수 μžˆμ„κΉŒ?
3가지 방법이 μžˆλ‹€.

  1. 컴파일 μ‹œμ 

    νŠΉμ§•
    : .java μ†ŒμŠ€ μ½”λ“œλ₯Ό 컴파일러λ₯Ό 톡해 .class 파일둜 λ§Œλ“œλŠ” μ‹œμ μ— λΆ€κ°€ κΈ°λŠ₯ λ‘œμ§μ„ μΆ”κ°€ν•˜λŠ” 방식이닀. μ΄λ•ŒλŠ” AspectJκ°€ μ œκ³΅ν•˜λŠ” νŠΉλ³„ν•œ 컴파일러λ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€. 이런 μ‹μ˜ λΆ€κ°€ κΈ°λŠ₯ 둜직이 μΆ”κ°€ λ˜λŠ” 것을 μœ„λΉ™(weaving) 이라 ν•œλ‹€.
    단점 : 컴파일 μ‹œμ μ— λΆ€κ°€ κΈ°λŠ₯을 μ μš©ν•˜λ €λ©΄ νŠΉλ³„ν•œ μ»΄νŒŒμΌλŸ¬λ„ ν•„μš”ν•˜κ³  볡작 -> 잘 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 방식

  2. 클래슀 λ‘œλ”© μ‹œμ 

    νŠΉμ§• : μžλ°”λ₯Ό μ‹€ν–‰ν•˜λ©΄ .class νŒŒμΌμ„ JVM λ‚΄λΆ€μ˜ 클래슀 λ‘œλ”μ— λ³΄κ΄€ν•œλ‹€. μ΄λ•Œ μ€‘κ°„μ—μ„œ .class νŒŒμΌμ„ μ‘°μž‘ν•œ ν›„ JVM에 μ˜¬λ¦¬λŠ” 방식이 클래슀 λ‘œλ”© μ‹œμ μ— λΆ€κ°€ κΈ°λŠ₯을 μ μš©ν•˜λŠ” 것이닀. 이λ₯Ό λ‘œλ“œ νƒ€μž„ μœ„λΉ™ 이라 λΆ€λ₯Έλ‹€.
    단점 : μžλ°”λ₯Ό μ‹€ν–‰ν•  λ•Œ νŠΉλ³„ν•œ μ˜΅μ…˜(Java -javaagent)을 톡해 클래슀 λ‘œλ” μ‘°μž‘κΈ°λ₯Ό 지정해야 ν•˜λŠ”λ°, 이 뢀뢄이 번거둭고 μš΄μ˜ν•˜κΈ° μ–΄λ ΅λ‹€. -> 잘 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 방식

  3. λŸ°νƒ€μž„ μ‹œμ νŠΉμ§•

    νŠΉμ§• : 컴파일과 클래슀 λ‘œλ”©λ„ λ‹€ λλ‚œ ν›„ 이미 μžλ°”κ°€ μ‹€ν–‰λ˜κ³  μžˆλŠ” μ‹œμ μ„ μ˜λ―Έν•œλ‹€. (μžλ°”μ˜ main λ©”μ„œλ“œκ°€ μ‹€ν–‰λœ λ‹€μŒμ„ 의미) 즉 μžλ°” μ–Έμ–΄κ°€ μ œκ³΅ν•˜λŠ” λ²”μœ„ λ‚΄μ—μ„œ λΆ€κ°€ κΈ°λŠ₯을 μ μš©ν•΄μ•Ό ν•˜λ©°, μ§€κΈˆκΉŒμ§€ μ•Œμ•„λ³Έ ν”„λ‘μ‹œ λ°©μ‹μ˜ AOP κ°€ λŸ°νƒ€μž„ μ‹œμ μ— λΆ€κ°€ κΈ°λŠ₯을 μ μš©ν•˜λŠ” 방법이닀. 
    ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— AOP κΈ°λŠ₯에 일뢀 μ œμ•½μ΄ μžˆμ§€λ§Œ, νŠΉλ³„ν•œ μ»΄νŒŒμΌλŸ¬λ‚˜ λ³΅μž‘ν•œ μ˜΅μ…˜, 클래슀 λ‘œλ” μ‘°μž‘κΈ°λ₯Ό μ„€μ •ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. 즉 Spring 만 있으면 AOP λ₯Ό μ μš©ν•  수 μžˆλ‹€. (Spring 이 λ³΅μž‘ν•œ 섀정을 λͺ¨λ‘ ν•΄μ£ΌκΈ° λ•Œλ¬Έ)

 

AOP μš©μ–΄ 정리

쑰인 포인트 : μ–΄λ“œλ°”μ΄μŠ€κ°€ 적용될 수 μžˆλŠ” μœ„μΉ˜. 쑰인 ν¬μΈνŠΈλŠ” 좔상적인 κ°œλ…μ΄λΌ, AOP λ₯Ό μ μš©ν•  수 μžˆλŠ” λͺ¨λ“  지점이라 μƒκ°ν•˜λ©΄ λœλ‹€. μŠ€ν”„λ§ AOP λŠ” ν”„λ‘μ‹œ 방식을 μ‚¬μš©ν•˜κΈ°μ— 쑰인 ν¬μΈνŠΈλŠ” 항상 λ©”μ„œλ“œ μ‹€ν–‰ μ§€μ μœΌλ‘œ μ œν•œλœλ‹€.

포인트컷 : 쑰인 포인트 μ€‘μ—μ„œ μ–΄λ“œλ°”μ΄μŠ€κ°€ 적용될 μœ„μΉ˜λ₯Ό μ„ λ³„ν•˜λŠ” κΈ°λŠ₯. 필터링 이라 생각할 수 μžˆλ‹€. 주둜 AspectJ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•΄μ„œ μ§€μ •ν•œλ‹€.

νƒ€κ²Ÿ : μ–΄λ“œλ°”μ΄μŠ€κ°€ μ μš©λ˜λŠ” 객체, 포인트컷으둜 κ²°μ •λœλ‹€.

μ–΄λ“œλ°”μ΄μŠ€ : λΆ€κ°€ κΈ°λŠ₯. νŠΉμ • 쑰인 ν¬μΈνŠΈμ—μ„œ Aspect 에 μ˜ν•΄ μ·¨ν•΄μ§€λŠ” 쑰치(둜직) 이라 λ³Ό 수 μžˆλ‹€. Around, Before, After λ“±μ˜ λ‹€μ–‘ν•œ μ–΄λ“œλ°”μ΄μŠ€κ°€ μ‘΄μž¬ν•œλ‹€.

μ• μŠ€νŽ™νŠΈ : μ–΄λ“œλ°”μ΄μŠ€μ™€ ν¬μΈνŠΈμ»·μ„ λͺ¨λ“ˆν™” ν•œ κ°œλ…μœΌλ‘œ, @Aspect λ₯Ό μƒκ°ν•˜λ©΄ λœλ‹€. μ—¬λŸ¬ μ–΄λ“œλ°”μ΄μŠ€μ™€ 포인트컷이 ν•¨κ»˜ μ‘΄μž¬ν•œλ‹€. μ–΄λ“œλ°”μ΄μ €λŠ” ν•˜λ‚˜μ˜ μ–΄λ“œλ°”μ΄μŠ€μ™€ 포인트컷이 μ‘΄μž¬ν•œλ‹€ (차이점).

μ–΄λ“œλ°”μ΄μ € : ν•˜λ‚˜μ˜ μ–΄λ“œλ°”μ΄μŠ€μ™€ 포인트컷으둜 κ΅¬μ„±μœΌλ‘œ, μŠ€ν”„λ§ AOP μ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” νŠΉλ³„ν•œ μš©μ–΄λ‹€.

AOP ν”„λ‘μ‹œ : AOP κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ λ§Œλ“  ν”„λ‘μ‹œ 객체. JDK 동적 ν”„λ‘μ‹œμ™€ CGLIB ν”„λ‘μ‹œκ°€ ν•΄λ‹Ήλœλ‹€.


μ½”λ“œ 및 자료 좜처

 

μŠ€ν”„λ§ 핡심 원리 - κ³ κΈ‰νŽΈ - μΈν”„λŸ° | κ°•μ˜

μŠ€ν”„λ§μ˜ 핡심 원리와 κ³ κΈ‰ κΈ°μˆ λ“€μ„ 깊이있게 ν•™μŠ΅ν•˜κ³ , μŠ€ν”„λ§μ„ μžμ‹ μžˆκ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€., - κ°•μ˜ μ†Œκ°œ | μΈν”„λŸ°...

www.inflearn.com