๐ŸŒฑ TIL - Spring AOP

์กฐํ˜œ์€ยท2026๋…„ 4์›” 8์ผ

Java

๋ชฉ๋ก ๋ณด๊ธฐ
7/10

AOP์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

Spring์„ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด @Transactional์ด๋‚˜ ๊ณตํ†ต ๋กœ๊ทธ ์ฒ˜๋ฆฌ์ฒ˜๋Ÿผ, ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์ด ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋“ฑ์žฅํ•˜๋Š” ๊ฑธ ๋ณด๊ฒŒ ๋œ๋‹ค.

์ฒ˜์Œ์—๋Š” ๊ทธ๋ƒฅ ํ•„์š”ํ•œ ๊ณณ๋งˆ๋‹ค ๋„ฃ์œผ๋ฉด ๋˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€?๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์ •๋ฆฌํ•ด๋ณด๋‹ˆ ์ด๋Ÿฐ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ํ•ต์‹ฌ ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๋ฐ”๋กœ AOP์˜€๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด API ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ธก์ •ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ์ข…๋ฃŒ ์‹œ๊ฐ„์„ ์ง์ ‘ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ์—ฌ๊ธฐ์ €๊ธฐ ๋ฐ˜๋ณต๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ํ•ต์‹ฌ ๋กœ์ง๋ณด๋‹ค ๋ถ€๊ฐ€์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋” ๋ˆˆ์— ๋„๊ฒŒ ๋œ๋‹ค.

์ด๋Ÿด ๋•Œ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ํ•„์š”ํ•œ ์ง€์ ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด AOP๋‹ค.

๐Ÿ’ Spring AOP

AOP๋Š” Aspect Oriented Programming์˜ ์ค„์ž„๋ง๋กœ, ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ๊ณตํ†ต ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๊ณ , ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์€ ๋กœ๊น…, ์‹คํ–‰ ์‹œ๊ฐ„ ์ธก์ •, ํŠธ๋žœ์žญ์…˜, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๊ณตํ†ต์œผ๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.

์ฆ‰, AOP๋ฅผ ์ ์šฉํ•˜๋ฉด ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ํ•œ ๊ณณ์— ๋ชจ์•„๋‘๊ณ  ํ•„์š”ํ•œ ์ง€์ ์— ๋ผ์›Œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ๋ฌธ ์ƒ์„ฑ, ํšŒ์› ์กฐํšŒ, ์ƒํ’ˆ ์ˆ˜์ •๊ฐ™์€ ๊ธฐ๋Šฅ์€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ํ•ต์‹ฌ ๋กœ์ง์ด์ง€๋งŒ, ์‹คํ–‰ ์‹œ๊ฐ„ ์ธก์ •์ด๋‚˜ ๊ณตํ†ต ๋กœ๊ทธ ๊ธฐ๋ก์€ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋น„์Šทํ•˜๊ฒŒ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ ๋ถ€๋ถ„์„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด AOP์˜ ํ•ต์‹ฌ์ด๋‹ค.

๐Ÿ“ AOP์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” ์šฉ์–ด

AOP๋ฅผ ์ฒ˜์Œ ๋ณด๋ฉด Aspect, Advice, Pointcut ๊ฐ™์€ ์šฉ์–ด๊ฐ€ ํ•œ๊บผ๋ฒˆ์— ๋‚˜์™€์„œ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๋‚˜๋„ ์ฒ˜์Œ์—๋Š” ์ด๋ฆ„์ด ๋น„์Šทํ•ด์„œ ์–ด๋ ต๊ฒŒ ๋А๊ปด์กŒ๋Š”๋ฐ, ์—ญํ• ๋กœ ๋‚˜๋ˆ ์„œ ๋ณด๋ฉด ์ƒ๊ฐ๋ณด๋‹ค ๋‹จ์ˆœํ–ˆ๋‹ค.

  • Aspect: ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ชจ์•„๋‘” AOP ์„ค์ • ๋‹จ์œ„
  • Advice: ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ธ์ œ ์‹คํ–‰ํ• ์ง€ ์ •์˜ํ•œ ์ฝ”๋“œ
  • Pointcut: ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ด๋””์— ์ ์šฉํ• ์ง€ ์ •ํ•˜๋Š” ์กฐ๊ฑด
  • JoinPoint: ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ๋ผ์–ด๋“ค ์ˆ˜ ์žˆ๋Š” ์ง€์ . Spring AOP์—์„œ๋Š” ๋ณดํ†ต ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ์ ์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

