MapleStory Finger Point

๐ŸŸค JAVA/๐ŸŸค Spring

[Spring] AOP (Aspect-Oriented Programming)

HYEJU01 2024. 12. 16. 21:18

https://engkimbs.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81AOP

 

AOP ๋ž€

AOP ๋ž€ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.

๊ด€์‹ฌ์‚ฌ (Aspect) ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

(์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์— ํšจ๊ณผ์ )

 

 

  • Spring ์—์„œ๋Š” ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์ด ์•„๋‹Œ ์ด์™ธ์˜ ๋ณด์•ˆ, ๋กœ๊ทธ, ํŠธ๋ž™์žญ์…˜ ๋“ฑ์„ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ (cross-concern) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค
  • Spring ์€ ์ด ํšก๋‹จ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์—…๊ฐ€๋Šฅํ•˜๋‹ค. 
  • ์ฆ‰, ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค.

 

 โœ… ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐ

 โœ… ์ปดํŒŒ์ผ or ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๊ฒฐํ•ฉ

 โœ… ๊ธฐ์กด ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด, ์›ํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๊ฒฐํ•ฉ

 

 

AOP ํ‚ค์›Œ๋“œ

  • Aspect (๊ด€์ ) ๊ณตํ†ต ๊ธฐ๋Šฅ(๋กœ๊น…, ๋ณด์•ˆ ๋“ฑ)์„ ๋ชจ๋“ˆํ™”ํ•œ ๊ฐ์ฒด
  • JoinPoint (์กฐ์ธํฌ์ธํŠธ) AOP๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰ ์ง€์  (๋ฉ”์„œ๋“œ ์‹คํ–‰, ์˜ˆ์™ธ ๋ฐœ์ƒ ๋“ฑ)
  • PointCut (ํฌ์ธํŠธ์ปท) AOP๊ฐ€ ์ ์šฉ๋  ํŠน์ • JoinPoint๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ํ‘œํ˜„์‹
  • Advice (์–ด๋“œ๋ฐ”์ด์Šค) ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•  ๊ณตํ†ต ๊ธฐ๋Šฅ(๋กœ๊น…, ํŠธ๋žœ์žญ์…˜ ๋“ฑ)
  • Weaving (์œ„๋น™) Advice๋ฅผ ํ•ต์‹ฌ ๋กœ์ง์— ์ ์šฉํ•˜๋Š” ๊ณผ์ • (์ปดํŒŒ์ผ, ๋Ÿฐํƒ€์ž„, ๋กœ๋“œ ํƒ€์ž„์— ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ)

 

 

AOP ์‚ฌ์šฉ

  • Logging (๋กœ๊น…)
    ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „ํ›„ ๋˜๋Š” ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ๋กœ๊น…
    @Before, @AfterReturning, @AfterThrowing ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • Transaction (ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ)
    @Transactional์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘, ์ปค๋ฐ‹, ๋กค๋ฐฑ ์ฒ˜๋ฆฌ
  • Security (๋ณด์•ˆ ์ฒ˜๋ฆฌ)
    ๋ฉ”์„œ๋“œ ์ ‘๊ทผ ๊ถŒํ•œ ๊ฒ€์ฆ (@PreAuthorize, @PostAuthorize)
  • Exception Handling (์˜ˆ์™ธ ์ฒ˜๋ฆฌ)
    ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ํŠน์ • ๋กœ์ง ์ˆ˜ํ–‰ (@AfterThrowing)
  • Caching (์บ์‹ฑ ์ฒ˜๋ฆฌ)
    ๋™์ผํ•œ ์š”์ฒญ์„ ์บ์‹ฑํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ (@Cacheable)