์Šคํ”„๋ง AOP

2024. 5. 19. 21:13ยท ๐Ÿ“–์Šคํ„ฐ๋””/์Šคํ”„๋ง
๋ชฉ์ฐจ
  1. ์Šคํ”„๋ง AOP๋ž€?
  2.  
  3. ์Šคํ”„๋ง AOP์˜ ๊ตฌ์„ฑ ์š”์†Œ
  4.  
  5. ์Šคํ”„๋ง AOP ์„ค์ •ํ•˜๊ธฐ
  6.  
  7.  
  8. ์Šคํ”„๋ง AOP์˜ ์–ด๋…ธํ…Œ์ด์…˜
  9.  
  10.  
  11. ์Šคํ”„๋ง AOP์˜ ์‚ฌ์šฉ ์˜ˆ
  12.  
  13. ์ •๋ฆฌ

์Šคํ”„๋ง AOP๋ž€?

AOP์˜ ๊ฐœ๋…

AOP(Aspect-Oriented Programming, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ(Cross-Cutting Concerns)๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ž„. ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ž€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ๋กœ๊น…, ๋ณด์•ˆ, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋“ฑ์ด ํฌํ•จ๋จ.

 

AOP์˜ ์žฅ์ 

  • ์ฝ”๋“œ ์ค‘๋ณต ๊ฐ์†Œ: ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ.
  • ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ: ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ํ•ด๋‹น ๊ธฐ๋Šฅ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•จ.
  • ๋ชจ๋“ˆํ™”: ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ์˜ ๋ชจ๋“ˆํ™”๋ฅผ ํ–ฅ์ƒ์‹œํ‚ด.

 

์Šคํ”„๋ง AOP์˜ ๊ตฌ์„ฑ ์š”์†Œ

Aspect

Aspect๋Š” ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™”ํ•œ ๊ฒƒ์ž„. @Aspect ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ.

@Aspect
public class LoggingAspect {
    // advice ์ •์˜
}

 

Join Point

Join Point๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ค‘์— ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์„ ์˜๋ฏธํ•จ. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ, ๊ฐ์ฒด ์ƒ์„ฑ ๋“ฑ์ด Join Point๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ.

 

Advice

Advice๋Š” ํŠน์ • Join Point์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•จ. @Before, @After, @Around ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ.

 

Pointcut

Pointcut์€ ํŠน์ • Join Point๋ฅผ ์„ ํƒํ•˜๋Š” ํ‘œํ˜„์‹์ž„. @Pointcut ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ.

@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceMethods() {
}

 

Weaving

Weaving์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ ์— Aspect๋ฅผ ์‹ค์ œ ๊ฐ์ฒด์— ์ ์šฉํ•˜๋Š” ๊ณผ์ •์ž„. ์Šคํ”„๋ง์€ ๋Ÿฐํƒ€์ž„ ์œ„๋น™์„ ์ง€์›ํ•จ.

 

์Šคํ”„๋ง AOP ์„ค์ •ํ•˜๊ธฐ

 

XML ์„ค์ •

XML ํŒŒ์ผ์„ ํ†ตํ•ด ์Šคํ”„๋ง AOP๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž„.

<aop:aspectj-autoproxy/>
<bean id="loggingAspect" class="com.example.aspect.LoggingAspect"/>

 

Java Config ์„ค์ •

Java Config๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ”„๋ง AOP๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž„.

@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
    @Bean
    public LoggingAspect loggingAspect() {
        return new LoggingAspect();
    }
}

 

 

์Šคํ”„๋ง AOP์˜ ์–ด๋…ธํ…Œ์ด์…˜

 

@Aspect

@Aspect ์–ด๋…ธํ…Œ์ด์…˜์€ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ Aspect์ž„์„ ๋‚˜ํƒ€๋ƒ„.

@Aspect
public class LoggingAspect {
    // advice ์ •์˜
}

 

@Before

@Before ์–ด๋…ธํ…Œ์ด์…˜์€ ํŠน์ • Join Point ์ด์ „์— ์‹คํ–‰๋  ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•จ.

@Aspect
public class LoggingAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore() {
        System.out.println("Method execution start");
    }
}

 

@After

@After ์–ด๋…ธํ…Œ์ด์…˜์€ ํŠน์ • Join Point ์ดํ›„์— ์‹คํ–‰๋  ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•จ.

@Aspect
public class LoggingAspect {
    @After("execution(* com.example.service.*.*(..))")
    public void logAfter() {
        System.out.println("Method execution end");
    }
}

 

@Around