Aspect = ๊ณตํ†ต ๊ธฐ๋Šฅ ๋ฌถ์Œ
Advice = ์–ธ์ œ ์‹คํ–‰ํ• ์ง€
Pointcut = ์–ด๋””์— ์ ์šฉํ• ์ง€

๐ŸŠ @Aspect

@Aspect๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ AOP ์„ค์ • ํด๋ž˜์Šค๋ผ๋Š” ๊ฑธ ๋‚˜ํƒ€๋‚ด๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
์ฆ‰, ์ด ํด๋ž˜์Šค ์•ˆ์—์„œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ธ์ œ, ์–ด๋””์— ์ ์šฉํ• ์ง€ ์ •์˜ํ•˜๊ฒ ๋‹ค๊ณ  ์Šคํ”„๋ง์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

AOP๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด ๋ณดํ†ต ์ด ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค ์•ˆ์— Advice์™€ Pointcut์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿ‹ Advice

Advice๋Š” ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ธ์ œ ์‹คํ–‰ํ• ์ง€ ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

@Before

ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋™์ž‘ํ•œ๋‹ค.
์š”์ฒญ๊ฐ’ ๊ฒ€์ฆ์ด๋‚˜ ์‹คํ–‰ ์ „ ๋กœ๊ทธ ๊ธฐ๋ก์ฒ˜๋Ÿผ, ๋ฉ”์„œ๋“œ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์— ์‚ฌ์šฉํ•œ๋‹ค.

@After

ํ•ต์‹ฌ ๊ธฐ๋Šฅ์˜ ์„ฑ๊ณต ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ์‹คํ–‰๋œ๋‹ค.
์ž๋ฐ”์˜ finally์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ๋‹ค.

@AfterReturning

๋ฉ”์„œ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋๋‚ฌ์„ ๋•Œ๋งŒ ์‹คํ–‰๋œ๋‹ค.
๋ฐ˜ํ™˜๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๊ณตํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋กœ๊ทธ๋กœ ๋‚จ๊ธธ ๋•Œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

@AfterThrowing

๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ค‘ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.
๊ณตํ†ต ์˜ˆ์™ธ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ฑฐ๋‚˜ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

@Around

ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์‹คํ–‰ ์ „๊ณผ ํ›„๋ฅผ ๋ชจ๋‘ ๊ฐ์Œ€ ์ˆ˜ ์žˆ๋Š” Advice๋‹ค.
์ง์ ‘ ์‹ค์ œ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ์ ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.
์‹คํ–‰ ์‹œ๊ฐ„ ์ธก์ • ๊ฐ™์€ ๊ธฐ๋Šฅ๋„ ๋ณดํ†ต @Around๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ Pointcut

Pointcut์€ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ด๋””์— ์ ์šฉํ• ์ง€ ์ •ํ•˜๋Š” ์กฐ๊ฑด์ด๋‹ค.
Advice๊ฐ€ โ€œ์–ธ์ œโ€๋ผ๋ฉด Pointcut์€ โ€œ์–ด๋””์—โ€์— ํ•ด๋‹นํ•œ๋‹ค.

Spring AOP์—์„œ๋Š” ์ฃผ๋กœ execution() ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ง€์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋Œ€์ƒ์„ ์ง€์ •ํ•œ๋‹ค.

execution(modifiers-pattern? return-type-pattern declaring-type-pattern? method-name-pattern(param-pattern) throws-pattern?)

