๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
BE/๐Ÿƒ Spring

[Spring Boot] AOP ๊ฐœ๋… ์ •๋ฆฌ

by ํ‹ด๋”” 2024. 11. 17.
๋ฐ˜์‘ํ˜•

์˜ˆ์‹œ ์ฝ”๋“œ์™€ ์ž์„ธํ•œ ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

 

AOP๋ž€

  • Aspect-Orineted Programing, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฝ”๋“œ์—์„œ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํŠน์ • ๊ด€์‹ฌ์‚ฌ(๊ธฐ๋Šฅ)์„ ๋ถ„๋ฆฌํ™” ํ•˜์—ฌ ์บก์Šํ™”
    • ๋ชจ๋“ˆํ™” ํ–ฅ์ƒ
    • cross-cutting concerns (ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ) ์ฒ˜๋ฆฌ์— ์œ ์šฉ
  • ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ์ธ์ฆ/๊ถŒํ•œ ๋ถ€์—ฌ, ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌํ˜„๊ณผ ๊ฐ™์€ ํŠน์ • ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ

 

AOP๋Š” ์™œ ํ•„์š”ํ• ๊นŒ?

  • ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํŠน์ • ๊ธฐ๋Šฅ์ธ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์คŒ
  • ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ
    • ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์ง์ ‘์ ์ธ ๊ด€๋ จ์ด ์—†๋Š” ๊ด€์‹ฌ์‚ฌ
    • ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ฉ”์„œ๋“œ ๋งˆ๋‹ค ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง€๊ณ , ๋ณ€๊ฒฝ์‹œ ์—ฌ๋Ÿฌ ๊ณณ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค.
    • ex
      • ๋กœ๊ทธ ์ž‘์„ฑ - ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋  ๋•Œ ๋งˆ๋‹ค ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๋Š” ์ฝ”๋“œ
      • ํŠธ๋žœ์žญ์…˜ - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ๋Š” ๊ธฐ๋Šฅ
      • ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๊ฒ€์‚ฌ - ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ๊ถŒํ•œ์„ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ
  • ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ
  • ๋ฉ”์ธ ๋กœ์ง์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

 

AOP ์ฃผ์š” ๊ฐœ๋…๊ณผ ์›๋ฆฌ

Aspect

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋ถ„๋ฆฌํ•ด๋‚ธ ํŠน์ • ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™”ํ•œ ๋‹จ์œ„
  • ๋กœ๊น…์„ ์ˆ˜ํ–‰ํ•˜๋Š” aspect
  • ์€ํ–‰ ์‹œ์Šคํ…œ์ด ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์€ ํŠน์ • ๊ด€์‹ฌ์‚ฌ์ธ aspect์— ํ•ด๋‹น๋  ์ˆ˜ ์žˆ๋‹ค. 
  • ์œ„ ๊ทธ๋ฆผ์—์„œ ํŠน์ • ์‹œ์ ์— ์ˆ˜ํ–‰ํ•  ํŠน์ • ๊ด€์‹ฌ์‚ฌ์ธ ๊ธฐ๋Šฅ์„ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋‹ค

 

 Join Point

  • Join Point๋Š” ํŠน์ • ๊ด€์‹ฌ์‚ฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ›„๋ณด ์ง€์ ๋“ค๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค
  • AOP์™€ ์ž๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค์˜ Join Point ๊ฐœ๋…์ด ๋‹ค๋ฅด๋‹ค
    • ์Šคํ”„๋ง : ์‹คํ–‰ ์‹œ์ ์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” "๊ฐ์ฒด". ์ธํ„ฐํŽ˜์ด์Šค๋กœ์„œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค
    • ๊ฐœ๋…์  : ์‹คํ–‰ ์‹œ์ ์„ ์˜๋ฏธํ•˜๋ฉฐ ๋ฉ”์†Œ๋“œ ์‹คํ–‰, ์ƒ์„ฑ์ž ํ˜ธ์ถœ, ํ•„๋“œ ๊ฐ’ ๋ณ€๊ฒฝ ๋“ฑ์ด Joint Point๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค
  • ์œ„ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ํŠน์ • ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ, ๊ทธ๋ฆผ์—๋Š” ๋‚˜์™€ ์žˆ์ง€ ์•Š์€ ์ƒ์„ฑ์ž ํ˜ธ์ถœ, ํ•„๋“œ ๊ฐ’ ๋ณ€๊ฒฝ ๋“ฑ ๋ชจ๋“  ์‹œ์ ๋“ค์ด Join Point๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋™์‹œ์— Pointcut์˜ ํ›„๋ณด์ด์ž Advice๊ฐ€ ์‚ฝ์ž… ๋  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์ด ๋œ๋‹ค
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์€ํ–‰ ์‹œ์Šคํ…œ์—์„œ  Join Point๋Š” ๊ณ„์ขŒ ์ƒ์„ฑ, ์ถœ๊ธˆ, ์ž…๊ธˆ ๋“ฑ์ด ํŠน์ • ๊ด€์‹ฌ์‚ฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ›„๋ณด ์ง€์ ๋“ค์ด๋‹ค.

 

 Pointcut

  • Advice๋ฅผ ์ ์šฉํ•  ๋ฉ”์„œ๋“œ์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•œ๋‹ค
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์€ํ–‰ ์‹œ์Šคํ…œ์—์„œ ํฌ์ธํŠธ ์ปท์€ ๊ณ„์ขŒ ์ƒ์„ฑ, ์ถœ๊ธˆ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ํ›„๋ณด ์ง€์  ์ค‘ ํŠน์ • ๊ด€์‹ฌ์‚ฌ์ธ ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ง€์ .
  • ์Šคํ”„๋ง์—์„œ๋Š” Advice๊ฐ€ ์‹คํ–‰๋  Join Point๋ฅผ ํ•„ํ„ฐ๋ง ํ•˜๋Š” ํ‘œํ˜„์‹์ด ์žˆ์œผ๋ฉฐ ๋ฉ”์„œ๋“œ ์ด๋ฆ„, ํŒจํ‚ค์ง€, ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ์— ๋”ฐ๋ผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ํ‘œํ˜„์‹์€ ๋ฆฌํ„ดํƒ€์ž… ํŒจํ‚ค์ง€๊ฒฝ๋กœ ํด๋ž˜์Šค๋ช… ๋ฉ”์†Œ๋“œ๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜) ๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

