AOP(1) - AOP๋ž€

AOP(Aspect Oriented Programming)๋Š” ๊ธฐ๋Šฅ์„ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ณตํ†ต๋ชจ๋“ˆ(๋ณด์•ˆ์ธ์ฆ, ๋กœ๊น… ๋“ฑ)๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ , ํ•ต์‹ฌ ๋กœ์ง์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ  ์‚ฌ์ด์‚ฌ์ด์— ๊ณตํ†ต๋ชจ๋“ˆ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ž˜ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ฝ”๋“œ ๋ฐ–์—์„œ ์„ค์ • ๋œ๋‹ค๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— ๊ฑธ์ณ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

https://img1.daumcdn.net/thumb/R1920x0/?fname=http%3A%2F%2Fcfile3.uf.tistory.com%2Fimage%2F2473C33D58496A2A0F6DF9

ํ•ต์‹ฌ๊ธฐ๋Šฅ์˜ ๊ด€์ ์—์„œ ๋ณด์•˜์„ ๋•Œ, BoardService, UserService, XXXService๋Š” ๊ณตํ†ต๋œ ์š”์†Œ๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ, ์ด ๊ด€์ ์„ ๋ถ€๊ฐ€๊ธฐ๋Šฅ ๊ด€์ ์—์„œ ๋ฐ”๋ผ๋ณด๋ฉด ๊ฐ๊ฐ์˜ Service๋Š” ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” before()์™€ after()๊ฐ€ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, AOP๋Š” ๊ธฐ์กด์— OOP์—์„œ ๋ฐ”๋ผ๋ณด๋˜ ๊ด€์ ์„ ๋ถ€๊ฐ€์ ์ธ ์ธก๋ฉด์—์„œ ๋ณด์•˜์„ ๋•Œ ๊ณตํ†ต์ ์ธ ์ธก๋ฉด์„ ์ถ”์ถœํ•˜์ž๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ, ๊ฐ€๋กœ(ํšก๋‹จ) ์˜์—ญ์˜ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์„ ์ž˜๋ž๋‹ค๊ณ  ํ•˜์—ฌ Cross-Cutting ์ด๋ผ ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

AOP๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ

https://t1.daumcdn.net/cfile/tistory/991CA73F5B38B0F916
  1. ๊ฐ„๋‹จํ•œ ๋ฉ”์†Œ๋“œ ์„ฑ๋Šฅ ๊ฒ€์‚ฌ

    • DB์— ๋‹ค๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋นผ๋Š” ๋“ฑ์˜ ๋ฐฐ์น˜ ์ž‘์—…์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ์ธก์ •

  2. Transaction ์ฒ˜๋ฆฌ

    • ๋งค๋ฒˆ try catch ๋ฌธ์˜ ์ฝ”๋“œ๋Š” ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์†Œ์Šค๋ฅผ ๋”์šฑ ๋ณต์žกํ•˜๊ฒŒ ํ•œ๋‹ค.

  3. ์˜ˆ์™ธ๋ฐ˜ํ™˜

    • ๊ตฌ์กฐ๊ฐ€ ์ข‹์ง€ ์•Š์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„๋•Œ ์ž˜ ์ •์˜๋˜์–ด ์žˆ๋Š” ์˜ˆ์™ธ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

  4. ์•„ํ‚คํ…์ฒ˜ ๊ฒ€์ฆ

  5. ๊ธฐํƒ€(๋กœ๊น…, ๋ณด์•ˆ)

AOP ์šฉ์–ด

https://t1.daumcdn.net/cfile/tistory/223B623D548C415631

AOP ์šฉ์–ด

์„ค๋ช…

Target(ํƒ€๊ฒŸ)

Aspect(๋ถ€๊ฐ€๊ธฐ๋Šฅ)์„ ๋ถ€์—ฌํ•  ๋Œ€์ƒ์œผ๋กœ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹น

Aspect

๋ถ€๊ฐ€๊ธฐ๋Šฅ ๋ชจ๋“ˆ, ํ•ต์‹ฌ๊ธฐ๋Šฅ์— ๋ถ€๊ฐ€๋˜์–ด ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ํŠน๋ณ„ํ•œ ๋ชจ๋“ˆ Advice + PointCut์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค. JoinPoint๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ธํ„ฐ์…‰ํ„ฐ ์ฒด์ธ์ด ์œ ์ง€๋˜๋ฏ€๋กœ, ํ•˜๋‚˜์˜ ์กฐ์ธํฌ์ธํŠธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ advice ์ ์šฉ ๊ฐ€๋Šฅ

Advice

์‹ค์งˆ์ ์œผ๋กœ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋‹ด์€ ๊ตฌํ˜„์ฒด์ด๋‹ค. ํŠน์ • JoinPoint์— Aspect๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ํ–‰์œ„๋กœ์„œ @around, @before, @after ๋“ฑ ๋‹ค์–‘ํ•œ ํƒ€์ž…์ด ์กด์žฌํ•œ๋‹ค. Target์— ์ข…์†๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