๊ตฌ์„ฑ์š”์†Œ

  • modifiers-pattern
    • ์ ‘๊ทผ์ œ์–ด์ž
    • ์˜ˆ: public, private, *
  • return-type-pattern
    • ๋ฐ˜ํ™˜ ํƒ€์ž…
    • ์˜ˆ: void, String, *
  • declaring-type-pattern
    • ํด๋ž˜์Šค ๊ฒฝ๋กœ
      • com.sparta.myselectshop.controller.*
        • controller ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ํด๋ž˜์Šค
      • com.sparta.myselectshop.controller..*
        • controller ํŒจํ‚ค์ง€์™€ ํ•˜์œ„ ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ํด๋ž˜์Šค
  • method-name-pattern(param-pattern)
    • ๋ฉ”์„œ๋“œ ์ด๋ฆ„๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐ๊ฑด
      • addFolders() - addFolders ๋ฉ”์„œ๋“œ๋งŒ ์ ์šฉ
      • add*(..) - add๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ ์ ์šฉ

์ฒ˜์Œ์—๋Š” ๋ฌธ๋ฒ•์ด ๊ธธ์–ด์„œ ์–ด๋ ต๊ฒŒ ๋А๊ปด์กŒ๋Š”๋ฐ,
๊ฒฐ๊ตญ์€ โ€œ์–ด๋А ํŒจํ‚ค์ง€์˜ ์–ด๋–ค ๋ฉ”์„œ๋“œ์— ์ ์šฉํ•  ๊ฑด์ง€โ€๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์ ๋Š” ๊ฑฐ๋ผ๊ณ  ์ดํ•ดํ•˜๋‹ˆ ํ›จ์”ฌ ๋‹จ์ˆœํ•ด์กŒ๋‹ค.

๋˜ @Pointcut์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ํ‘œํ˜„์‹์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์—ฌ๋Ÿฌ Advice์—์„œ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.

๐Ÿ‡ ํ”„๋ก์‹œ ๊ธฐ๋ฐ˜ ๋™์ž‘

Spring AOP๋Š” ํ”„๋ก์‹œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
ํ”„๋ก์‹œ๋Š” ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๋Œ€์‹ ํ•ด์„œ ์•ž์—์„œ ๋™์ž‘ํ•˜๋Š” ๋Œ€๋ฆฌ ๊ฐ์ฒด๋‹ค.

์Šคํ”„๋ง์€ AOP ์ ์šฉ ๋Œ€์ƒ Bean์„ ๊ทธ๋Œ€๋กœ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‹ค์ œ ๊ฐ์ฒด ์•ž์— ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋‘๊ณ  ๊ทธ ํ”„๋ก์‹œ๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๋จผ์ € ํ”„๋ก์‹œ๊ฐ€ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„๊ณ , Advice๋ฅผ ์‹คํ–‰ํ•œ ๋’ค ์‹ค์ œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.

ํ๋ฆ„์œผ๋กœ ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์ ์šฉ ์ „
DispatcherServlet โ†’ Controller
์ ์šฉ ํ›„
DispatcherServlet โ†’ AOP Proxy โ†’ Advice โ†’ Controller

ํ•ต์‹ฌ ๋กœ์ง์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ํ”„๋ก์‹œ๊ฐ€ ์•ž์—์„œ ๊ณตํ†ต ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๋‹ค.

๐Ÿ‰ AOP๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