@Around ์–ด๋…ธํ…Œ์ด์…˜์€ ํŠน์ • Join Point ์ „ํ›„์— ์‹คํ–‰๋  ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•˜๋ฉฐ, Join Point์˜ ์‹คํ–‰์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Œ.

@Aspect
public class LoggingAspect {
    @Around("execution(* com.example.service.*.*(..))")
    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("Method execution start");
        Object result = joinPoint.proceed();
        System.out.println("Method execution end");
        return result;
    }
}

 

 

์Šคํ”„๋ง AOP์˜ ์‚ฌ์šฉ ์˜ˆ

 

์„œ๋น„์Šค ํด๋ž˜์Šค ์ •์˜

@Service
public class MyService {
    public void performTask() {
        System.out.println("Performing task");
    }
}

 

๋กœ๊น… Aspect ์ •์˜

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.service.MyService.performTask(..))")
    public void logBefore() {
        System.out.println("Method execution start");
    }

    @After("execution(* com.example.service.MyService.performTask(..))")
    public void logAfter() {
        System.out.println("Method execution end");
    }
}

 

์„ค์ • ํด๋ž˜์Šค ์ •์˜

@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}

 

๋ฉ”์ธ ํด๋ž˜์Šค ์ •์˜

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        MyService service = context.getBean(MyService.class);
        service.performTask();
    }
}

 

์ •๋ฆฌ

์Šคํ”„๋ง AOP๋Š” ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ด๊ณ , ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž„. Aspect, Join Point, Advice, Pointcut, Weaving ๋“ฑ์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ , XML ์„ค์ • ๋˜๋Š” Java Config ์„ค์ •์„ ํ†ตํ•ด AOP๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ. @Before, @After, @Around ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ.

'๐Ÿ“–์Šคํ„ฐ๋”” > ์Šคํ”„๋ง' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์Šคํ”„๋ง ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์ž๋™ ๋นˆ ๋“ฑ๋ก  (0) 2024.05.19
์Šคํ”„๋ง MVC ๊ธฐ๋ณธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ ํ•ต์‹ฌ ๊ฐœ๋…  (0) 2024.05.19
[์Šคํ”„๋ง] - ์Šคํ”„๋ง ์ปดํฌ๋„ŒํŠธ ์Šค์บ”  (0) 2024.04.15
  1. ์Šคํ”„๋ง AOP๋ž€?
  2.  
  3. ์Šคํ”„๋ง AOP์˜ ๊ตฌ์„ฑ ์š”์†Œ
  4.  
  5. ์Šคํ”„๋ง AOP ์„ค์ •ํ•˜๊ธฐ
  6.  
  7.  
  8. ์Šคํ”„๋ง AOP์˜ ์–ด๋…ธํ…Œ์ด์…˜
  9.  
  10.  
  11. ์Šคํ”„๋ง AOP์˜ ์‚ฌ์šฉ ์˜ˆ
  12.  
  13. ์ •๋ฆฌ
'๐Ÿ“–์Šคํ„ฐ๋””/์Šคํ”„๋ง' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์˜์กด์„ฑ ์ฃผ์ž… ๊ฐœ๋…
  • ์Šคํ”„๋ง ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์ž๋™ ๋นˆ ๋“ฑ๋ก
  • ์Šคํ”„๋ง MVC ๊ธฐ๋ณธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ ํ•ต์‹ฌ ๊ฐœ๋…
  • [์Šคํ”„๋ง] - ์Šคํ”„๋ง ์ปดํฌ๋„ŒํŠธ ์Šค์บ”
mmmhmm
mmmhmm
๋„ค๋ชจํ•˜๋‚˜ ๋™๊ทธ๋ผ๋ฏธ ๋‘๊ฐœ
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
mmmhmm
hmmumm
mmmhmm
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (50)
    • ๐Ÿ–ฅ๏ธํ”„๋กœ์ ํŠธ (3)
    • ๐Ÿ’กํ”„๋กœ์ ํŠธ ๋ฌธ์ œํ•ด๊ฒฐ (6)
    • ๐Ÿ”ฆ๊ณต๋ถ€ ๋ฌธ์ œํ•ด๊ฒฐ๊ณผ์ • (2)
    • ๐Ÿ“–์Šคํ„ฐ๋”” (38)
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (10)
      • ์Šคํ”„๋ง (6)
      • ๋„คํŠธ์›Œํฌ (10)
      • ์šด์˜์ฒด์ œ (12)
hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.2
mmmhmm
์Šคํ”„๋ง AOP
์ƒ๋‹จ์œผ๋กœ

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

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.