JoinPoint

Advice๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜ (๋ผ์–ด๋“ค ์ˆ˜ ์žˆ๋Š” ์ง€์ . ๋ฉ”์†Œ๋“œ ์ง„์ž… ์ง€์ , ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹œ์ , ํ•„๋“œ์—์„œ ๊ฐ’์„ ๊บผ๋‚ด์˜ฌ ๋•Œ ๋“ฑ) ๋‹ค์–‘ํ•œ ์‹œ์ ์— ์ ์šฉ๊ฐ€๋Šฅ

PointCut

Advice(๋ถ€๊ฐ€ ๊ธฐ๋Šฅ)๊ฐ€ ์ ์šฉ๋  ๋Œ€์ƒ(JoinPoint)๋ฅผ ์„ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ๋ชจ๋“ˆ JointPoint์˜ ์ƒ์„ธํ•œ ์ŠคํŽ™์„ ์ •์˜ํ•œ ๊ฒƒ. 'A๋ž€ ๋ฉ”์„œ๋“œ์˜ ์ง„์ž… ์‹œ์ ์— ํ˜ธ์ถœํ•  ๊ฒƒ'๊ณผ ๊ฐ™์ด ๋”์šฑ ๊ตฌ์ฒด์ ์œผ๋กœ Advice๊ฐ€ ์‹คํ–‰๋  ์ง€์ ์„ ์ •ํ•  ์ˆ˜ ์žˆ์Œ ์Šคํ”„๋ง์—์„œ๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์ด๋‚˜ AspectJ์˜ ๋ฌธ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ Poincut์„ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Proxy

Target์„ ๊ฐ์‹ธ Target์˜ ์š”์ฒญ์„ ๋Œ€์‹  ๋ฐ›์•„์ฃผ๋Š” Wrapping Object์ด๋‹ค. ํ˜ธ์ถœ์ž์—์„œ ํƒ€๊ฒŸ์„ ํ˜ธ์ถœํ•˜๊ฒŒ๋˜๋ฉด ํƒ€๊ฒŸ์ด ์•„๋‹Œ ํ”„๋ก์‹œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด, ํƒ€๊ฒŸ ๋ฉ”์†Œ๋“œ ์‹คํ–‰์ „ ์„ ์ฒ˜๋ฆฌโ†’ํƒ€๊ฒŸ ๋ฉ”์†Œ๋“œโ†’ํ›„์ฒ˜๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

Introduction

ํƒ€๊ฒŸ ํด๋ž˜์Šค์— ์ฝ”๋“œ ๋ณ€๊ฒฝ์—†์ด ์‹ ๊ทœ ๋ฉ”์†Œ๋“œ, ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅ

Weaving

Aspect์™€ ๋Œ€์ƒ์ด ๋˜๋Š” ํ•ต์‹ฌ ์ฝ”๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค. ์ฆ‰, Advice(๊ณตํ†ต์ฝ”๋“œ)๋ฅผ ํ•ต์‹ฌ๋กœ์ง์ฝ”๋“œ์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ ์ง€์ •๋œ ๊ฐ์ฒด์— Aspect๋ฅผ ์ ์šฉํ•ด ์ƒˆ๋กœ์šด Proxy ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ • ์‚ฌ์šฉํ•˜๋Š” AOP ํ”„๋ ˆ์ž„์›Œํฌ์— ๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผํƒ€์ž„, ๋กœ๋“œ ํƒ€์ž„, ๋Ÿฐํƒ€์ž„ ์‹œ์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์ด ๋‹ค๋ฅด๋‹ค.

https://img1.daumcdn.net/thumb/R1920x0/?fname=http%3A%2F%2Fcfile29.uf.tistory.com%2Fimage%2F2715394658496A61010951

Spring AOP ํŠน์ง•

  1. ํ”„๋ก์‹œ ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ AOP ๊ตฌํ˜„์ฒด์ด๋‹ค. Proxy๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์ ‘๊ทผ ์ œ์–ด ๋ฐ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

  2. Spring Bean์—๋งŒ AOP ์ ์šฉ๊ฐ€๋Šฅ

  3. ๋ชจ๋“  AOP ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๋™ํ•˜์—ฌ ๊ฐ€์žฅ ํ”ํ•œ ๋ฌธ์ œ(์ค‘๋ณต์ฝ”๋“œ, ํ”„๋ก์‹œ ํด๋ž˜์Šค ์ž‘์„ฑ์˜ ๋ฒˆ๊ฑฐ๋กœ์›€, ๊ฐ์ฒด๋“ค ๊ฐ„ ๊ด€๊ณ„ ๋ณต์žก๋„ ์ฆ๊ฐ€)์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ 

์ฐธ์กฐ

Last updated

Was this helpful?