๐Ÿฅ”๊ฐ์ž๋„ ์ดํ•ดํ•˜๋Š” AOP

Twoweekheeยท2024๋…„ 6์›” 18์ผ
post-thumbnail

AOP ๊ฐœ๋…

=Aspect-Oriented Programming
=๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๊ณตํ†ต๊ด€์‹ฌ์‚ฌ์™€ ํ•ต์‹ฌ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ธฐ๋Šฅ๋Œ€๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

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

๊ทธ๋ž˜์„œ ์Šคํ”„๋ง์—์„œ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด AOP ์ด๋‹ค.
ํด๋ž˜์Šค์— ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์„œ AOP๋ฅผ ๋งŒ๋“ ๋‹ค.

AOP ์ž„์„ ์ธ์ง€ํ•˜๊ฒŒ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ @Bean ์„ ๋“ฑ๋กํ•ด์„œ ์จ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. (@Componant ๋ฅผ ์ด์šฉํ•ด์„œ componantScan์„ ํ•ด์ฃผ์–ด๋„ ๋œ๋‹ค.)

@Component
@Aspect
public class TimeTraceAop {

@Around("execution(* hello.hellospring..*(..))")
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");}

}
}

@Aspect

@Aspect ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์•ผ AOP๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

@Around

@Around("execution( hello.hellospring..(..))")

์ด AOP๊ฐ€ ์ ์šฉ๋˜๋Š” ๋ฒ”์œ„๋ฅผ ์จ์ฃผ์–ด์•ผ ํ•œ๋‹ค. execution ์•ˆ์— ํŒจํ‚ค์ง€ ๋ช…์„ ์จ์ฃผ๋ฉด ๊ทธ ํŒจํ‚ค์ง€ ํ•˜์œ„์— ์žˆ๋Š” ๋ชจ๋“  ๋งค์„œ๋“œ์— ์ ์šฉ์ด ๋œ๋‹ค.

ProceedingJoinPoint

ProceedingJoinPoint๋Š”

  • Advice(Advice: ์–ธ์ œ ๊ณตํ†ต ๊ด€์‹ฌ ๊ธฐ๋Šฅ์„ ํ•ต์‹ฌ ๋กœ์ง์— ์ ์šฉํ•  ์ง€๋ฅผ ์ •์˜) ์ฝ”๋“œ ๋‚ด์—์„œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•˜๊ณ , ์ด๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • JoinPoint๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด

  • Around advice(@Around)์—์„œ๋งŒ ์ง€์›๋˜๋Š” JoinPoint

  • Target Object์˜ ๋ฉ”์†Œ๋“œ ์ •๋ณด๋ฅผ ํฌํ•จ

  • ์ด๋ถ€๋ถ„์€

ProceedingJoinPoint.proceed()๋Š” Target์˜ ๋ฉ”์†Œ๋“œ ์‹คํ–‰์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค

profile
๊ฐœ๋ฐœํ•˜๋Š” ๊ฐ์ž, ์ด์„ธ์ƒ ๊ฐ์ž ๋ชจ์—ฌ๋ผ~

0๊ฐœ์˜ ๋Œ“๊ธ€