์Šคํ”„๋ง AOP ๊ฐœ๋…

2024. 11. 12. 22:44ยทSpring/AOP
๋ชฉ์ฐจ
  1. AOP ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ
  2. ์• ์ŠคํŽ™ํŠธ
  3. AOP ์ ์šฉ ๋ฐฉ์‹
  4. AOP ์šฉ์–ด ์ •๋ฆฌ
๐Ÿ’ก ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ ๊ณ ๊ธ‰ํŽธ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

AOP ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ

ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์€ ํฌ๊ฒŒ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

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

์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ

๋ณดํ†ต ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์€ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ๊ฑธ์ณ์„œ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ˜ธ์ถœ์„ ๋กœ๊น… ํ•ด์•ผ ํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ์„ ์ƒ๊ฐํ•ด๋ณด์ž.

์ด๋Ÿฌํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์€ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ(cross-cutting concerns)๊ฐ€ ๋œ๋‹ค.

์‰ฝ๊ฒŒ ์ด์•ผ๊ธฐํ•ด์„œ ํ•˜๋‚˜์˜ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ์—ฌ๋Ÿฌ ๊ณณ์— ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ์ ์šฉ ๋ฌธ์ œ

๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฐ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์—ฌ๋Ÿฌ ๊ณณ์— ์ ์šฉํ•˜๋ ค๋ฉด ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ๋กญ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ 100๊ฐœ๋ฉด 100๊ฐœ ๋ชจ๋‘์— ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ณ„๋„์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋„, ํ•ด๋‹น ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๊ฒฐ๊ตญ ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ๊ตฌ์กฐ์ ์œผ๋กœ ๋‹จ์ˆœ ํ˜ธ์ถœ์ด ์•„๋‹ˆ๋ผ try~catch~finally๊ฐ™์€ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ๋”์šฑ ๋ณต์žกํ•ด์ง„๋‹ค. (์˜ˆ: ์‹คํ–‰ ์‹œ๊ฐ„ ์ธก์ •)

 

๋” ํฐ ๋ฌธ์ œ๋Š” ์ˆ˜์ •์ด๋‹ค. ๋งŒ์•ฝ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์— ์ˆ˜์ •์ด ๋ฐœ์ƒํ•˜๋ฉด, 100๊ฐœ์˜ ํด๋ž˜์Šค ๋ชจ๋‘๋ฅผ ํ•˜๋‚˜์”ฉ ์ฐพ์•„๊ฐ€๋ฉด์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์— ์ถ”๊ฐ€๋กœ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ์ ์šฉ๋˜๋Š” ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ชจ๋“  ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ ์šฉํ–ˆ๋‹ค๊ฐ€, ๋กœ๊ทธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ๋‚จ์•„์„œ ์„œ๋น„์Šค ๊ณ„์ธต์—๋งŒ ์ ์šฉํ•œ๋‹ค๊ณ  ์ˆ˜์ •ํ•ด์•ผํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๋˜ ์ˆ˜ ๋งŽ ์€ ์ฝ”๋“œ๋ฅผ ๊ณ ์ณ์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ์ ์šฉ ๋ฌธ์ œ๋ฅผ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๋ณ€๊ฒฝ ์ง€์ ์€ ํ•˜๋‚˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก ์ž˜ ๋ชจ๋“ˆํ™” ๋˜์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ํŠน์ • ๋กœ์ง์„ ์• ํ”Œ ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ์ ์šฉํ•˜๋Š” ๋ฌธ์ œ๋Š” ์ผ๋ฐ˜์ ์ธ OOP ๋ฐฉ์‹์œผ๋กœ๋Š” ํ•ด๊ฒฐ์ด ์–ด๋ ต๋‹ค.

https://www.inflearn.com/questions/551417

