๐ ๋ชฉ ์ฐจ
1๏ธโฃ AOP๋?
2๏ธโฃ AOP์ ์ฅ์
3๏ธโฃ AOP ์ฉ์ด
AOP(Aspect Oriented Programming)๋?
AOP๋ Aspect Oriented Programming์ ์ฝ์๋ก, "๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ"์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค. ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ ํ ๋ก์ง์ ๊ธฐ์ค์ผ๋ก ํต์ฌ ๊ด์ฌ ์ฌํญ๊ณผ ๊ณตํต ๊ด์ฌ ์ฌํญ(๋ถ๊ฐ์ ์ธ ๊ด์ฌ ์ฌํญ)์ผ๋ก ๋๋์ด์ ๋ณด๊ณ ๊ทธ ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐ ๋ชจ๋ํํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ์ฌ์ฉ๋๋ ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ด ์กด์ฌํ๊ธฐ ๋ง๋ จ์ด๋ค. ์ด๋ฌํ ๊ณตํต ๊ธฐ๋ฅ๋ค์ ๋ํ ๊ด์ฌ์ฌ๋ฅผ ๊ณตํต ๊ด์ฌ ์ฌํญ(Cross-Cutting Concern)์ด๋ผ๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํ ํต์ฌ ๋ก์ง์ ๋ํ ๊ด์ฌ์ฌ๋ฅผ ํต์ฌ ๊ด์ฌ ์ฌํญ(Core Concern)์ด๋ผ๊ณ ํ๋ค.
์ํ ์ ๋ฌด ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ก ๋ค์ด๋ณด์. ๊ณ์ข๋ฅผ ์ด์ฒดํ๊ณ , ์ ๊ธ๊ณผ ์ถ๊ธ์ ํ๊ณ , ์ด์๋ฅผ ๊ณ์ฐํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ด์ฌ ์ฌํญ์ ํด๋นํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ํ ์ ๋ฌด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ ๊ด๋ จ๋ ๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด์ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก, ๊ณตํต ๊ด์ฌ ์ฌํญ(๋ถ๊ฐ์ ์ธ ๊ด์ฌ ์ฌํญ)์ด๋ค.
์ฆ, ํต์ฌ ๊ด์ฌ ์ฌํญ์ ์ ๋ฌด ๋ก์ง์ ํฌํจํ ๊ฐ์ฒด๊ฐ ์ ๊ณตํ๋ ๊ณ ์ ์ ๊ธฐ๋ฅ์ ๋งํ๋ ๊ฒ์ด๋ฉฐ, ๊ณตํต ๊ด์ฌ ์ฌํญ(๋ถ๊ฐ์ ์ธ ๊ด์ฌ ์ฌํญ)์ ๋ณด์์ด๋ ํธ๋์ง์ ๋ฑ ํต์ฌ ๊ธฐ๋ฅ์ ๋ณด์กฐํ๊ธฐ ์ํด ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ด๋ค. ๊ณตํต ๊ด์ฌ ์ฌํญ(๋ถ๊ฐ์ ์ธ ๊ด์ฌ ์ฌํญ)์ ๋จ๋ ์ผ๋ก ์ฌ์ฉ๋์ง ์๊ณ ํต์ฌ ๊ธฐ๋ฅ ๋ฑ๊ณผ ๊ฐ์ด ์ฌ์ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น? ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ์ฝ๋๋ค์ด ๊ณ์ ๋ณด์ด๋ฉด, ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ๋ณต์กํด์ง๋ค. ์ด๋ก ์ธํด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ณ , ์ฝ๋์ ์ ์ง ๋ณด์ ๋ํ ์ด๋ ค์์ง๋ค.
AOP๋ ์๋กญ๊ฒ ํ์ํ ๊ฒ์ด ์๋๋ค. OOP์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ์ ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ณ ์ ๋ฑ์ฅํ ๊ฒ์ด๋ค. OOP๋ฅผ ์ฌ์ฉํ๋ฉด, ์ฝ๋์ ์ค๋ณต์ ๋ง์ด ์ค์ผ ์ ์๋ค. ํ์ง๋ง ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์์จ ์๋ ์์๋ค. ์ด๋, AOP๊ฐ ๋์์ค๋ค. AOP๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ด์ฌ ์ฌํญ๊ณผ ๊ณตํต ๊ด์ฌ ์ฌํญ์ ๋ถ๋ฆฌ์์ผ ๋ชจ๋ํ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ๋ค์๋ ์์๋ฅผ ๋ค์ ์ดํด๋ณด์. OOP๋ก ์ํ ์ ๋ฌด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋๋ฅผ ์ง ๋ค๋ฉด ๊ณ์ข์ด์ฒด, ์ ์ถ๊ธ, ์ด์๊ณ์ฐ ๊ธฐ๋ฅ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ํ ์ ์๋ค. ํ์ง๋ง ์ด ์์ ๋ณด์, ํธ๋์ง์ ๊ณผ ๊ฐ์ ์ฝ๋๋ ๊ณ์ํด์ ๋ฐ๋ณตํ์ฌ ๊ตฌํํด์ผ ํ๋ค. ์ด ๊ณตํต์ ์ธ ๊ด์ฌ ์ฌํญ์ ์ธ๋ถ๋ก ๋นผ๋ด์ด ๋ชจ๋ํ ํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ด AOP์ด๋ค.
AOP์ ์ฅ์
์์์ ์ดํด ๋ณด์๋ฏ, AOP๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ๋น์ฆ๋์ค ๋ก์ง๋ง๋ค ์๊ฒจ๋ ์ค๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ , ์ดํ์ ์ ์ง ๋ณด์๊ฐ ์ฌ์์ง๋ค. ๊ทธ๋ฌ๋ฉด์ ์ฝ๋์ ์ฌํ์ฉ์ฑ์ ๋์ผ ์ ์๋ค.
AOP ์ฉ์ด
1๏ธโฃ Aspect
2๏ธโฃ Advice
3๏ธโฃ Target
4๏ธโฃ Proxy
5๏ธโฃ JoinPoint
6๏ธโฃ PointCut
7๏ธโฃ Weaving
8๏ธโฃ Advisor
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์์ธ ์ฒ๋ฆฌ - Controller์์ ์ฒ๋ฆฌ (0) | 2022.10.27 |
---|---|
[Spring] MapStruct ์ฌ์ฉํ์ฌ Mapper ๊ตฌํํ๊ธฐ (0) | 2022.10.20 |
[Spring Framework] ResponseEntity (0) | 2022.08.25 |
[Spring] Spring MVC Controller ์ด๋ ธํ ์ด์ (0) | 2022.08.24 |
[Spring] Spring MVC (0) | 2022.08.24 |
๋๊ธ