AOP๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ํฌ๊ฒŒ ๋А๋‚€ ์ ์€, ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ์ง์ ‘ ๋„ฃ๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ธˆ๋ฐฉ ์ง€์ €๋ถ„ํ•ด์ง„๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด๋‚˜ ํŒŒ๋ผ๋ฏธํ„ฐ, ์‹คํ–‰ ์—ฌ๋ถ€ ๊ฐ™์€ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ณ  ์‹ถ๋‹ค๋ฉด ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•์€ ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ์„œ๋น„์Šค๋งˆ๋‹ค ์ง์ ‘ log.info()๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์‹ค์ œ๋กœ๋Š” ์ด ๋ฐฉ์‹๋งŒ์œผ๋กœ๋„ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๊ฑธ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ์— ๋ฐ˜๋ณตํ•ด์„œ ๋„ฃ๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ํ•ต์‹ฌ ๋กœ์ง์ด ์ž˜ ๋ณด์ด์ง€ ์•Š๊ณ , ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๊ณ , ๋‚˜์ค‘์— ๋กœ๊ทธ ํ˜•์‹์ด๋‚˜ ์ถœ๋ ฅ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•  ๋•Œ ์ˆ˜์ • ๋ฒ”์œ„๋„ ์ปค์ง€๊ฒŒ ๋œ๋‹ค.

๋ฐ˜๋ฉด AOP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๋Š” ๊ธฐ๋Šฅ ๊ฐ™์€ ๊ณตํ†ต ์ž‘์—…์„ ํ•œ ๊ณณ์— ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋Œ€๋กœ ๋‘๊ณ , ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์€ ํ•„์š”ํ•œ ์ง€์ ์—๋งŒ ๊ณตํ†ต ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ AOP๋Š” ๋‹จ์ˆœํžˆ ๋ฌธ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ฐœ๋…์ด ์•„๋‹ˆ๋ผ, ์ค‘๋ณต์„ ์ค„์ด๊ณ  ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ์ ์ด ๋” ์ค‘์š”ํ•˜๊ฒŒ ๋А๊ปด์กŒ๋‹ค.

๐Ÿ’ ํšŒ๊ณ 

์ฒ˜์Œ์—๋Š” AOP๋ฅผ ์–ด๋…ธํ…Œ์ด์…˜ ๋ช‡ ๊ฐœ ๋ถ™์ด๋Š” ๊ธฐ๋Šฅ ์ •๋„๋กœ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ,
์ •๋ฆฌํ•ด๋ณด๋‹ˆ ํ•ต์‹ฌ์€ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ํ•ต์‹ฌ ๋กœ์ง์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

ํŠนํžˆ ํ”„๋ก์‹œ๊ฐ€ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„์„œ Advice๋ฅผ ์‹คํ–‰ํ•œ ๋’ค ์‹ค์ œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋‹ˆ, ์™œ @Transactional ๊ฐ™์€ ๊ธฐ๋Šฅ๋„ AOP๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์กฐ๊ธˆ ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

+ @Transactional๋„ AOP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. 
  ์Šคํ”„๋ง์€ ํŠธ๋žœ์žญ์…˜์ด ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ์— ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , 
  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„์„œ ์‹คํ–‰ ์ „์—๋Š” ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ณ , 
  ์ •์ƒ ์ข…๋ฃŒ ์‹œ commit, ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ rollback์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

์˜ค๋Š˜ ์ •๋ฆฌํ•˜๋ฉด์„œ ๋А๋‚€ ๊ฑด, AOP๋Š” ๋‹จ์ˆœํžˆ ๊ฐœ๋…๋งŒ ์™ธ์šฐ๋Š” ๊ฒƒ๋ณด๋‹ค โ€œ์–ด๋–ค ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜๋ ค๊ณ  ๋“ฑ์žฅํ–ˆ๋Š”๊ฐ€โ€๋ฅผ ๊ฐ™์ด ์ดํ•ดํ•ด์•ผ ํ›จ์”ฌ ์ž˜ ๋“ค์–ด์˜จ๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค.

๋‹ค์Œ์—๋Š” ์ง์ ‘ API ์‹คํ–‰ ์‹œ๊ฐ„ ์ธก์ •์ด๋‚˜ ๋กœ๊น…์„ AOP๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด์„œ ๋” ์ต์ˆ™ํ•ด์ ธ๋ด์•ผ๊ฒ ๋‹ค.

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