์• ์ŠคํŽ™ํŠธ

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ  ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ด๋””์— ์ ์šฉํ• ์ง€ ์„  ํƒํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ด๋””์— ์ ์šฉํ• ์ง€ ์„ ํƒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•ฉํ•ด์„œ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์• ์ŠคํŽ™ํŠธ(aspect)์ด๋‹ค. ์• ์ŠคํŽ™ํŠธ๋Š” ์‰ฝ๊ฒŒ ์ด์•ผ๊ธฐํ•ด์„œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ๊ณผ, ํ•ด๋‹น ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ด๋””์— ์ ์šฉํ• ์ง€ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋กœ๊ทธ ์ถœ๋ ฅ ๊ธฐ๋Šฅ์„ ๋ชจ๋“  ์ปจํŠธ๋กค๋Ÿฌ์— ์ ์šฉํ•ด๋ผ ๋ผ๋Š” ๊ฒƒ์ด ์ •์˜๋˜์–ด ์žˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ด์ „์— ์•Œ์•„๋ณธ @Aspect ๋ฐ”๋กœ ๊ทธ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์–ด๋“œ๋ฐ”์ด์ €๋„ ์–ด๋“œ๋ฐ”์ด์Šค(๋ถ€๊ฐ€ ๊ธฐ๋Šฅ)๊ณผ ํฌ์ธํŠธ์ปท(์ ์šฉ ๋Œ€์ƒ)์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ๊ฐœ๋…์ƒ ํ•˜๋‚˜์˜ ์• ์ŠคํŽ™ํŠธ์ด๋‹ค. ์• ์ŠคํŽ™ํŠธ๋Š” ์šฐ๋ฆฌ๋ง๋กœ ํ•ด์„ํ•˜๋ฉด ๊ด€์ ์ด๋ผ๋Š” ๋œป์ธ๋ฐ, ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐ”๋ผ๋ณด๋Š” ๊ด€์ ์„ ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์—์„œ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ(cross-cutting concerns) ๊ด€์ ์œผ๋กœ ๋‹ฌ๋ฆฌ ๋ณด๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์• ์ŠคํŽ™ํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์„ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ AOP(Aspect-Oriented Programming)์ด๋ผํ•œ๋‹ค

 

์ฐธ๊ณ ๋กœ AOP๋Š” OOP๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์šด OOP์˜ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์„ ๋ณด์กฐํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.

AspectJ ํ”„๋ ˆ์ž„์›Œํฌ

