[DEV] study&learn
article thumbnail
Published 2023. 1. 11. 23:40
AOP ์™€ Spring AOP ํ…Œ์ฝ”ํ†ก

๐Ÿง AOP ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ?

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

ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ(cross-cutting concern)์˜ ๋ถ„๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•จ์œผ๋กœ์จ
๋ชจ๋“ˆ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŽ˜๋Ÿฌ๋‹ค์ž„

์—ฌ๋Ÿฌ ๊ฐ์ฒด์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•ด์„œ
๊ฐœ๋ฐœ์ž๋Š” ๋ฐ˜๋ณต ์ž‘์—…์„ ์ค„์ด๊ณ  ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Œ

์ฆ‰, ์—ฌ๋Ÿฌ ๊ฐ์ฒด์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋‹ค.

 

ํ”„๋ก์‹œ๋ž€?

์ž์‹ ์ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š” ์‹ค์ œ ๋Œ€์ƒ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์œ„์žฅํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์ฃผ๋Š” ๊ฒƒ(๋Œ€๋ฆฌ์ธ, ๋Œ€๋ฆฌ์ž)

์‚ฌ์šฉ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋ถ€๋ฅด๋Š” ์ด๋ฆ„์ด ๋‹ฌ๋ผ์ง„๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํƒ€๊นƒ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์–ด -> ํ”„๋ก์‹œ ํŒจํ„ด
  2. ํƒ€๊นƒ์— ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌ -> ํ…Œ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด

 

 

โœ๏ธ AOP ์˜ ์šฉ์–ด๋“ค

  • Target Object : ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•  ๋Œ€์ƒ
  • Aspect : AOP์˜ ๊ธฐ๋ณธ ๋ชจ๋“ˆ
  • Advice : ํƒ€๊นƒ์—๊ฒŒ ์ œ๊ณตํ•  ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋‹ด์€ ๋ชจ๋“ˆ
  • Join Point : ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ๋‚ด๋ถ€์—์„œ Advice๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜
  • Pointcut : Advice์— ์ ์šฉํ•  JoinPoint๋ฅผ ์„ ๋ณ„ํ•˜๋Š” ์ž‘์—… ๋˜๋Š” ๊ทธ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ ๋ชจ๋“ˆ

 

AOP ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์ปดํŒŒ์ผ ์‹œ์ ์— ์ฝ”๋“œ์— ๊ณตํ†ต ๊ธฐ๋Šฅ ์‚ฝ์ž…
  2. ํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œ์ ์— ๋ฐ”์ดํŠธ ์ฝ”๋“œ์— ๊ณตํ†ต ๊ธฐ๋Šฅ ์‚ฝ์ž…
  3. ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ณตํ†ต ๊ธฐ๋Šฅ ์‚ฝ์ž…

 

 Spring ์—์„œ AOP ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

Spring์€ AOP๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ณตํ†ต ๊ธฐ๋Šฅ ์‚ฝ์ž… ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

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

 

์œ„์˜ ๊ธฐ๋Šฅ๋“ฑ์„ ์กฐํ•ฉํ•˜์—ฌ Spring AOP ๋ฅผ ์ง€์›ํ•œ๋‹ค!!

 

Reference

 

'ํ…Œ์ฝ”ํ†ก' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

REST API๋ž€?  (0) 2023.01.20
CI/CD ์™€ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ  (0) 2023.01.13
Servlet & Spring Web MVC  (0) 2023.01.12
Spring ๊ณผ Spring Boot  (0) 2023.01.10
JVM Stack & Heap  (0) 2023.01.10
profile

[DEV] study&learn

@devjuni

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!