[Spring][ํ˜ผ๊ณต] 7. AOP(Aspect Oriented Programming) - (2) AOP ์ ์šฉ

2021. 10. 31. 14:55ยท๐Ÿ“ Language/โœ JAVA

AOP

2. AOP ์ ์šฉ

1) ์ ์šฉ

AOP

  • ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(cross-cutting concern)๊ณผ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(core concern)์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์‹œ๊ฐ„ ์ธก์ • ๋กœ์ง์„ ๋ณ„๋„์˜ ๊ณตํ†ต ๋กœ์ง์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์›ํ•˜๋Š” ๊ณณ์—๋งŒ ์ ์šฉํ•œ๋‹ค.
  • ๋งŒ์•ฝ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด ์ด ๋กœ์ง๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.
package hello.hello.spring.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Component // string been ๋“ฑ๋ก: ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ ๋˜๋Š” SpringConfig ๋“ฑ๋ก
@Aspect // aop
public class TimeTraceAop {

    @Around("execution(* hello.hello.spring..*(..))") // ์–ด๋””์— ์ ์šฉํ•  ๊ฒƒ์ธ์ง€(Targeting)
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        System.out.println("START: " + joinPoint.toString());
        try {
            return joinPoint.proceed();
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;
            System.out.println("END: " + joinPoint.toString() + " " + timeMs + "ms");
        }
    }
}

 

2) ๊ฒฐ๊ณผ

  • ๊ธฐ์กด์— ๊ฐ ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ์ถ”๊ฐ€ํ–ˆ๋˜ ์‹œ๊ฐ„ ์ธก์ • ๋กœ์ง์„ ์‚ญ์ œํ•ด๋„ ์‹œ๊ฐ„ ์ธก์ •์ด ๋˜๊ณ  ์žˆ๋‹ค.

์‹œ๊ฐ„ ์ธก์ • ๊ฒฐ๊ณผ

 

3) ๋™์ž‘ ๋ฐฉ์‹

AOP ์ ์šฉ ์ „ ์˜์กด๊ด€๊ณ„
AOP ์ ์šฉ ์ „ ์ „์ฒด ๊ทธ๋ฆผ

  • AOP ์ ์šฉ ์ „์—๋Š” Controller๊ฐ€ Service๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ Controller๊ฐ€ Service ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Service ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๋‹จ์ˆœํ•œ ๋ฐฉ์‹์ด๋‹ค.

AOP ์ ์šฉ ํ›„ ์˜์กด๊ด€๊ณ„
AOP ์ ์šฉ ํ›„ ์ „์ฒด ๊ทธ๋ฆผ

  • ํ”„๋ก์‹œ ๋ฐฉ์‹์˜ AOP
  • AOP ์ ์šฉ ํ›„์—๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•  ๋•Œ ์‹ค์ œ Service ์•ž์— ํ”„๋ก์‹œ Service๋ฅผ ๋งŒ๋“ค์–ด ์„ธ์šด๋‹ค.
  • ํ”„๋ก์‹œ Service์˜ ๋™์ž‘์ด ๋๋‚˜๋ฉด joinPoint.proceed()๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ์ด๋•Œ ์‹ค์ œ Service๊ฐ€ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ๊ทธ๋ž˜์„œ Controller๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” Service๋Š” ์‹ค์ œ๊ฐ€ ์•„๋‹Œ ํ”„๋ก์‹œ Service์ด๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด DI์ด๋‹ค.
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Language/โœ JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring][ํ˜ผ๊ณต] 7. AOP(Aspect Oriented Programming) - (1) AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ
  • [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (6) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
  • [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (5) JPA
  • [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (4) ์Šคํ”„๋ง JDBC Template
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[Spring][ํ˜ผ๊ณต] 7. AOP(Aspect Oriented Programming) - (2) AOP ์ ์šฉ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”