AOP์˜ ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์œผ๋กœ AspectJ ํ”„๋ ˆ์ž„์›Œํฌ(https://www.eclipse.org/aspectj/)๊ฐ€ ์žˆ๋‹ค.

๋ฌผ๋ก  ์Šคํ”„๋ง๋„ AOP๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ AspectJ์˜ ๋ฌธ๋ฒ•์„ ์ฐจ์šฉํ•˜๊ณ , AspectJ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ์ผ๋ถ€๋งŒ ์ œ๊ณตํ•œ๋‹ค.

 

AspectJ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์Šค์Šค๋กœ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ•œ๋‹ค.

  • ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ์™„๋ฒฝํ•œ ๊ด€์  ์ง€ํ–ฅ ํ™•์žฅ
  • ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ์˜ ๊น”๋”ํ•œ ๋ชจ๋“ˆํ™”
    • ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ ๋ฐ ์ฒ˜๋ฆฌ
    • ๋™๊ธฐํ™”
    • ์„ฑ๋Šฅ ์ตœ์ ํ™”(์บ์‹ฑ)
    • ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น…

AOP ์ ์šฉ ๋ฐฉ์‹

AOP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ์ฝ”๋“œ์ƒ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด์„œ ๊ด€๋ฆฌ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด AOP๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ๋กœ์ง์€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‹ค์ œ ๋กœ์ง์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์„๊นŒ?

ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  • ์ปดํŒŒ์ผ ์‹œ์ 
  • ํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œ์ 
  • ๋Ÿฐํƒ€์ž„ ์‹œ์ (ํ”„๋ก์‹œ)

์ปดํŒŒ์ผ ์‹œ์ 

.java ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ .class๋ฅผ ๋งŒ๋“œ๋Š” ์‹œ์ ์— ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ๋Š” AspectJ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํŠน๋ณ„ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ปดํŒŒ์ผ ๋œ .class๋ฅผ ๋””์ปดํŒŒ์ผ ํ•ด๋ณด๋ฉด ์• ์ŠคํŽ™ํŠธ ๊ด€๋ จ ํ˜ธ์ถœ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

 

์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ’€์–ด์„œ ์ด์•ผ๊ธฐํ•˜๋ฉด ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ์ฝ”๋“œ๊ฐ€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ ์ฃผ๋ณ€์— ์‹ค์ œ๋กœ ๋ถ™์–ด ๋ฒ„๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. AspectJ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” Aspect๋ฅผ ํ™•์ธํ•ด์„œ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์ ์šฉ ๋Œ€์ƒ์ธ์ง€ ๋จผ์ € ํ™•์ธํ•˜๊ณ , ์ ์šฉ ๋Œ€์ƒ์ธ ๊ฒฝ์šฐ์— ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ๋กœ์ง์„ ์ ์šฉํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ ์ด๋ ‡๊ฒŒ ์›๋ณธ ๋กœ์ง์— ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ๋กœ์ง์ด ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์„ ์œ„๋น™(Weaving)์ด๋ผ ํ•œ๋‹ค.

์ปดํŒŒ์ผ ์‹œ์  - ๋‹จ์ 

์ปดํŒŒ์ผ ์‹œ์ ์— ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜๋ ค๋ฉด ํŠน๋ณ„ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๋„ ํ•„์š”ํ•˜๊ณ  ๋ณต์žกํ•˜๋‹ค.

ํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œ์ 

์ž๋ฐ”๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž๋ฐ” ์–ธ์–ด๋Š” .class ํŒŒ์ผ์„ JVM ๋‚ด๋ถ€์˜ ํด๋ž˜์Šค ๋กœ๋”์— ๋ณด๊ด€ํ•œ๋‹ค.

์ด๋•Œ ์ค‘๊ฐ„์—์„œ .class ํŒŒ์ผ์„ ์กฐ์ž‘ํ•œ ๋‹ค์Œ JVM์— ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ”์–ธ์–ด๋Š” .class๋ฅผJVM์— ์ €์žฅํ•˜๊ธฐ ์ „์— ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ฐธ๊ณ ๋กœ ์ˆ˜ ๋งŽ์€ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด๋“ค์ด ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ด ์‹œ์ ์— ์• ์ŠคํŽ™ํŠธ๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋กœ๋“œ ํƒ€์ž„ ์œ„๋น™์ด๋ผ ํ•œ๋‹ค.

ํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œ์  - ๋‹จ์ 

๋กœ๋“œ ํƒ€์ž„ ์œ„๋น™์€ ์ž๋ฐ”๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํŠน๋ณ„ํ•œ ์˜ต์…˜( java -javaagent )์„ ํ†ตํ•ด ํด๋ž˜์Šค ๋กœ๋” ์กฐ์ž‘๊ธฐ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฐ, ์ด ๋ถ€๋ถ„์ด ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์šด์˜ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

๋Ÿฐํƒ€์ž„ ์‹œ์ 

๋Ÿฐํƒ€์ž„ ์‹œ์ ์€ ์ปดํŒŒ์ผ๋„ ๋‹ค ๋๋‚˜๊ณ , ํด๋ž˜์Šค ๋กœ๋”์— ํด๋ž˜์Šค๋„ ๋‹ค ์˜ฌ๋ผ๊ฐ€์„œ ์ด๋ฏธ ์ž๋ฐ”๊ฐ€ ์‹คํ–‰๋˜๊ณ  ๋‚œ ๋‹ค์Œ์„ ๋งํ•œ๋‹ค. ์ž๋ฐ”์˜ ๋ฉ”์ธ( main ) ๋ฉ”์„œ๋“œ๊ฐ€ ์ด๋ฏธ ์‹คํ–‰๋œ ๋‹ค์Œ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ž๋ฐ” ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฒ”์œ„ ์•ˆ์—์„œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์Šคํ”„๋ง๊ณผ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ์˜ ๋„์›€์„ ๋ฐ›๊ณ  ํ”„๋ก์‹œ์™€ DI, ๋นˆ ํฌ์ŠคํŠธ ํ”„๋กœ์„ธ์„œ ๊ฐ™์€ ๊ฐœ๋…๋“ค์„ ์ด ๋™์›ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ตœ์ข…์ ์œผ๋กœ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์Šคํ”„๋ง ๋นˆ์— ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ํ•™์Šตํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ํ”„๋ก์‹œ ๋ฐฉ์‹์˜ AOP์ด๋‹ค.

 

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

 

๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ์ ์šฉ๋˜๋Š” ์ฐจ์ด๋ฅผ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ปดํŒŒ์ผ ์‹œ์ : ์‹ค์ œ ๋Œ€์ƒ ์ฝ”๋“œ์— ์• ์ŠคํŒฉํŠธ๋ฅผ ํ†ตํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ํ˜ธ์ถœ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ๋‹ค. AspectJ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด์•ผ ํ•œ ๋‹ค.
  • ํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œ์ : ์‹ค์ œ ๋Œ€์ƒ ์ฝ”๋“œ์— ์• ์ŠคํŒฉํŠธ๋ฅผ ํ†ตํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ํ˜ธ์ถœ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ๋‹ค. AspectJ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ์‹œ์ : ์‹ค์ œ ๋Œ€์ƒ ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค. ๋Œ€์‹ ์— ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ์ ์šฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ญ์ƒ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด์•ผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์Šคํ”„๋ง AOP๋Š” ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

AOP ์ ์šฉ ์œ„์น˜

AOP๋Š” ์ง€๊ธˆ๊นŒ์ง€ ํ•™์Šตํ•œ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์œ„์น˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์œ„์น˜์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ ์šฉ ๊ฐ€๋Šฅ ์ง€์ (์กฐ์ธ ํฌ์ธํŠธ): ์ƒ์„ฑ์ž, ํ•„๋“œ ๊ฐ’ ์ ‘๊ทผ, static ๋ฉ”์„œ๋“œ ์ ‘๊ทผ, ๋ฉ”์„œ๋“œ ์‹คํ–‰
    • ์ด๋ ‡๊ฒŒ AOP๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์„ ์กฐ์ธ ํฌ์ธํŠธ(Join point)๋ผ ํ•œ๋‹ค.
  • AspectJ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปดํŒŒ์ผ ์‹œ์ ๊ณผ ํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œ์ ์— ์ ์šฉํ•˜๋Š” AOP๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹ค์ œ ์กฐ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋ชจ๋“  ์ง€์ ์— ๋‹ค ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ”„๋ก์‹œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ”„๋ง AOP๋Š” ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ง€์ ์—๋งŒ AOP๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ”„๋ก์‹œ๋Š” ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๊ฐœ๋…์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒ์„ฑ์ž๋‚˜ static ๋ฉ”์„œ๋“œ, ํ•„๋“œ ๊ฐ’ ์ ‘๊ทผ์—๋Š” ํ”„๋ก์‹œ ๊ฐœ๋…์ด ์ ์šฉ๋  ์ˆ˜ ์—†๋‹ค.
    • ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ”„๋ง AOP์˜ ์กฐ์ธ ํฌ์ธํŠธ๋Š” ๋ฉ”์„œ๋“œ ์‹คํ–‰์œผ๋กœ ์ œํ•œ๋œ๋‹ค. ํ”„๋ก์‹œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ง€์ ์—์„œ๋งŒ ๋‹ค์Œ ํƒ€๊ฒŸ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ํ”„๋ก์‹œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ”„๋ง AOP๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ”„๋ง ๋นˆ์—๋งŒ AOP๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ new๋กœ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์—๋Š” AOP๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

AOP ์šฉ์–ด ์ •๋ฆฌ

์กฐ์ธ ํฌ์ธํŠธ(Join point)

  • ์–ด๋“œ๋ฐ”์ด์Šค๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜, ๋ฉ”์†Œ๋“œ ์‹คํ–‰, ์ƒ์„ฑ์ž ํ˜ธ์ถœ, ํ•„๋“œ ๊ฐ’ ์ ‘๊ทผ, static ๋ฉ”์„œ๋“œ ์ ‘๊ทผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ์ง€์ 
  • ๊ทธ๋ƒฅ ์กฐ์ธ ํฌ์ธํŠธ๋Š” ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์ด๋‹ค.  AOP๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
  • ์Šคํ”„๋ง AOP๋Š” ํ”„๋ก์‹œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์กฐ์ธ ํฌ์ธํŠธ๋Š” ํ•ญ์ƒ ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ง€์ ์œผ๋กœ ์ œํ•œ๋œ๋‹ค.
    • ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ง€์ ์— AOP๋ฅผ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

ํฌ์ธํŠธ์ปท(Pointcut)

  • ์กฐ์ธ ํฌ์ธํŠธ ์ค‘์—์„œ ์–ด๋“œ๋ฐ”์ด์Šค๊ฐ€ ์ ์šฉ๋  ์œ„์น˜๋ฅผ ์„ ๋ณ„ํ•˜๋Š” ๊ธฐ๋Šฅ
  • ์ฃผ๋กœ AspectJ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด์„œ ์ง€์ •
  • ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ”„๋ง AOP๋Š” ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ง€์ ๋งŒ ํฌ์ธํŠธ์ปท์œผ๋กœ ์„ ๋ณ„ ๊ฐ€๋Šฅ

ํƒ€์ผ“(Target)

  • ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ๋ฐ›๋Š” ๊ฐ์ฒด, ํฌ์ธํŠธ์ปท์œผ๋กœ ๊ฒฐ์ •
  • ์–ด๋“œ๋ฐ”์ด์Šค(๋ถ€๊ฐ€ ๊ธฐ๋Šฅ)๋ฅผ ์ ์šฉ ๋ฐ›๋Š” ๊ฐ์ฒด. 

์–ด๋“œ๋ฐ”์ด์Šค(Advice)

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

์• ์ŠคํŽ™ํŠธ(Aspect)

  • ์–ด๋“œ๋ฐ”์ด์Šค + ํฌ์ธํŠธ์ปท์„ ๋ชจ๋“ˆํ™” ํ•œ ๊ฒƒ
  • @Aspect๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋จ
  • ์—ฌ๋Ÿฌ ์–ด๋“œ๋ฐ”์ด์Šค์™€ ํฌ์ธํŠธ ์ปท์ด ํ•จ๊ป˜ ์กด์žฌ

์–ด๋“œ๋ฐ”์ด์ €(Advisor)

  • ํ•˜๋‚˜์˜ ์–ด๋“œ๋ฐ”์ด์Šค์™€ ํ•˜๋‚˜์˜ ํฌ์ธํŠธ ์ปท์œผ๋กœ ๊ตฌ์„ฑ
  • ์–ด๋“œ๋ฐ”์ด์ €๋Š”์Šคํ”„๋ง AOP์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋‹ค.
  • ์Šคํ”„๋ง AOP์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํŠน๋ณ„ํ•œ ์šฉ์–ด

์œ„๋น™(Weaving)

  • ํฌ์ธํŠธ์ปท์œผ๋กœ ๊ฒฐ์ •ํ•œ ํƒ€์ผ“์˜ ์กฐ์ธ ํฌ์ธํŠธ์— ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ
  • ์œ„๋น™์„ ํ†ตํ•ด ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Œ
  • AOP ์ ์šฉ์„ ์œ„ํ•ด ์• ์ŠคํŽ™ํŠธ๋ฅผ ๊ฐ์ฒด์— ์—ฐ๊ฒฐํ•œ ์ƒํƒœ
    • ์ปดํŒŒ์ผ ํƒ€์ž„(AspectJ compiler)
    • ๋กœ๋“œ ํƒ€์ž„
    • ๋Ÿฐํƒ€์ž„, ์Šคํ”„๋ง AOP๋Š” ๋Ÿฐํƒ€์ž„, ํ”„๋ก์‹œ ๋ฐฉ์‹

AOP ํ”„๋ก์‹œ

  • AOP ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ํ”„๋ก์‹œ ๊ฐ์ฒด, ์Šคํ”„๋ง์—์„œ AOP ํ”„๋ก์‹œ๋Š” JDK ๋™์  ํ”„๋ก์‹œ ๋˜๋Š” CGLIB ํ”„๋ก์‹œ์ด๋‹ค.

 

'Spring > AOP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž  (2) 2024.11.14
์Šคํ”„๋ง AOP ๊ตฌํ˜„  (0) 2024.11.13
@Aspect AOP  (0) 2024.11.12
๋นˆ ํ›„์ฒ˜๋ฆฌ๊ธฐ  (0) 2024.11.12
ํฌ์ธํŠธ์ปท, ์–ด๋“œ๋ฐ”์ด์Šค, ์–ด๋“œ๋ฐ”์ด์ €  (0) 2024.11.11
  1. AOP ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ
  2. ์• ์ŠคํŽ™ํŠธ
  3. AOP ์ ์šฉ ๋ฐฉ์‹
  4. AOP ์šฉ์–ด ์ •๋ฆฌ
'Spring/AOP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž
  • ์Šคํ”„๋ง AOP ๊ตฌํ˜„
  • @Aspect AOP
  • ๋นˆ ํ›„์ฒ˜๋ฆฌ๊ธฐ
an_jjin
an_jjin
๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๊ฐœ๋ฐœ ๊ธฐ๋ก ๋ธ”๋กœ๊ทธ
an_jjin
An Devlog
an_jjin
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • JAVA
      • ์ดˆ๊ธ‰
      • ์ค‘๊ธ‰1
      • ์ค‘๊ธ‰2
      • ๊ณ ๊ธ‰1
    • Spring
      • ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธ
      • MVC1
      • MVC2
      • DB1
      • ๋ฝ
      • ๋””์ž์ธ ํŒจํ„ด
      • AOP
    • JPA
      • JPA ๊ธฐ๋ณธ
      • JPA ํ™œ์šฉ 1
      • JPA ํ™œ์šฉ 2
      • Spring Data Jpa
      • JPA ์ •๋ฆฌ
    • ํ”„๋กœ์ ํŠธ
      • Filmeet
      • FitTrip
      • Kidsping
    • CS
      • ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ CS ์ „๊ณต ํ•ต์‹ฌ์š”์•ฝ์ง‘
    • ๋„คํŠธ์›Œํฌ
      • HTTP
      • WebSocket
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    • ์šด์˜์ฒด์ œ
      • ๋‡Œ๋ฅผ ์ž๊ทนํ•˜๋Š” ์œˆ๋„์šฐ์ฆˆ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    • Git
    • Kafka
    • Docker
    • [LG์œ ํ”Œ๋Ÿฌ์Šค] ์œ ๋ ˆ์นด
    • ํšŒ๊ณ 

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๋งํฌ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

์บ์‹œ
transactional outbox pattern
๋ถ„์‚ฐ๋ฝ
lg ์œ ํ”Œ๋Ÿฌ์Šค ์œ ๋ ˆ์นด ํ›„๊ธฐ
lg ์œ ํ”Œ๋Ÿฌ์Šค ์œ ๋ ˆ์นด
redis ๋ถ„์‚ฐ๋ฝ
db๋ถ€ํ•˜
๋นˆ ํ›„์ฒ˜๋ฆฌ๊ธฐ
redis
Transactional Outbox
ํŠธ๋žœ์žญ์…˜ ์•„์›ƒ๋ฐ•์Šค ํŒจํ„ด
์ž๋ฐ”
์ด๋ฒคํŠธ ์‘๋ชจ ์‹œ์Šคํ…œ
STOMP
lg ์œ ๋ ˆ์นด
๊ฐ์ฒด์ง€ํ–ฅ
์Šค๋ ˆ๋“œ
redlock
์„ ์ฐฉ์ˆœ ์‘๋ชจ ์‹œ์Šคํ…œ
spring websocket
Websocket
๋™์‹œ์„ฑ
queryplan
lg ์œ ํ”Œ๋Ÿฌ์Šค ์œ ๋ ˆ์นด sw ๊ต์œก ํ›„๊ธฐ
ํ”„๋ก์‹œ ํŒฉํ† ๋ฆฌ
lg ์œ ํ”Œ๋Ÿฌ์Šค ์œ ๋ ˆ์นด sw ๊ต์œก
๋„์ปค
before_commit
AOP
after_commit

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLOยท Designed By์ •์ƒ์šฐ.v4.6.1
an_jjin
์Šคํ”„๋ง AOP ๊ฐœ๋…

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.