Advice

  • ์–ธ์ œ ์–ด๋–ป๊ฒŒ ํ•˜๊ฒ ๋‹ค์— ํ•ด๋‹นํ•จ. ์ง€์ •ํ•œ ๊ทธ ์ง€์ (Pointcut)์—์„œ ์ˆ˜ํ–‰ํ•  ๋™์ž‘(Aspect)๊ณผ ๊ทธ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์‹œ์ 
  • Aspect๊ฐ€ ์–ธ์ œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ์ง€ ์ •์˜ํ•œ๋‹ค
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์€ํ–‰ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ถœ๊ธˆ์‹œ ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋กœ ํ‘œํ˜„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์Šคํ”„๋ง์—์„œ๋Š” ์–ด๋“œ๋ฐ”์ด์Šค ๋™์ž‘ ์ง€์ ์„ ์• ๋„ˆํ…Œ์ด์…˜์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค
    • Before : ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „
    • After : ๋ฉ”์„œ๋“œ ์‹คํ–‰ ํ›„
    • AfterReturning : ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋œ ํ›„
    • AfterThrowing : ๋ฉ”์„œ๋“œ์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ ํ•œ ์ˆ˜ ๋™์ž‘
    • Around : ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „ํ›„ ์‹œ์ ์— ๋™์ž‘ 

 Weaving

  • ํฌ์ธํŠธ์ปท์œผ๋กœ ์ง€์ •ํ•œ ํ•ต์‹ฌ ๊ด€์‹ฌ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์–ด๋“œ๋ฐ”์ด์Šค์— ํ•ด๋‹นํ•˜๋Š” ํšก๋‹จ ๊ด€์‹ฌ ๋ฉ”์†Œ๋“œ(Advice)๊ฐ€ ์‚ฝ์ž…๋˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค.
  • AOP์—์„œ ๋Ÿฐํƒ€์ž„์— ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์œ„๋น™์ด ์ผ์–ด๋‚œ๋‹ค

 

 ์ถ”๊ฐ€ ์˜ˆ์‹œ

ํšก๋‹จ๋ณด๋„

  • JoinPoint : ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ํšก๋‹จ๋ณด๋„๋“ค
  • Pointcut : ์‹ค์ œ๋กœ ์–ด๋Š ํšก๋‹จ๋ณด๋„๋ฅผ ๊ฑด๋„ ๊ฒƒ์ธ์ง€.
  • Advice : ์‹ค์ œ๋กœ ์–ธ์ œ ๊ฑด๋„ ๊ฒƒ์ธ์ง€, ์‹ ํ˜ธ๋“ฑ์ด ์ดˆ๋ก๋ถˆ๋กœ ๋ฐ”๋€Œ๊ณ  ๋‚œ ํ›„ ๊ฑด๋„ˆ๊ฒ ๋‹ค

 

๋กœ๊น…

  • JoinPoint : ๋กœ๊น…์€ ์–ด๋Š ์‹œ์ ์—๋“  ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์œ ์ € ์ƒ์„ฑ์‹œ ๋กœ๊น…, request, response์‹œ์— ๋กœ๊น… ๋“ฑ
  • PointCut : createUser ๋ฉ”์†Œ๋“œ์—์„œ ๋กœ๊น…์„ ์ˆ˜ํ–‰ํ•˜๊ฒ ๋‹ค
  • Advice : ์‹œ์ ์„ ์ง€์ •. ์œ ์ €๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๋กœ๊ทธ๋กœ ๋‚จ๊น€

 

AOP์˜ ์žฅ๋‹จ์ 

์žฅ์ 

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

๋‹จ์ 

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

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€