์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[์Šคํ”„๋ง] Spring AOP ์™€ ๋™์ž‘ ์›๋ฆฌ

๐Ÿ˜Ž ์ง€์‹ in Action/Spring ๐ŸŒฑ

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2025. 1. 3. 11:11

๋ณธ๋ฌธ

๊ด€๋ จ ์šฉ์–ด

Aspect : ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ (๋กœ๊น…, ๋ณด์•ˆ, ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋“ฑ)๋กœ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ

JoinPoint : AOP์—์„œ Aspect๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ • ์ง€์ 

Pointcut : JoinPoint๋ฅผ ์„ ํƒํ•˜๋Š” ํ‘œํ˜„์‹

Advice : Join Point์—์„œ ์‹ค์ œ๋กœ ์‹คํ–‰๋  ๋™์ž‘์„ ์ •์˜ํ•˜๋Š” ์ฝ”๋“œ (Before, After Returing, After Throwing, Around, Introduction)

 

AOP ๋™์ž‘ ์›๋ฆฌ 

1. ํ”„๋ก์‹œ ๊ฐ์ฒด ์ƒ์„ฑ

Spring AOP๋Š” ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ์ฒด(Target Object)๋ฅผ ๊ฐ์‹ธ๋Š” ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์ด ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ๋Œ€์ƒ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„๊ณ , ํ•„์š”์‹œ Aspect(๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ)๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

ํ”„๋ก์‹œ๋Š” JDK ๋™์  ํ”„๋ก์‹œ(์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜) ๋˜๋Š” CGLIB ํ”„๋ก์‹œ(ํด๋ž˜์Šค ๊ธฐ๋ฐ˜)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ๋‹ค.

์ด ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋Œ€์ƒ ๊ฐ์ฒด์™€ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์ƒ์†ํ•˜์—ฌ,

ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์—์„œ ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

 

2. ์กฐ์ธ ํฌ์ธํŠธ(Join Point) ์„ค์ •
AOP์—์„œ๋Š” Join Point๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์—ฌ, ์–ด๋А ์‹œ์ ์—์„œ Aspect๋ฅผ ์ ์šฉํ• ์ง€ ์„ค์ •ํ•œ๋‹ค.

Spring AOP์—์„œ ์กฐ์ธ ํฌ์ธํŠธ๋Š” ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ง€์ ์œผ๋กœ ์ •์˜๋œ๋‹ค.

์ฆ‰, ํŠน์ • ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์— AOP๊ฐ€ ์ ์šฉ๋œ๋‹ค.

 

3. ํฌ์ธํŠธ์ปท(Pointcut) ์„ค์ •
Pointcut์€ ์–ด๋–ค Join Point์— Aspect๋ฅผ ์ ์šฉํ• ์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ํ‘œํ˜„์‹์ด๋‹ค.
@Before, @After, @Around ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌ์ธํŠธ์ปท์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํฌ์ธํŠธ์ปท์€ Aspect๊ฐ€ ์–ด๋–ค ๋ฉ”์†Œ๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์„ ํƒ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ํŒจํ‚ค์ง€๋‚˜ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

4. ์–ด๋“œ๋ฐ”์ด์Šค(Advice) ์ ์šฉ
Advice๋Š” ์กฐ์ธ ํฌ์ธํŠธ์—์„œ ์‹คํ–‰๋  ๋™์ž‘์ด๋‹ค.

Advice๋Š” ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ „์—(@Before), ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ํ›„์—(@After), ๋˜๋Š” ๋ฉ”์†Œ๋“œ ์‹คํ–‰์„ ๊ฐ์‹ธ๋Š” ํ˜•ํƒœ(@Around)๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Before Advice: ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ „์— ์‹คํ–‰๋œ๋‹ค.
  • After Advice: ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ํ›„์— ์‹คํ–‰๋œ๋‹ค.
  • Around Advice: ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ „ํ›„๋ฅผ ๊ฐ์‹ธ๋ฉฐ, ๋ฉ”์†Œ๋“œ ์‹คํ–‰์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. ProceedingJoinPoint๋ฅผ ํ†ตํ•ด ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

5. ์œ„๋น™(Weaving)
Weaving์€ ์‹ค์ œ ์ฝ”๋“œ์— Aspect๋ฅผ ์ ์šฉํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ์ด ๊ณผ์ •์—์„œ Aspect๊ฐ€ ์ ์šฉ๋˜๋Š” ์‹œ์ ๊ณผ ๋ฐฉ๋ฒ•์ด ๊ฒฐ์ •๋œ๋‹ค.

Spring์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ ์œ„๋น™ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ฆ‰, Spring AOP๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋™์ ์œผ๋กœ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Aspect๋ฅผ ์ ์šฉํ•œ๋‹ค.

 

6. ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
ํด๋ผ์ด์–ธํŠธ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์‹ค์ œ๋กœ๋Š” ๋Œ€์ƒ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ํ”„๋ก์‹œ ๊ฐ์ฒด๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„๊ณ , ์„ค์ •๋œ Advice(์˜ˆ: ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋“ฑ)๋ฅผ ์‹คํ–‰ํ•œ ํ›„, ์‹ค์ œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜, ํ•„์š”ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

7. ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ๋Œ€์ƒ ๋ฉ”์†Œ๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์„œ, ํ•„์š”ํ•œ ํ›„์ฒ˜๋ฆฌ(์˜ˆ: ์˜ˆ์™ธ ์ฒ˜๋ฆฌ, ํ›„์† ์ž‘์—… ๋“ฑ)๋ฅผ ํ•œ ํ›„, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