๋ชฉ์ฐจ
โถ FrameWork Study
1. Spring Framework ์ดํดํ๊ธฐ.txt
๋๋ณด๊ธฐ
โ โ โ Spring Framework ์ดํดํ๊ธฐ โ โ โ
โ ๊ฐ์
1. Framework
์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ๊ณ ๊ด๋ฆฌํ๋ ํ๊ฒฝ(ํ, ์ฝ์)
2. Spring Framework
์ ๋ฌ๋ฐ์ ์ค์ ์ ๋ณด์ ์ํด ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๊ณ ,
๊ฐ์ฒด๋ฅผ ์์ฑ, ๊ด๋ฆฌํ๋ ์ฃผ์ฒด.
โ ์คํ๋ง ํ๋ ์์ํฌ(Spring Framework)์ ๊ฐ๋
์คํ๋ง์ ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ฌ์ฉ๋๋
์ดํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ.
์ดํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋น ๋ฅด๊ณ
ํจ์จ์ ์ผ๋ก ํ ์ ์๋๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐํ์ด ๋๋ ํ๊ณผ
๊ณตํต ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ, ๊ทธ๋ฆฌ๊ณ API ๋ฑ์ ์ ๊ณตํด์ค๋ค.
- ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ํ → ์คํ๋ง ์ปจํ ์ด๋
์คํ๋ง์ ์คํ๋ง ์ปจํ ์ด๋ ๋๋ ์ดํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ผ๊ณ ๋ถ๋ฆฌ๋
์คํ๋ง ๋ฐํ์ ์์ง์ ์ ๊ณตํ๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์
์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ค๋ธ์ ํธ(๊ฐ์ฒด)๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ ์๋ ์์ง๋ง
๋ณดํต... ์น ๋ชจ๋์์ ๋์ํ๋ ์๋น์ค๋ ์๋ธ๋ฆฟ์ผ๋ก ๋ฑ๋กํด์ ์ฌ์ฉํ๋ค.
์คํ๋ง์ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ๊ณผ
์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ค๋ธ์ ํธ๋ฅผ ์ด์ฉํ ์ ์๋๋ก
์ค์ ์ ๋ณด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํ๋ค.
==> ์ค์ ์ ๋ณด์ ์ํด ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๊ณ
๊ฐ์ฒด๋ฅผ ์์ฑ, ๊ด๋ฆฌํ๋ ์ฃผ์ฒด
- ๊ณตํต ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ → IoC/DI, ์๋น์ค ์ถ์ํ, AOP
ํ๋ ์์ํฌ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ค๋ธ์ ํธ(๊ฐ์ฒด)๊ฐ
์์ฑ๋๊ณ ๋์ํ๋ ๋ฐฉ์์ ๋ํด ํ์ ์ ๊ณตํด์ค ๋ฟ ์๋๋ผ
์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์์ฑ๋์ด์ผ ํ๋์ง์ ๋ํ ๊ธฐ์ค๋ ์ ์ํ๋ค.
์ด๋ฐ ํ์ ๋ณดํต ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด๋ผ๊ณ ํ๋ค.
์คํ๋ง์ ์ธ ๊ฐ์ง ํต์ฌ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ ๊ณตํ๋ค.
โ IoC/DI
์ค๋ธ์ ํธ ์๋ช ์ฃผ๊ธฐ์ ์์กด ๊ด๊ณ์ ๋ํ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด๋ค.
์คํ๋ง์ ์ ์ฐํ๊ณ ํ์ฅ์ฑ์ด ๋ฐ์ด๋ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋์์ฃผ๋
๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น๊ณผ ๋์์ธ ํจํด์ ํต์ฌ ์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋
IoC/DI ๋ฅผ ํ๋ ์์ํฌ์ ํต์ฌ ๊ทผ๊ฐ์ผ๋ก ์ผ๊ณ ์๋ค.
์คํ๋ง ํ๋ ์์ํฌ์์ ๋์ํ๋ ์ฝ๋๋
IoC/DI ๋ฐฉ์์ ๋ฐ๋ผ ์์ฑ๋์ด์ผ ์คํ๋ง์ด ์ ๊ณตํ๋ ๊ฐ์น๋ฅผ ์ ๋๋ก ๋๋ฆด ์ ์๋ค.
์คํ๋ง์ด ์ง์ ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ์ ๊ณผ API, ์ฌ์ง์ด ์ปจํ ์ด๋๊น์ง๋
IoC/DI ๋ฐฉ์์ผ๋ก ์์ฑ๋์ด(๋ง๋ค์ด์ ธ)์๋ค.
์คํ๋ง์ ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋๋ฐ
๊ธฐ๋ณธ์ด ๋๋ฉฐ ๊ฐ์ฅ ์ค์ํ ๊ธฐ์ ์ด๋ค.
·IoC → - ๊ฐ์ฒด ๊ด๋ฆฌ์ ์ฃผ์ฒด.
- Inversion of Control : ์ ์ด์ ์ญ์ (์ญ์ ์ด)
- ๊ฐ์ฒด ์์ฑ๊ณผ ๊ด๋ฆฌ๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์๋๋ผ
์ธ๋ถ(์ปจํ ์ดํฐ)์์ ๋ง๋ค์ด์ง ์ค๋ธ์ ํธ(๊ฐ์ฒด)๋ฅผ
์ ๊ณต๋ฐ๋ ์ ์ฅ์ด ๋๋ ๊ฒ.
- Bean : ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๋์.
- Bean Factory : ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ์ฃผ์ฒด.
์ผ๋ฐ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ํ์ฅํ Application Context ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
- Application Context : Bean Factory ์ ํ์ฅ ๋ฒ์ .
- ์ค์ ์ ๋ณด : ์ด๋ค ๊ฐ์ฒด๋ค์ด ๊ด๋ฆฌ ๋์์ธ์ง ์ค์ ํ ์ ๋ณด.
XML, Annotation ๋ฑ์ ์ด์ฉํ๋ค.
๊ฐ์ฒด ์์กด ๊ด๊ณ๋ ํํ๋์ด ์๋ค.
- IoC ์ปจํ ์ด๋ : ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ๊ณ ๊ด๋ฆฌํ๋ ๊ณต๊ฐ
·DI → - ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ.
- ์๋ฐ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์
๋ชจ๋ has-a ๊ด๊ณ๋ฅผ ํตํด ์ฒ๋ฆฌํด ์๊ธฐ ๋๋ฌธ์
์ด๋ค์ ๋ชจ๋ ์์กด๊ด๊ณ๊ฐ ์น๋ฐํ๊ณ ๋ฐ์ ํ ์ํฉ์ผ ์ ๋ฐ์ ์๋ค.
๋๋ฌธ์... ์ด๋ฌํ ๊ฐํ ๊ฒฐํฉ ์ํ๋
์ ์ฐ์ฑ์ ๋จ์ด๋จ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๊ฒ ๋๋ค.
์ด๋ฌํ ๊ฒฐํฉ ์ํ๋ฅผ ํ์ด์ฃผ๋ ๊ณผ์ (๋ฐฉ๋ฒ)์ด ๋ฐ๋ก DI ์ด๋ค.
- Dependency Injection : ์์กด์ฑ ์ฃผ์ (์์กด๊ด๊ณ ์ฃผ์ )
- ์์กด๊ด๊ณ ์ฃผ์ : ์์กด ๊ฐ์ฒด๋ฅผ... ์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด์...
์ธ๋ถ์์ ์ฃผ์ ํ๋ ์ก์ (์ํ)
- ์์กด๊ด๊ณ : A ๊ฐ ์คํ๋๊ธฐ ์ํด์ B ๋ฅผ ํ์๋ก ํ๋ ์ํ
- ์์กด๊ฐ์ฒด : A ์ ์ฅ์์ ์์กด ๊ฐ์ฒด๋ B (์ฆ, ์ฃผ์ ๋๋ ๊ฐ์ฒด)
โป ์ฐ์ ... A ๊ฐ์ฒด์ B ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋๊ฒจ์ค์ผ๋ก์จ
B ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด...
A ๊ฐ์ฒด๋ ์ฌ์ ํ B ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๋ฐ๋ ๋ฌธ์ ๊ฐ ์๊ณ ,
B ๊ฐ์ฒด๋ A ๊ฐ์ฒด์์ ๊ฒฐํฉ ์ํ๊ฐ ๋์จํด์ง๋ค๊ณ ํ ์ ์๋ค.
์ด ๋, ๋๊ฒจ์ฃผ๋ ๋ฐฉ๋ฒ์ ์์ฑ์ ๋๋ setter() ๋ฉ์๋๋ฅผ
์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
DI ๋ฅผ ์ํด ๊ฐ์ฒด๋ ์์ ๊ฐ์ฒด๋ถํฐ ์์ฑํด์
ํฐ ๊ฐ์ฒด๋ก DI ํ๋ ๊ณผ์ ์ ๋ฐ๋ณต์ ์ผ๋ก ๊ฑฐ์น๊ฒ ๋๋ค.
์ด ๋, ์์ฑ๋ ์ค๋ธ์ ํธ(๊ฐ์ฒด)๊ฐ ๋ง๋ค์ด์ง ๋ ๊น์ง
๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ ์ฃผ์ฒด(๋๊ตฐ๊ฐ๊ฐ...) ํ์ํ๋ฐ,
๊ทธ ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก ์ปจํ ์ด๋์ธ ๊ฒ์ด๋ค.
โก ์๋น์ค ์ถ์ํ
์คํ๋ง์ ์ฌ์ฉํ๋ฉด ํ๊ฒฝ์ด๋ ์๋ฒ, ํน์ ๊ธฐ์ ์
์ข ์๋์ง ์๊ณ ์ด์์ฑ์ด ๋ฐ์ด๋๋ฉฐ ์ ์ฐํ ์ดํ๋ฆฌ์ผ์ด์ ์
๋ง๋ค ์ ์๊ฒ ๋๋๋ฐ, ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด ์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก ์๋น์ค ์ถ์ํ์ด๋ค.
๊ตฌ์ฒด์ ์ธ ๊ธฐ์ ๊ณผ ํ๊ฒฝ์ ์ข ์๋์ง ์๋๋ก
์ ์ฐํ ์ถ์ ๊ณ์ธต์ ๋๋ ๋ฐฉ๋ฒ์ด๋ค.
โข AOP(Aspect Oriented Programming)
์ด AOP ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์ฐ์ฌํด์ ๋ํ๋๋ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์
๋ ๋ฆฝ์ ์ธ ์ํ๋ก ๋ชจ๋ํํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด๋ค.
์คํ๋ง์ AOP ๋ฅผ ์ด์ฉํด์ ๋ค์ํ ์ํฐํ๋ผ์ด์ฆ ์๋น์ค๋ฅผ
์ ์ฉํ๊ณ ๋ ๊น๋ํ ์ฝ๋๋ฅผ ์ ์งํ ์ ์๊ฒ ํด์ค๋ค.
- ๊ธฐ์ API
์คํ๋ง์ ์ํฐํ๋ผ์ด์ฆ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋ค์ํ ์์ญ์
๋ฐ๋ก ํ์ฉ๋ ์ ์๋ ๋ฐฉ๋ํ ์์ ๊ธฐ์ API ๋ฅผ ์ ๊ณตํ๋ค.
UI ์์ฑ์ ๋ฌผ๋ก ์ด๊ณ , ์น ํ๋ฆฌ์ ํ ์ด์ ๊ณ์ธต, ๋น์ฆ๋์ค ์๋น์ค ๊ณ์ธต,
๊ธฐ๋ฐ ์๋น์ค ๊ณ์ธต, ๋๋ฉ์ธ ๊ณ์ธต, ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต ๋ฑ์์
ํ์ํ ์ฃผ์ ๊ธฐ์ ์ ์คํ๋ง์์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก
์ง์ํด์ฃผ๋ ์ ๋ต ํด๋์ค๋ฅผ ์ ๊ณตํ๋ค.
์คํ๋ง์ด ์ ๊ณตํ๋ API ์ ์ง์ ๊ธฐ์ ์
๋ชจ๋ ์คํ๋ง ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ๋ฐ๋ผ ์์ฑ๋์๊ธฐ ๋๋ฌธ์
์ด๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒ๋ง์ผ๋ก๋
์คํ๋ง ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ฝ๋์ ์์ฐ์ค๋ฝ๊ฒ ์ ์ฉํ ์ ์๋ค.
์คํ๋ง์ ๋ชจ๋ ๊ธฐ์ ์ ํ์ค ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ํ๋ซํผ(JavaEE)์ ๊ธฐ์ ์ ๋๊ณ ์๋ค.
ํ์ค ๊ธฐ์ ๊ณผ ๋๋ถ์ด ์ ๋ช ์คํ ์์ค ๊ธฐ์ ๊ณผ ์ฃผ์ ์์ฉ ๊ธฐ์ ์ ๋ํ
์ง์ ๊ธฐ๋ฅ๋ ๋ค์ํ๊ฒ ์ ๊ณต๋๋ค.
โ ์คํ๋ง ํ๋ ์์ํฌ(Spring Framework)์ ์ฃผ์ ๊ธฐ๋ฅ๊ณผ ํน์ง
1. ๊ฒฝ๋ ์ปจํ ์ด๋
์๋ฐ ๊ฐ์ฒด๋ฅผ ๋ด๊ณ , ์ด๋ค ์๋ฐ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ์
๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌ.
2. DI(Dependency Injection)
์์กด์ฑ(๊ด๊ณ) ์ฃผ์ (์ฝ์ )์ ์ง์.
์ค์ ํ์ผ์ ํตํด ๊ฐ์ฒด๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ ์.
3. AOP(Aspect Oriented Programmind) ์ง์.
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ง์.
์ฌ๋ฌ ๋ชจ๋์ ๊ณตํต์ ์ผ๋ก ์ฐ์ด๋ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ
๊ฐ ๋ชจ๋์ ์ ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅ.
4. POJO(Plane Old Java Object) ์ง์
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ง์ํ์ฌ
๊ธฐ์กด ์์ฑ ์ฝ๋์ ์ ์ง์ฑ์ ํฅ์.
→ ๋ณดํต์ ์๋ฐ(๋น) ๊ฐ์ฒด.
- ์์(x)
- ์ธํฐํ์ด์ค(x)
5. ํธ๋์ญ์ ์ฒ๋ฆฌ
JDBC ๋ JTA ๋ฅผ์ฌ์ฉํ๋ ์ค์ ํ์ผ์ ํตํด
ํธ๋์ญ์ ์ ๊ด๋ฆฌํ์ฌ ๋์ผํ ์ฝ๋๋ฅผ ์ฌ๋ฌ ํ๊ฒฝ์์
์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ์ด ๊ฐ๋ฅ.
6. ๋ค์ํ ํ๋ ์์ํฌ์์ ์กฐํฉ
myBatis(iBatis), Hivernate, Struts, Struts2, JPA, JDO, Quartz ๋ฑ
๋ค๋ฅธ ํ๋ ์์ํฌ ๋ฟ ์๋๋ผ ์ฌ์ฉ์๊ฐ ๋ง๋ ํ๋ ์์ํฌ์์ ์ฐ๋์ฑ์ ์ ๊ณตํ๋ค.
โป ์คํ๋ง ํ๋ ์์ํฌ(Spring Framework) ์์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋
- DI(Dependency Injection, ์์กด์ฑ ์ฃผ์ , ์์กด๊ด๊ณ ์ฃผ์ )
: ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์์กด์ฑ์ ๋ํด์
์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋๊ฐ์ ๋ํ ๊ฐ๋
- IoC(Inversion of Control, ์ ์ด์ ์ญ์ )
: ์ธ์คํด์ค์ ์์ฑ๋ถํฐ ์๋ฉธ๊น์ง์ ์ธ์คํด์ค ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ
์ปจํ ์ด๋๊ฐ ๋์ ํ๋ ๊ฐ๋ .
โ ๊ฐ์
1. Framework
์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ๊ณ ๊ด๋ฆฌํ๋ ํ๊ฒฝ(ํ, ์ฝ์)
2. Spring Framework
์ ๋ฌ๋ฐ์ ์ค์ ์ ๋ณด์ ์ํด ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๊ณ ,
๊ฐ์ฒด๋ฅผ ์์ฑ, ๊ด๋ฆฌํ๋ ์ฃผ์ฒด.
โ ์คํ๋ง ํ๋ ์์ํฌ(Spring Framework)์ ๊ฐ๋
์คํ๋ง์ ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ฌ์ฉ๋๋
์ดํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ.
์ดํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋น ๋ฅด๊ณ
ํจ์จ์ ์ผ๋ก ํ ์ ์๋๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐํ์ด ๋๋ ํ๊ณผ
๊ณตํต ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ, ๊ทธ๋ฆฌ๊ณ API ๋ฑ์ ์ ๊ณตํด์ค๋ค.
- ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ํ → ์คํ๋ง ์ปจํ ์ด๋
์คํ๋ง์ ์คํ๋ง ์ปจํ ์ด๋ ๋๋ ์ดํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ผ๊ณ ๋ถ๋ฆฌ๋
์คํ๋ง ๋ฐํ์ ์์ง์ ์ ๊ณตํ๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์
์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ค๋ธ์ ํธ(๊ฐ์ฒด)๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ ์๋ ์์ง๋ง
๋ณดํต... ์น ๋ชจ๋์์ ๋์ํ๋ ์๋น์ค๋ ์๋ธ๋ฆฟ์ผ๋ก ๋ฑ๋กํด์ ์ฌ์ฉํ๋ค.
์คํ๋ง์ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ๊ณผ
์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ค๋ธ์ ํธ๋ฅผ ์ด์ฉํ ์ ์๋๋ก
์ค์ ์ ๋ณด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํ๋ค.
==> ์ค์ ์ ๋ณด์ ์ํด ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๊ณ
๊ฐ์ฒด๋ฅผ ์์ฑ, ๊ด๋ฆฌํ๋ ์ฃผ์ฒด
- ๊ณตํต ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ → IoC/DI, ์๋น์ค ์ถ์ํ, AOP
ํ๋ ์์ํฌ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ค๋ธ์ ํธ(๊ฐ์ฒด)๊ฐ
์์ฑ๋๊ณ ๋์ํ๋ ๋ฐฉ์์ ๋ํด ํ์ ์ ๊ณตํด์ค ๋ฟ ์๋๋ผ
์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์์ฑ๋์ด์ผ ํ๋์ง์ ๋ํ ๊ธฐ์ค๋ ์ ์ํ๋ค.
์ด๋ฐ ํ์ ๋ณดํต ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด๋ผ๊ณ ํ๋ค.
์คํ๋ง์ ์ธ ๊ฐ์ง ํต์ฌ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ ๊ณตํ๋ค.
โ IoC/DI
์ค๋ธ์ ํธ ์๋ช ์ฃผ๊ธฐ์ ์์กด ๊ด๊ณ์ ๋ํ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด๋ค.
์คํ๋ง์ ์ ์ฐํ๊ณ ํ์ฅ์ฑ์ด ๋ฐ์ด๋ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋์์ฃผ๋
๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น๊ณผ ๋์์ธ ํจํด์ ํต์ฌ ์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋
IoC/DI ๋ฅผ ํ๋ ์์ํฌ์ ํต์ฌ ๊ทผ๊ฐ์ผ๋ก ์ผ๊ณ ์๋ค.
์คํ๋ง ํ๋ ์์ํฌ์์ ๋์ํ๋ ์ฝ๋๋
IoC/DI ๋ฐฉ์์ ๋ฐ๋ผ ์์ฑ๋์ด์ผ ์คํ๋ง์ด ์ ๊ณตํ๋ ๊ฐ์น๋ฅผ ์ ๋๋ก ๋๋ฆด ์ ์๋ค.
์คํ๋ง์ด ์ง์ ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ์ ๊ณผ API, ์ฌ์ง์ด ์ปจํ ์ด๋๊น์ง๋
IoC/DI ๋ฐฉ์์ผ๋ก ์์ฑ๋์ด(๋ง๋ค์ด์ ธ)์๋ค.
์คํ๋ง์ ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋๋ฐ
๊ธฐ๋ณธ์ด ๋๋ฉฐ ๊ฐ์ฅ ์ค์ํ ๊ธฐ์ ์ด๋ค.
·IoC → - ๊ฐ์ฒด ๊ด๋ฆฌ์ ์ฃผ์ฒด.
- Inversion of Control : ์ ์ด์ ์ญ์ (์ญ์ ์ด)
- ๊ฐ์ฒด ์์ฑ๊ณผ ๊ด๋ฆฌ๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์๋๋ผ
์ธ๋ถ(์ปจํ ์ดํฐ)์์ ๋ง๋ค์ด์ง ์ค๋ธ์ ํธ(๊ฐ์ฒด)๋ฅผ
์ ๊ณต๋ฐ๋ ์ ์ฅ์ด ๋๋ ๊ฒ.
- Bean : ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๋์.
- Bean Factory : ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ์ฃผ์ฒด.
์ผ๋ฐ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ํ์ฅํ Application Context ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
- Application Context : Bean Factory ์ ํ์ฅ ๋ฒ์ .
- ์ค์ ์ ๋ณด : ์ด๋ค ๊ฐ์ฒด๋ค์ด ๊ด๋ฆฌ ๋์์ธ์ง ์ค์ ํ ์ ๋ณด.
XML, Annotation ๋ฑ์ ์ด์ฉํ๋ค.
๊ฐ์ฒด ์์กด ๊ด๊ณ๋ ํํ๋์ด ์๋ค.
- IoC ์ปจํ ์ด๋ : ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ๊ณ ๊ด๋ฆฌํ๋ ๊ณต๊ฐ
·DI → - ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ.
- ์๋ฐ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์
๋ชจ๋ has-a ๊ด๊ณ๋ฅผ ํตํด ์ฒ๋ฆฌํด ์๊ธฐ ๋๋ฌธ์
์ด๋ค์ ๋ชจ๋ ์์กด๊ด๊ณ๊ฐ ์น๋ฐํ๊ณ ๋ฐ์ ํ ์ํฉ์ผ ์ ๋ฐ์ ์๋ค.
๋๋ฌธ์... ์ด๋ฌํ ๊ฐํ ๊ฒฐํฉ ์ํ๋
์ ์ฐ์ฑ์ ๋จ์ด๋จ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๊ฒ ๋๋ค.
์ด๋ฌํ ๊ฒฐํฉ ์ํ๋ฅผ ํ์ด์ฃผ๋ ๊ณผ์ (๋ฐฉ๋ฒ)์ด ๋ฐ๋ก DI ์ด๋ค.
- Dependency Injection : ์์กด์ฑ ์ฃผ์ (์์กด๊ด๊ณ ์ฃผ์ )
- ์์กด๊ด๊ณ ์ฃผ์ : ์์กด ๊ฐ์ฒด๋ฅผ... ์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด์...
์ธ๋ถ์์ ์ฃผ์ ํ๋ ์ก์ (์ํ)
- ์์กด๊ด๊ณ : A ๊ฐ ์คํ๋๊ธฐ ์ํด์ B ๋ฅผ ํ์๋ก ํ๋ ์ํ
- ์์กด๊ฐ์ฒด : A ์ ์ฅ์์ ์์กด ๊ฐ์ฒด๋ B (์ฆ, ์ฃผ์ ๋๋ ๊ฐ์ฒด)
โป ์ฐ์ ... A ๊ฐ์ฒด์ B ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋๊ฒจ์ค์ผ๋ก์จ
B ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด...
A ๊ฐ์ฒด๋ ์ฌ์ ํ B ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๋ฐ๋ ๋ฌธ์ ๊ฐ ์๊ณ ,
B ๊ฐ์ฒด๋ A ๊ฐ์ฒด์์ ๊ฒฐํฉ ์ํ๊ฐ ๋์จํด์ง๋ค๊ณ ํ ์ ์๋ค.
์ด ๋, ๋๊ฒจ์ฃผ๋ ๋ฐฉ๋ฒ์ ์์ฑ์ ๋๋ setter() ๋ฉ์๋๋ฅผ
์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
DI ๋ฅผ ์ํด ๊ฐ์ฒด๋ ์์ ๊ฐ์ฒด๋ถํฐ ์์ฑํด์
ํฐ ๊ฐ์ฒด๋ก DI ํ๋ ๊ณผ์ ์ ๋ฐ๋ณต์ ์ผ๋ก ๊ฑฐ์น๊ฒ ๋๋ค.
์ด ๋, ์์ฑ๋ ์ค๋ธ์ ํธ(๊ฐ์ฒด)๊ฐ ๋ง๋ค์ด์ง ๋ ๊น์ง
๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ ์ฃผ์ฒด(๋๊ตฐ๊ฐ๊ฐ...) ํ์ํ๋ฐ,
๊ทธ ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก ์ปจํ ์ด๋์ธ ๊ฒ์ด๋ค.
โก ์๋น์ค ์ถ์ํ
์คํ๋ง์ ์ฌ์ฉํ๋ฉด ํ๊ฒฝ์ด๋ ์๋ฒ, ํน์ ๊ธฐ์ ์
์ข ์๋์ง ์๊ณ ์ด์์ฑ์ด ๋ฐ์ด๋๋ฉฐ ์ ์ฐํ ์ดํ๋ฆฌ์ผ์ด์ ์
๋ง๋ค ์ ์๊ฒ ๋๋๋ฐ, ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด ์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก ์๋น์ค ์ถ์ํ์ด๋ค.
๊ตฌ์ฒด์ ์ธ ๊ธฐ์ ๊ณผ ํ๊ฒฝ์ ์ข ์๋์ง ์๋๋ก
์ ์ฐํ ์ถ์ ๊ณ์ธต์ ๋๋ ๋ฐฉ๋ฒ์ด๋ค.
โข AOP(Aspect Oriented Programming)
์ด AOP ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์ฐ์ฌํด์ ๋ํ๋๋ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์
๋ ๋ฆฝ์ ์ธ ์ํ๋ก ๋ชจ๋ํํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด๋ค.
์คํ๋ง์ AOP ๋ฅผ ์ด์ฉํด์ ๋ค์ํ ์ํฐํ๋ผ์ด์ฆ ์๋น์ค๋ฅผ
์ ์ฉํ๊ณ ๋ ๊น๋ํ ์ฝ๋๋ฅผ ์ ์งํ ์ ์๊ฒ ํด์ค๋ค.
- ๊ธฐ์ API
์คํ๋ง์ ์ํฐํ๋ผ์ด์ฆ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋ค์ํ ์์ญ์
๋ฐ๋ก ํ์ฉ๋ ์ ์๋ ๋ฐฉ๋ํ ์์ ๊ธฐ์ API ๋ฅผ ์ ๊ณตํ๋ค.
UI ์์ฑ์ ๋ฌผ๋ก ์ด๊ณ , ์น ํ๋ฆฌ์ ํ ์ด์ ๊ณ์ธต, ๋น์ฆ๋์ค ์๋น์ค ๊ณ์ธต,
๊ธฐ๋ฐ ์๋น์ค ๊ณ์ธต, ๋๋ฉ์ธ ๊ณ์ธต, ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต ๋ฑ์์
ํ์ํ ์ฃผ์ ๊ธฐ์ ์ ์คํ๋ง์์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก
์ง์ํด์ฃผ๋ ์ ๋ต ํด๋์ค๋ฅผ ์ ๊ณตํ๋ค.
์คํ๋ง์ด ์ ๊ณตํ๋ API ์ ์ง์ ๊ธฐ์ ์
๋ชจ๋ ์คํ๋ง ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ๋ฐ๋ผ ์์ฑ๋์๊ธฐ ๋๋ฌธ์
์ด๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒ๋ง์ผ๋ก๋
์คํ๋ง ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ฝ๋์ ์์ฐ์ค๋ฝ๊ฒ ์ ์ฉํ ์ ์๋ค.
์คํ๋ง์ ๋ชจ๋ ๊ธฐ์ ์ ํ์ค ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ํ๋ซํผ(JavaEE)์ ๊ธฐ์ ์ ๋๊ณ ์๋ค.
ํ์ค ๊ธฐ์ ๊ณผ ๋๋ถ์ด ์ ๋ช ์คํ ์์ค ๊ธฐ์ ๊ณผ ์ฃผ์ ์์ฉ ๊ธฐ์ ์ ๋ํ
์ง์ ๊ธฐ๋ฅ๋ ๋ค์ํ๊ฒ ์ ๊ณต๋๋ค.
โ ์คํ๋ง ํ๋ ์์ํฌ(Spring Framework)์ ์ฃผ์ ๊ธฐ๋ฅ๊ณผ ํน์ง
1. ๊ฒฝ๋ ์ปจํ ์ด๋
์๋ฐ ๊ฐ์ฒด๋ฅผ ๋ด๊ณ , ์ด๋ค ์๋ฐ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ์
๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌ.
2. DI(Dependency Injection)
์์กด์ฑ(๊ด๊ณ) ์ฃผ์ (์ฝ์ )์ ์ง์.
์ค์ ํ์ผ์ ํตํด ๊ฐ์ฒด๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ ์.
3. AOP(Aspect Oriented Programmind) ์ง์.
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ง์.
์ฌ๋ฌ ๋ชจ๋์ ๊ณตํต์ ์ผ๋ก ์ฐ์ด๋ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ
๊ฐ ๋ชจ๋์ ์ ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅ.
4. POJO(Plane Old Java Object) ์ง์
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ง์ํ์ฌ
๊ธฐ์กด ์์ฑ ์ฝ๋์ ์ ์ง์ฑ์ ํฅ์.
→ ๋ณดํต์ ์๋ฐ(๋น) ๊ฐ์ฒด.
- ์์(x)
- ์ธํฐํ์ด์ค(x)
5. ํธ๋์ญ์ ์ฒ๋ฆฌ
JDBC ๋ JTA ๋ฅผ์ฌ์ฉํ๋ ์ค์ ํ์ผ์ ํตํด
ํธ๋์ญ์ ์ ๊ด๋ฆฌํ์ฌ ๋์ผํ ์ฝ๋๋ฅผ ์ฌ๋ฌ ํ๊ฒฝ์์
์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ์ด ๊ฐ๋ฅ.
6. ๋ค์ํ ํ๋ ์์ํฌ์์ ์กฐํฉ
myBatis(iBatis), Hivernate, Struts, Struts2, JPA, JDO, Quartz ๋ฑ
๋ค๋ฅธ ํ๋ ์์ํฌ ๋ฟ ์๋๋ผ ์ฌ์ฉ์๊ฐ ๋ง๋ ํ๋ ์์ํฌ์์ ์ฐ๋์ฑ์ ์ ๊ณตํ๋ค.
โป ์คํ๋ง ํ๋ ์์ํฌ(Spring Framework) ์์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋
- DI(Dependency Injection, ์์กด์ฑ ์ฃผ์ , ์์กด๊ด๊ณ ์ฃผ์ )
: ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์์กด์ฑ์ ๋ํด์
์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋๊ฐ์ ๋ํ ๊ฐ๋
- IoC(Inversion of Control, ์ ์ด์ ์ญ์ )
: ์ธ์คํด์ค์ ์์ฑ๋ถํฐ ์๋ฉธ๊น์ง์ ์ธ์คํด์ค ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ
์ปจํ ์ด๋๊ฐ ๋์ ํ๋ ๊ฐ๋ .
2. Spring Framework ํ๊ฒฝ์ค์ .txt
๋๋ณด๊ธฐ
โ โ โ Spring Framework ํ๊ฒฝ์ค์ โ โ โ
โป ์คํ๋ง ํ๋ ์์ํฌ(Spring Framework) ๊ตฌ์ฑ์ ์ํด
์คํ๋ง ํ๋ ์์ํฌ ๊ด๋ จ ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์์ผ ํ๋๋ฐ
http://www.spring.io ๊ฒฝ๋ก์ ์ ๊ทผํ์ฌ ํ์ธํด๋ณด๋ฉด
๋ค์ด๋ก๋ ๋ฐ์ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์๋ ์ํ์ด๋ค.
(STS ์ฐ๋ (Maven ํ์ฉ)๋ง ๊ฐ๋ฅํ ํํ...)
โ ์ ์ฉ ๋ฐ ํ ์คํธ๊ฐ ์ํํ ๋ฒ์ ์ผ๋ก ์ค์ต ํ๊ฒฝ ๊ตฌ์ฑ(๋น STS)
โ spring-framework-3.0. 2-with-docs.zip
๊ธฐ๋ณธ์ ์ธ ์คํ๋ง ํ๋ ์์ํฌ ๊ตฌ์ฑ์ ํ์ํ ํ์์ ์ธ jar ํ์ผ๊ณผ
์คํ๋ง ํ๋ ์์ํฌ ์ค๋ช ๋ฌธ์(pdf ๋ฒ์ , html ๋ฒ์ )๊ฐ ํฌํจ๋ ํญ๋ชฉ,
์คํ๋ง ์๋์ jar ํ์ผ๋ค~!!
โก spring-framwork-3.0. 2-dependencies.zip
์คํ๋ง ํ๋ ์์ํฌ ๊ตฌ์ฑ์ ์์กด์ฑ์ ๊ฐ์ง jarํ์ผ๋ค์ด ํฌํจ๋ ํญ๋ชฉ.
์ด๋ค ๊ธฐ๋์ ์ํํ๋๋์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ํญ๋ชฉ.
์คํ๋ง์ด ์ฐธ์กฐํ๋ ์์กด jar ํ์ผ๋ค~!!!
โป ์ฃผ์
๋ค์ด๋ก๋ ๋ฐ์ ๋ ๊ฐ์ ์์ถ ํ์ผ์ C:/ ๋๋ D:/ ๋๋ผ์ด๋ธ ๋ฃจํธ์
ํด๋๋ฅผ ์์ฑํ์ฌ ์์ถ์ ํ์ด๋๋๋ค.
๊ทธ ์์ ๋ค์ด์๋ jar ํ์ผ๋ค์ ์ ํ์ ์ผ๋ก ๋ณต์ฌํ์ฌ ์ฌ์ฉํ ์์ ์ด๊ธฐ ๋๋ฌธ์
์ฌ์ด ๊ฒฝ๋ก์ ์์ถ์ ํ์ด๋๋๋ค๋ ์๋ฏธ๋ ์์ง๋ง
์์ถ์ ํด์ ํ๋ ๊ณผ์ ์์ ์ด๋ฆ(๊ฒฝ๋ก ํฌํจ)์ด ๊ธธ์ด์ ํน์ ํ์ผ์ ๋ํด
์ ๋๋ก ์์ถ์ ํด์ ํ์ง ๋ชปํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์
๊ฐ๋จํ ๊ฒฝ๋ก์์ ์์ถ์ ํด์ ํ ์ ์๋๋ก ํ๋ค.
----------------------------------------------------------------------------------------------
โ โ โ IoC / DI ๊ด๋ จ ์ค์ต 01 โ โ โ
โป ์คํ๋ง ํ๋ ์์ํฌ ์์ด IoC / DI ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ์ฑ์ ์ฒ๋ฆฌ
3. ๊ตญ์ด, ์์ด, ์ํ ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์ด์ , ํ๊ท ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Record.java → ์ธํฐํ์ด์ค
2. RecordView.java → ์ธํฐํ์ด์ค
3. RecordImpl1.java → Recored ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
4. RecordImpl2.java → Recored ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
5. RecordViewImpl.java → RecoredView ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
6. Main.java → ํด๋์ค.main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
----------------------------------------------------------------------------------------------
โ โ โ IoC / DI ๊ด๋ จ ์ค์ต 02 โ โ โ
โป ์คํ๋ง ํ๋ ์์ํฌ ์ ์ฉ IoC / DI ๊ฐ๋ ์ค์ต
โ ์ค์ต ํ๊ฒฝ
→ ์คํ๋ง ์์์ ํ์ฉํ ์ ์๋ ํ๊ฒฝ ๊ตฌ์ฑ
1. ํ๋ก์ ํธ๋ช ๋ง์ฐ์ค ์ฐํด๋ฆญ
2. Build Path > Configure Build Path... ๋ฉ๋ด ์ ํ
3. Libraries ํญ ์ ํ > Add External JARs... ๋ฒํผ ํด๋ฆญ
4. ํ์ํ jar ํ์ผ์ ํด๋น ํ๋ก์ ํธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฑ๋ก
- ๊ฒฝ๋ก1 : C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.asm-3.0.2.RELEASE
·ํ์ผ2 → org.springframework.beans-3.0.2.RELEASE
·ํ์ผ3 → org.springframework.context-3.0.2.RELEASE
·ํ์ผ4 → org.springframework.core-3.0.2.RELEASE
·ํ์ผ5 → org.springframework.expression-3.0.2.RELEASE
- ๊ฒฝ๋ก2 : C:\s-f-3.0.2-dependencies\org.apache.commons
\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ6 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
5. ์คํ๋ง ํ๋ ์์ํฌ์ ํ๊ฒฝ ์ค์ ํ์ผ์ XML ํ์์ผ๋ก ์์ฑ
์์ฑ ์์น๋ ํ๋ก์ ํธ ํ์์ src ๋๋ ํฐ๋ฆฌ(ํ์ฌ ์ค์ต ํ๊ฒฝ์ ์ฝ์์ด๋ฏ๋ก...)
ํ์ฌ ์ค์ต ํ๊ฒฝ์์์ ํ์ผ ์ด๋ฆ์ ์ฌ์ฉ์๊ฐ ์์๋ก ๋ถ์ฌํด์ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅ
→ ใapplicationContext.xmlใ
6. ์์ฑํ applicationContext.xml ํ์ผ์
์คํ๋ง์ด ์ฐธ์กฐํ๊ฒ ๋ ๊ฐ์ฒด์ ๋ํ ์ ๋ณด์ DI ์ค์ ์ ์ถ๊ฐํ๊ฒ ๋๋ฉฐ
์ด์ ๊ฐ์ ๋ฌธ์์ ๊ตฌ์ฑ์ ์ํด ์คํ๋ง์์ ์ ๊ณตํ๋ ๋ฌธ์ ์ฐธ์กฐ
- ์ฐธ์กฐ ๊ฒฝ๋ก → C:\s-f-3.0.2-with-docs\docs\spring-framework-reference\htmlsingle
· ์ฐธ์กฐ ํ์ผ → spring-framework-reference.html
· ์ฐธ์กฐ ์์น → III. Core Technologies
3.2.1. Configuration metadata
→ ๋งํฌ๋ก ์ด๋ํ๋ฉด xml ์ํ ํ์ผ์ ํ์ธํ ์ ์์ผ๋ฉฐ,
์ด ๋ด์ฉ์ ๋ณต์ฌํ์ฌ applicationContext.xml ์ ๋ฎ์ด์ฐ๊ธฐ(์ ์ฒด ์ ํ ํ ๋ถ์ฌ๋ฃ๊ธฐ)
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ์ฑ์ ์ฒ๋ฆฌ
3. ๊ตญ์ด, ์์ด, ์ํ ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์ด์ , ํ๊ท ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Record.java → ์ธํฐํ์ด์ค
→ SpringPrj01 ํ๋ก์ ํธ์ ๊ธฐ์กด ์์ค์ฝ๋ ํ์ฉ
2. RecordView.java → ์ธํฐํ์ด์ค
→ SpringPrj01 ํ๋ก์ ํธ์ ๊ธฐ์กด ์์ค์ฝ๋ ํ์ฉ
3. RecordImpl1.java → Recored ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
→ SpringPrj01 ํ๋ก์ ํธ์ ๊ธฐ์กด ์์ค์ฝ๋ ํ์ฉ
4. RecordImpl2.java → Recored ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
→ SpringPrj01 ํ๋ก์ ํธ์ ๊ธฐ์กด ์์ค์ฝ๋ ํ์ฉ
5. RecordViewImpl.java → RecoredView ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
→ SpringPrj01 ํ๋ก์ ํธ์ ๊ธฐ์กด ์์ค์ฝ๋ ํ์ฉ
6. Main.java → ํด๋์ค.main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
→ ์์ (check~!!!)
7. applicationContext.xml
→ ํ๋ก์ ํธ > src ํด๋ ํ์์ ์์ฑ(ํ์ฌ ํ์ผ์ ์ด๋ฆ์ ์์๋ก ์ง์ ๊ฐ๋ฅ)
----------------------------------------------------------------------------------------------
โ โ โ IoC / DI ๊ด๋ จ ์ค์ต 03 โ โ โ
โป ์คํ๋ง ํ๋ ์์ํฌ ์์ด IoC / DI ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ํ๋ก์ ํธ ๊ตฌ์ฑ
3. ์ค๋ผํด ์ํธํ / ๋ณตํธํ ์ ์ฉ
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. SpringPrj03_scott.sql → ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์ค๋น
2. MemberDTO.java → DTO ์ญํ
TBL_MEMBERLIST ํ ์ด๋ธ ๋ ์ฝ๋ ์ฐธ์กฐ
3. OracleDAO.java → DAO ์ญํ → ์ค์ต ์งํ ๊ฐ ๊ณ์ ์ค์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฐ๊ฒฐ ์งํ
4. MssqlDAO.java → DAO ์ญํ → ์ค์ต ์งํ ๊ฐ ๊ณ์ ์ค์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฐ๊ฒฐ ์งํ
5. MemberList.java → DAO ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ ํด๋์ค
์์กด๊ด๊ณ ์ค์ .
๋ฆฌ์คํธ ์ถ๋ ฅ ๋ฉ์๋ ๊ตฌํ.
6. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
----------------------------------------------------------------------------------------------
โ โ โ IoC / DI ๊ด๋ จ ์ค์ต 04 โ โ โ
โป ์คํ๋ง ํ๋ ์์ํฌ ์์ด IoC / DI ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ํ๋ก์ ํธ ๊ตฌ์ฑ
3. ์ค๋ผํด ์ํธํ / ๋ณตํธํ ์ ์ฉ
โป ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ก
- ๊ฒฝ๋ก1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.asm-3.0.2.RELEASE.jar
·ํ์ผ2 → org.springframework.beans-3.0.2.RELEASE.jar
org.springframework.context-3.0.2.RELEASE.jar
org.springframework.core-3.0.2.RELEASE.jar
org.springframework.expression-3.0.2.RELEASE.jar
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
ํ์ผ 6 → cohttp://m.springsource.org.apache.commons.logging-1.1.1
- ๊ฒฝ๋ก 3 → C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
ํ์ผ 7 → ojdbc6.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. SpringPrj04_scott.sql → ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์ค๋น
2. MemberDTO.java → DTO ์ญํ
TBL_MEMBERLIST ํ ์ด๋ธ ๋ ์ฝ๋ ์ฐธ์กฐ
3. OracleDAO.java → DAO ์ญํ → ์ค์ต ์งํ ๊ฐ ๊ณ์ ์ค์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฐ๊ฒฐ ์งํ
4. MssqlDAO.java → DAO ์ญํ → ์ค์ต ์งํ ๊ฐ ๊ณ์ ์ค์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฐ๊ฒฐ ์งํ
5. MemberList.java → DAO ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ ํด๋์ค
์์กด๊ด๊ณ ์ค์ .
๋ฆฌ์คํธ ์ถ๋ ฅ ๋ฉ์๋ ๊ตฌํ.
6. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
โ ์ด์ ์ค์ต(SpringPrj03)๊ณผ ๋น๊ตํ์ฌ ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ํ์ผ
7. applicationContext.xml → ์คํ๋ง ํ๊ฒฝ ์ค์ ํ์ผ
๊ฐ์ฒด ์์ฑ ๊ตฌ๋ฌธ ๋ฐ DI ์ค์ ๊ตฌ๋ฌธ ๊ตฌ์ฑ
8. IDAO.java → ์ธํฐํ์ด์ค (OracleDAO.java , MssqlDAO.java ๋ฅผ ๋ผ์๋ฃ์ ์ ์๋..)
โป ์คํ๋ง ํ๋ ์์ํฌ(Spring Framework) ๊ตฌ์ฑ์ ์ํด
์คํ๋ง ํ๋ ์์ํฌ ๊ด๋ จ ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์์ผ ํ๋๋ฐ
http://www.spring.io ๊ฒฝ๋ก์ ์ ๊ทผํ์ฌ ํ์ธํด๋ณด๋ฉด
๋ค์ด๋ก๋ ๋ฐ์ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์๋ ์ํ์ด๋ค.
(STS ์ฐ๋ (Maven ํ์ฉ)๋ง ๊ฐ๋ฅํ ํํ...)
โ ์ ์ฉ ๋ฐ ํ ์คํธ๊ฐ ์ํํ ๋ฒ์ ์ผ๋ก ์ค์ต ํ๊ฒฝ ๊ตฌ์ฑ(๋น STS)
โ spring-framework-3.0. 2-with-docs.zip
๊ธฐ๋ณธ์ ์ธ ์คํ๋ง ํ๋ ์์ํฌ ๊ตฌ์ฑ์ ํ์ํ ํ์์ ์ธ jar ํ์ผ๊ณผ
์คํ๋ง ํ๋ ์์ํฌ ์ค๋ช ๋ฌธ์(pdf ๋ฒ์ , html ๋ฒ์ )๊ฐ ํฌํจ๋ ํญ๋ชฉ,
์คํ๋ง ์๋์ jar ํ์ผ๋ค~!!
โก spring-framwork-3.0. 2-dependencies.zip
์คํ๋ง ํ๋ ์์ํฌ ๊ตฌ์ฑ์ ์์กด์ฑ์ ๊ฐ์ง jarํ์ผ๋ค์ด ํฌํจ๋ ํญ๋ชฉ.
์ด๋ค ๊ธฐ๋์ ์ํํ๋๋์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ํญ๋ชฉ.
์คํ๋ง์ด ์ฐธ์กฐํ๋ ์์กด jar ํ์ผ๋ค~!!!
โป ์ฃผ์
๋ค์ด๋ก๋ ๋ฐ์ ๋ ๊ฐ์ ์์ถ ํ์ผ์ C:/ ๋๋ D:/ ๋๋ผ์ด๋ธ ๋ฃจํธ์
ํด๋๋ฅผ ์์ฑํ์ฌ ์์ถ์ ํ์ด๋๋๋ค.
๊ทธ ์์ ๋ค์ด์๋ jar ํ์ผ๋ค์ ์ ํ์ ์ผ๋ก ๋ณต์ฌํ์ฌ ์ฌ์ฉํ ์์ ์ด๊ธฐ ๋๋ฌธ์
์ฌ์ด ๊ฒฝ๋ก์ ์์ถ์ ํ์ด๋๋๋ค๋ ์๋ฏธ๋ ์์ง๋ง
์์ถ์ ํด์ ํ๋ ๊ณผ์ ์์ ์ด๋ฆ(๊ฒฝ๋ก ํฌํจ)์ด ๊ธธ์ด์ ํน์ ํ์ผ์ ๋ํด
์ ๋๋ก ์์ถ์ ํด์ ํ์ง ๋ชปํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์
๊ฐ๋จํ ๊ฒฝ๋ก์์ ์์ถ์ ํด์ ํ ์ ์๋๋ก ํ๋ค.
----------------------------------------------------------------------------------------------
โ โ โ IoC / DI ๊ด๋ จ ์ค์ต 01 โ โ โ
โป ์คํ๋ง ํ๋ ์์ํฌ ์์ด IoC / DI ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ์ฑ์ ์ฒ๋ฆฌ
3. ๊ตญ์ด, ์์ด, ์ํ ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์ด์ , ํ๊ท ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Record.java → ์ธํฐํ์ด์ค
2. RecordView.java → ์ธํฐํ์ด์ค
3. RecordImpl1.java → Recored ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
4. RecordImpl2.java → Recored ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
5. RecordViewImpl.java → RecoredView ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
6. Main.java → ํด๋์ค.main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
----------------------------------------------------------------------------------------------
โ โ โ IoC / DI ๊ด๋ จ ์ค์ต 02 โ โ โ
โป ์คํ๋ง ํ๋ ์์ํฌ ์ ์ฉ IoC / DI ๊ฐ๋ ์ค์ต
โ ์ค์ต ํ๊ฒฝ
→ ์คํ๋ง ์์์ ํ์ฉํ ์ ์๋ ํ๊ฒฝ ๊ตฌ์ฑ
1. ํ๋ก์ ํธ๋ช ๋ง์ฐ์ค ์ฐํด๋ฆญ
2. Build Path > Configure Build Path... ๋ฉ๋ด ์ ํ
3. Libraries ํญ ์ ํ > Add External JARs... ๋ฒํผ ํด๋ฆญ
4. ํ์ํ jar ํ์ผ์ ํด๋น ํ๋ก์ ํธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฑ๋ก
- ๊ฒฝ๋ก1 : C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.asm-3.0.2.RELEASE
·ํ์ผ2 → org.springframework.beans-3.0.2.RELEASE
·ํ์ผ3 → org.springframework.context-3.0.2.RELEASE
·ํ์ผ4 → org.springframework.core-3.0.2.RELEASE
·ํ์ผ5 → org.springframework.expression-3.0.2.RELEASE
- ๊ฒฝ๋ก2 : C:\s-f-3.0.2-dependencies\org.apache.commons
\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ6 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
5. ์คํ๋ง ํ๋ ์์ํฌ์ ํ๊ฒฝ ์ค์ ํ์ผ์ XML ํ์์ผ๋ก ์์ฑ
์์ฑ ์์น๋ ํ๋ก์ ํธ ํ์์ src ๋๋ ํฐ๋ฆฌ(ํ์ฌ ์ค์ต ํ๊ฒฝ์ ์ฝ์์ด๋ฏ๋ก...)
ํ์ฌ ์ค์ต ํ๊ฒฝ์์์ ํ์ผ ์ด๋ฆ์ ์ฌ์ฉ์๊ฐ ์์๋ก ๋ถ์ฌํด์ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅ
→ ใapplicationContext.xmlใ
6. ์์ฑํ applicationContext.xml ํ์ผ์
์คํ๋ง์ด ์ฐธ์กฐํ๊ฒ ๋ ๊ฐ์ฒด์ ๋ํ ์ ๋ณด์ DI ์ค์ ์ ์ถ๊ฐํ๊ฒ ๋๋ฉฐ
์ด์ ๊ฐ์ ๋ฌธ์์ ๊ตฌ์ฑ์ ์ํด ์คํ๋ง์์ ์ ๊ณตํ๋ ๋ฌธ์ ์ฐธ์กฐ
- ์ฐธ์กฐ ๊ฒฝ๋ก → C:\s-f-3.0.2-with-docs\docs\spring-framework-reference\htmlsingle
· ์ฐธ์กฐ ํ์ผ → spring-framework-reference.html
· ์ฐธ์กฐ ์์น → III. Core Technologies
3.2.1. Configuration metadata
→ ๋งํฌ๋ก ์ด๋ํ๋ฉด xml ์ํ ํ์ผ์ ํ์ธํ ์ ์์ผ๋ฉฐ,
์ด ๋ด์ฉ์ ๋ณต์ฌํ์ฌ applicationContext.xml ์ ๋ฎ์ด์ฐ๊ธฐ(์ ์ฒด ์ ํ ํ ๋ถ์ฌ๋ฃ๊ธฐ)
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ์ฑ์ ์ฒ๋ฆฌ
3. ๊ตญ์ด, ์์ด, ์ํ ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์ด์ , ํ๊ท ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Record.java → ์ธํฐํ์ด์ค
→ SpringPrj01 ํ๋ก์ ํธ์ ๊ธฐ์กด ์์ค์ฝ๋ ํ์ฉ
2. RecordView.java → ์ธํฐํ์ด์ค
→ SpringPrj01 ํ๋ก์ ํธ์ ๊ธฐ์กด ์์ค์ฝ๋ ํ์ฉ
3. RecordImpl1.java → Recored ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
→ SpringPrj01 ํ๋ก์ ํธ์ ๊ธฐ์กด ์์ค์ฝ๋ ํ์ฉ
4. RecordImpl2.java → Recored ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
→ SpringPrj01 ํ๋ก์ ํธ์ ๊ธฐ์กด ์์ค์ฝ๋ ํ์ฉ
5. RecordViewImpl.java → RecoredView ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค
→ SpringPrj01 ํ๋ก์ ํธ์ ๊ธฐ์กด ์์ค์ฝ๋ ํ์ฉ
6. Main.java → ํด๋์ค.main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
→ ์์ (check~!!!)
7. applicationContext.xml
→ ํ๋ก์ ํธ > src ํด๋ ํ์์ ์์ฑ(ํ์ฌ ํ์ผ์ ์ด๋ฆ์ ์์๋ก ์ง์ ๊ฐ๋ฅ)
----------------------------------------------------------------------------------------------
โ โ โ IoC / DI ๊ด๋ จ ์ค์ต 03 โ โ โ
โป ์คํ๋ง ํ๋ ์์ํฌ ์์ด IoC / DI ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ํ๋ก์ ํธ ๊ตฌ์ฑ
3. ์ค๋ผํด ์ํธํ / ๋ณตํธํ ์ ์ฉ
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. SpringPrj03_scott.sql → ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์ค๋น
2. MemberDTO.java → DTO ์ญํ
TBL_MEMBERLIST ํ ์ด๋ธ ๋ ์ฝ๋ ์ฐธ์กฐ
3. OracleDAO.java → DAO ์ญํ → ์ค์ต ์งํ ๊ฐ ๊ณ์ ์ค์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฐ๊ฒฐ ์งํ
4. MssqlDAO.java → DAO ์ญํ → ์ค์ต ์งํ ๊ฐ ๊ณ์ ์ค์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฐ๊ฒฐ ์งํ
5. MemberList.java → DAO ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ ํด๋์ค
์์กด๊ด๊ณ ์ค์ .
๋ฆฌ์คํธ ์ถ๋ ฅ ๋ฉ์๋ ๊ตฌํ.
6. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
----------------------------------------------------------------------------------------------
โ โ โ IoC / DI ๊ด๋ จ ์ค์ต 04 โ โ โ
โป ์คํ๋ง ํ๋ ์์ํฌ ์์ด IoC / DI ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ํ๋ก์ ํธ ๊ตฌ์ฑ
3. ์ค๋ผํด ์ํธํ / ๋ณตํธํ ์ ์ฉ
โป ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ก
- ๊ฒฝ๋ก1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.asm-3.0.2.RELEASE.jar
·ํ์ผ2 → org.springframework.beans-3.0.2.RELEASE.jar
org.springframework.context-3.0.2.RELEASE.jar
org.springframework.core-3.0.2.RELEASE.jar
org.springframework.expression-3.0.2.RELEASE.jar
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
ํ์ผ 6 → cohttp://m.springsource.org.apache.commons.logging-1.1.1
- ๊ฒฝ๋ก 3 → C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
ํ์ผ 7 → ojdbc6.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. SpringPrj04_scott.sql → ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์ค๋น
2. MemberDTO.java → DTO ์ญํ
TBL_MEMBERLIST ํ ์ด๋ธ ๋ ์ฝ๋ ์ฐธ์กฐ
3. OracleDAO.java → DAO ์ญํ → ์ค์ต ์งํ ๊ฐ ๊ณ์ ์ค์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฐ๊ฒฐ ์งํ
4. MssqlDAO.java → DAO ์ญํ → ์ค์ต ์งํ ๊ฐ ๊ณ์ ์ค์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฐ๊ฒฐ ์งํ
5. MemberList.java → DAO ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ ํด๋์ค
์์กด๊ด๊ณ ์ค์ .
๋ฆฌ์คํธ ์ถ๋ ฅ ๋ฉ์๋ ๊ตฌํ.
6. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
โ ์ด์ ์ค์ต(SpringPrj03)๊ณผ ๋น๊ตํ์ฌ ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ํ์ผ
7. applicationContext.xml → ์คํ๋ง ํ๊ฒฝ ์ค์ ํ์ผ
๊ฐ์ฒด ์์ฑ ๊ตฌ๋ฌธ ๋ฐ DI ์ค์ ๊ตฌ๋ฌธ ๊ตฌ์ฑ
8. IDAO.java → ์ธํฐํ์ด์ค (OracleDAO.java , MssqlDAO.java ๋ฅผ ๋ผ์๋ฃ์ ์ ์๋..)
3. DI (Dipendency Injection).txt
๋๋ณด๊ธฐ
โ โ โ DI(Dependency Injection) โ โ โ
Denpendency ๋ ์์กด ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
Injection ์ ์ฃผ์ ์ ์๋ฏธํ๋ค.
๊ฐ์ฒด A๊ฐ ์ฌ์ฉ๋๊ธฐ ์ํด B ๊ฐ์ฒด๊ฐ ๋ฐ๋์ ํ์ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด
A ๊ฐ์ฒด ์ ์ฅ์์ B ๊ฐ์ฒด๋ ์์กด ๊ฐ์ฒด๊ฐ ๋๋ค.
ํด๋์ค A๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด๊ณ
public class A
{
private B b;
public A()
{
b = new B();
}
}
ใA a = new A();ใ ๋ผ๋ ๊ตฌ๋ฌธ์ ํตํด A ๊ฐ์ฒด ์์ฑ์ ํ๋ ๊ณผ์ ์ด ์๋ค๋ฉด
์์กด ๊ฐ์ฒด์ธ B ๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ ์ฌ๊ธฐ์ ์๋ ์ํฉ์ด ๋๋ค.
A ๊ฐ์ฒด ๋ด๋ถ ์์ฑ์์ ์์กด ๊ฐ์ฒด์ธ B ๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ด ํฌํจ๋์ด ์๋ ๊ฒ์ด๋ค.
์ด๋ ์์กด์ฑ์ด ๊ฐํ ๊ฒฐํฉ์ ์ํ๊ธฐ ๋๋ฌธ์
์ฌ์ฉ์๊ฐ B ๊ฐ์ฒด๋ฅผ ๋ฐ๊พธ๊ณ ์ถ์ด๋ A, ํด๋์ค ๋ด๋ถ ์์ค์ฝ๋๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์๋
๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ฐ๊ฟ ์ ์๋ ์ํฉ์ด๋ค.
๊ฒ์๊ธฐ์ ๋น๋์ด ์๋ฅผ ๋ค์๋ฉด, ๊ฒ์ ์นฉ์ด ๋ด์ฅ๋ ๊ฒ์๊ธฐ ๋ชจ๋ธ๊ณผ ๊ฐ๋ค๊ณ ํ ์ ์๋ค.
์ด๋ฅผ.. ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค๋ฉด,
B b = new B();
A a = new A(B);
์์กด ๊ฐ์ฒด์ธ B ๊ฐ์ฒด์ ๋ํ ์์ฑ ๊ถํ์ด ์ฌ์ฉ์์๊ฒ ์ฃผ์ด์ง๊ฒ ๋๋ค.
B ๊ฐ์ฒด๋ฅผ ๋ณ๋๋ก ์์ฑํ๊ณ A ๊ฐ์ฒด์ ์ด๋ฅผ ์ ๋ฌํด ์ฃผ๋ ๊ฒ์๋ค.
ํ์ํ ๊ฒฝ์ฐ B ๊ฐ์ฒด ๋์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ณ๊ฒฝํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
์ด ๋ , B ๊ฐ์ฒด๋ฅผ ์์กด ๊ฐ์ฒด (Dependency) ๋ผ๊ณ ํ๊ณ
A ๊ฐ์ฒด์ ์ ๋ฌํด์ฃผ๋ ์ก์ ์ ์ฃผ์ (Injection) ์ด๋ผ๊ณ ํ๋ค.
๊ฒ์๊ธฐ๋ก ๋งํ์๋ฉด ๊ฒ์ํฉ ๊ต์ฒด๊ฐ ๊ฐ๋ฅํ ๊ฒ์๊ธฐ ๋ชจ๋ธ๊ณผ ๊ฐ๋ค๊ณ ํ ์ ์๋ค.
์คํ๋ง์ ํ๊ฒฝ ์ค์ ํ์ผ์ธ XML ํ์ผ์ ํตํด์
์์ค ์ฝ๋ ๋ณ๊ฒฝ ์์ด ๊ฐ์ฒด ์์ฑ๊ณผ
๊ฐ์ฒด ๊ฐ์ ์์กด ๊ด๊ณ (DI)๋ฅผ ์ค์ , ์กฐ์ , ๋ณ๊ฒฝํ ์ ์๋ค.
โป DI ์ค์ ์ โ ์์ฑ์๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ, โก setter๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
ํฌ๊ฒ ๋ ๊ฐ์ง๊ฐ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก setter ๋ฉ์๋๋ฅผ ์ด์ฉํ DI ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
์คํ๋ง์์๋ XML ํ๊ฒฝ์ค์ ํ์ผ์์ ๊ฐ์ฒด ์์ฑ ๋ฐ DI ์ค์ ์ ํ๋ค.
cf) Annotation ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ
โป IoC (Inversion of Control)
DI ํจํด์ ์ ์ฉํ๊ฒ ๋๋ฉด
๊ฐ์ฒด ์์ฑ ๊ณผ์ ๋ฐ ์์กด์ฑ ์ฃผ์ ์ ์ผ๋ฐ์ ์ธ ๊ฐ์ฒด ์์ฑ๊ณผ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค.
์์ ๋ถํ ๊ฐ์ฒด์ธ C ๋ฅผ ๋ง๋ค๊ณ
๊ทธ ๋ถํ ๊ฐ์ฒด์ธ C ๋ฅผ ์ค๊ฐ ๋ถํ ๊ฐ์ฒด์ธ B์ ์ฃผ์ (Injection) ํ๊ณ ,
์ค๊ฐ ๋ถํ ๊ฐ์ฒด์ธ B๊ฐ(C๊ฐ ํ์ฌ๋ B)๋ฅผ ์ด์ฉํด์
์ต์ข ์์ ํ์ธ A ๊ฐ์ฒด์ ์ฃผ์ (Injection) ํ๊ฒ ๋๋ฉด
๊ฐ์ฒด ์กฐ๋ฆฝ์ด ์์ฑ๋๋ ๊ตฌ์กฐ... ์ด ๊ณผ์ ... ๋๋ ์ด์ ๋ํ ๊ด๋ฆฌ...
๋ฅผ ๋ชจ๋ ์ข ํฉํ์ฌ IoC ๋ผ๊ณ ํํํ๋ค.
์ด ํ์๋ฅผ ํ๋ ์ฃผ์ฒด ์ฆ, IoC Container ๋ฅผ ๋์์ผ๋ก IoC ๋ผ๊ณ ํํํ๊ธฐ๋ ํ๊ณ
์ด ํ์๊ฐ ์ผ์ด๋๋ ์ฅ์๋ฅผ IoC๋ผ๊ณ ํํํ๊ธฐ๋ ํ๋ค.
Denpendency ๋ ์์กด ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
Injection ์ ์ฃผ์ ์ ์๋ฏธํ๋ค.
๊ฐ์ฒด A๊ฐ ์ฌ์ฉ๋๊ธฐ ์ํด B ๊ฐ์ฒด๊ฐ ๋ฐ๋์ ํ์ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด
A ๊ฐ์ฒด ์ ์ฅ์์ B ๊ฐ์ฒด๋ ์์กด ๊ฐ์ฒด๊ฐ ๋๋ค.
ํด๋์ค A๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด๊ณ
public class A
{
private B b;
public A()
{
b = new B();
}
}
ใA a = new A();ใ ๋ผ๋ ๊ตฌ๋ฌธ์ ํตํด A ๊ฐ์ฒด ์์ฑ์ ํ๋ ๊ณผ์ ์ด ์๋ค๋ฉด
์์กด ๊ฐ์ฒด์ธ B ๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ ์ฌ๊ธฐ์ ์๋ ์ํฉ์ด ๋๋ค.
A ๊ฐ์ฒด ๋ด๋ถ ์์ฑ์์ ์์กด ๊ฐ์ฒด์ธ B ๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ด ํฌํจ๋์ด ์๋ ๊ฒ์ด๋ค.
์ด๋ ์์กด์ฑ์ด ๊ฐํ ๊ฒฐํฉ์ ์ํ๊ธฐ ๋๋ฌธ์
์ฌ์ฉ์๊ฐ B ๊ฐ์ฒด๋ฅผ ๋ฐ๊พธ๊ณ ์ถ์ด๋ A, ํด๋์ค ๋ด๋ถ ์์ค์ฝ๋๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์๋
๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ฐ๊ฟ ์ ์๋ ์ํฉ์ด๋ค.
๊ฒ์๊ธฐ์ ๋น๋์ด ์๋ฅผ ๋ค์๋ฉด, ๊ฒ์ ์นฉ์ด ๋ด์ฅ๋ ๊ฒ์๊ธฐ ๋ชจ๋ธ๊ณผ ๊ฐ๋ค๊ณ ํ ์ ์๋ค.
์ด๋ฅผ.. ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค๋ฉด,
B b = new B();
A a = new A(B);
์์กด ๊ฐ์ฒด์ธ B ๊ฐ์ฒด์ ๋ํ ์์ฑ ๊ถํ์ด ์ฌ์ฉ์์๊ฒ ์ฃผ์ด์ง๊ฒ ๋๋ค.
B ๊ฐ์ฒด๋ฅผ ๋ณ๋๋ก ์์ฑํ๊ณ A ๊ฐ์ฒด์ ์ด๋ฅผ ์ ๋ฌํด ์ฃผ๋ ๊ฒ์๋ค.
ํ์ํ ๊ฒฝ์ฐ B ๊ฐ์ฒด ๋์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ณ๊ฒฝํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
์ด ๋ , B ๊ฐ์ฒด๋ฅผ ์์กด ๊ฐ์ฒด (Dependency) ๋ผ๊ณ ํ๊ณ
A ๊ฐ์ฒด์ ์ ๋ฌํด์ฃผ๋ ์ก์ ์ ์ฃผ์ (Injection) ์ด๋ผ๊ณ ํ๋ค.
๊ฒ์๊ธฐ๋ก ๋งํ์๋ฉด ๊ฒ์ํฉ ๊ต์ฒด๊ฐ ๊ฐ๋ฅํ ๊ฒ์๊ธฐ ๋ชจ๋ธ๊ณผ ๊ฐ๋ค๊ณ ํ ์ ์๋ค.
์คํ๋ง์ ํ๊ฒฝ ์ค์ ํ์ผ์ธ XML ํ์ผ์ ํตํด์
์์ค ์ฝ๋ ๋ณ๊ฒฝ ์์ด ๊ฐ์ฒด ์์ฑ๊ณผ
๊ฐ์ฒด ๊ฐ์ ์์กด ๊ด๊ณ (DI)๋ฅผ ์ค์ , ์กฐ์ , ๋ณ๊ฒฝํ ์ ์๋ค.
โป DI ์ค์ ์ โ ์์ฑ์๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ, โก setter๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
ํฌ๊ฒ ๋ ๊ฐ์ง๊ฐ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก setter ๋ฉ์๋๋ฅผ ์ด์ฉํ DI ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
์คํ๋ง์์๋ XML ํ๊ฒฝ์ค์ ํ์ผ์์ ๊ฐ์ฒด ์์ฑ ๋ฐ DI ์ค์ ์ ํ๋ค.
cf) Annotation ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ
โป IoC (Inversion of Control)
DI ํจํด์ ์ ์ฉํ๊ฒ ๋๋ฉด
๊ฐ์ฒด ์์ฑ ๊ณผ์ ๋ฐ ์์กด์ฑ ์ฃผ์ ์ ์ผ๋ฐ์ ์ธ ๊ฐ์ฒด ์์ฑ๊ณผ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค.
์์ ๋ถํ ๊ฐ์ฒด์ธ C ๋ฅผ ๋ง๋ค๊ณ
๊ทธ ๋ถํ ๊ฐ์ฒด์ธ C ๋ฅผ ์ค๊ฐ ๋ถํ ๊ฐ์ฒด์ธ B์ ์ฃผ์ (Injection) ํ๊ณ ,
์ค๊ฐ ๋ถํ ๊ฐ์ฒด์ธ B๊ฐ(C๊ฐ ํ์ฌ๋ B)๋ฅผ ์ด์ฉํด์
์ต์ข ์์ ํ์ธ A ๊ฐ์ฒด์ ์ฃผ์ (Injection) ํ๊ฒ ๋๋ฉด
๊ฐ์ฒด ์กฐ๋ฆฝ์ด ์์ฑ๋๋ ๊ตฌ์กฐ... ์ด ๊ณผ์ ... ๋๋ ์ด์ ๋ํ ๊ด๋ฆฌ...
๋ฅผ ๋ชจ๋ ์ข ํฉํ์ฌ IoC ๋ผ๊ณ ํํํ๋ค.
์ด ํ์๋ฅผ ํ๋ ์ฃผ์ฒด ์ฆ, IoC Container ๋ฅผ ๋์์ผ๋ก IoC ๋ผ๊ณ ํํํ๊ธฐ๋ ํ๊ณ
์ด ํ์๊ฐ ์ผ์ด๋๋ ์ฅ์๋ฅผ IoC๋ผ๊ณ ํํํ๊ธฐ๋ ํ๋ค.
4. AOP(Aspect Oriented Programming).txt
๋๋ณด๊ธฐ
โ โ โ 04. AOP(Aspect Oriented Programming) โ โ โ
โป ๊ณตํต์ ๊ด์ฌ ์ฌํญ์ ์ ์ฉํด์ ๋ฐ์ํ๋ ์์กด ๊ด๊ณ์ ๋ณต์ก์ฑ๊ณผ
์ฝ๋ ์ค๋ณต์ ํด์ํด์ฃผ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ.
โ AOP ๊ฐ๋
์ฃผ ์ ๋ฌด๋ฅผ ์คํํ ๋ ๋ณด์กฐ์ ์ธ ์ ๋ฌด(์ฃผ ์ ๋ฌด ์คํ์๊ฐ ์ฒดํฌ, ๋ก๊ทธ ๊ธฐ๋ก ๋ฑ)๊ฐ ์งํ๋์ด์ผ ํ๋ค.
๋ง์ฝ, ์ฃผ ์ ๋ฌด๊ฐ ์ฌ๋ฌ ๊ฐ์ด๊ณ , ๋์ผํ ๋ณด์กฐ ์ ๋ฌด์ ์ํ์ด ์งํ๋์ด์ผ ํ๋ค๋ฉด
๋ณด์กฐ์ ๋ฌด ๋ถ๋ถ์ ์ค๋ณต๋ ์ฝ๋๊ฐ ๋ ์ ๋ฐ์ ์๋ค.
์ด๋ฐ ์ค๋ณต ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ณด์กฐ ์ ๋ฌด๋ฅผ ๋ณด๋ค ๋ ๋ฆฝ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์คํํ ์ ์๋๋ก
๊ตฌ์ฑํ๋ ๊ฒ์ AOP ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ๋ค.
โ AOP ๊ด๋ จ ์ฃผ์ ์ฉ์ด
- ๋ณด์กฐ ์ ๋ฌด(cross-cutting concern)
์ฃผ ์ ๋ฌด ์คํ ์ ๋ฐ์ํ๋ ๋ณด์กฐ์ ์ธ ์ ๋ฌด.
์ฃผ ์ ๋ฌด์ ๋ถ๋ฆฌ ๋ฐ ๊ฒฐํฉ์ด ์ฝ๊ฒ ์ด๋ฃจ์ด์ง ์ ์๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
- ์ฃผ ์ ๋ฌด (core concern)
ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ถ๋ถ.
์ฌ์ฉ์์ ์์ฒญ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ํ ๋ฐ ๊ฒฐ๊ณผ ๋ฐํ์ ํด์ผ ํ๋ค.
- Advice
์ธ์ ์ด๋ค ๊ณตํต ๊ด์ฌ ๊ธฐ๋ฅ (๋ณด์กฐ ์ ๋ฌด, cross-cutting concern)์ ์ ์ฉํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ.
Before Advice, After Advice, Around Advice ๋ฑ์ด ์๋ค.
·Before Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ์ ์ํ๋๋ ์ ๋ฌด
·After Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
·Around Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ๊ณผ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
- proxy
์ฃผ ์ ๋ฌด๋ฅผ ์คํํ๋ ๊ฐ์ฒด์ ๋์ผํ ๋ชจ์์ ๊ฐ์ง ๊ฐ์ง ๊ฐ์ฒด
์ฌ์ฉ์๊ฐ ์ง์ ์ฃผ ์ ๋ฌด๋ฅผ ์คํํ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์๊ฐ๋ ๊ฒ์ด ์๋๋ผ,
proxy ๋ฅผ ์ฐพ์๊ฐ๋๋ก ์ง์ ํ๊ฒ ๋๋ค.
proxy ๋ด๋ถ์์ ๋ณด์กฐ ์ ๋ฌด๋ฅผ ์คํํ ํ ์ฃผ ์ ๋ฌด๋ฅผ ํธ์ถํ๋๋ก ํ๋ฉด
์ธ๋ถ์์ ๋ณผ ๋ ์ฃผ ์ ๋ฌด๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก ํ ์ ์๋ค.
- joinpoint
proxy ๋ด๋ถ์์ ์ฃผ ์ ๋ฌด๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ์ ํน์ ์ง์ ์๋ง ํธ์ถ๋๋๋ก ํ ์ ์๋ค.
- weaving
advice ๋ฅผ ์ฃผ ์ ๋ฌด์ ์ ์ฉํ๋ ๊ณผ์ ์ ๋ถ๋ฅด๋ ๋ช ์นญ
- aspect
์ฌ๋ฌ ์ฃผ ์ ๋ฌด ๊ฐ์ฒด์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ๊ณตํต ๊ด์ฌ ์ฌํญ(๋ณด์กฐ ์ ๋ฌด)์
aspect ๋ผ๊ณ ํ๋ค.
โ AOP ์งํ ์์
์ฌ์ฉ์ ํ๋ก์ ๋ณด์กฐ์ ๋ฌด ์ฃผ์ ๋ฌด
(client) (proxy) (cross-cut...) (core concern)
โ------------------------------------------------------>โ
โ-----โ ------>โ
โ--------โก------->โ
โ------------------โข------------------->โ
โ<-----------------โฃ--------------------โ
โ--------โค------->โ
โ<-------------------------------------------------------โ
โ<------โฅ------โ
โ ์ฌ์ฉ์๋ proxy ๊ฐ์ฒด์ ์ ๊ทผํ๋ค.
์ฌ์ฉ์ ์ ์ฅ์์๋ proxy ๊ฐ์ฒด๊ฐ ์ฃผ ์ ๋ฌด(core concern) ๊ฐ์ฒด์ ๋์ผํ๊ฒ ์๊ฐํ๋ค.
โก proxy ๊ฐ์ฒด ๋ด๋ถ์์ ๋ณด์กฐ ์ ๋ฌด(cross-cutting concern) ๋ฅผ ์งํํ๊ฒ ๋๋ค.
์ฃผ ์ ๋ฌด ์คํ ์ ์ ์ํ๋๋ ๋ณด์กฐ ์ ๋ฌด๋
Before Advice, Around Advice
โข proxy ๊ฐ์ฒด ๋ด๋ถ์์ ์ฃผ ์ ๋ฌด(core concern) ๋ฅผ ํธ์ถํ๋ค.
์ฃผ ์ ๋ฌด๊ฐ ์งํ๋๋ค.
โฃ ์ฃผ ์ ๋ฌด๊ฐ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ค.
โค proxy ๊ฐ์ฒด ๋ด๋ถ์์ ๋ณด์กฐ์ ๋ฌด(cross-cutting concern)๋ฅผ ์งํํ๊ฒ ๋๋ค.
์ฃผ ์ ๋ฌด ์คํ ํ์ ์ํ๋๋ ๋ณด์กฐ์ ๋ฌด๋
After Advice, Around Advice ๊ฐ ์๋ค.
โฅ ์ฌ์ฉ์์๊ฒ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ค.
-------------------------------------------------------------------------------------------------
โ โ โ AOP ๊ฐ๋ ์ค์ต 01 โ โ โ
โป AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ด์ ํํ๋ก ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌ
3. AOP ๊ธฐ๋ฒ์ ์ ์ฉํ์ง ์์ ์ํ๋ก
๋ณด์กฐ์ ๋ฌด(์๊ฐ ์ธก์ , ๋ก๊ทธ ๊ธฐ๋ก ์ฒ๋ฆฌ)๋ฅผ ์ํํ๋ ์ค์ต์ ์งํํ๋ค.
4. SpringPrj05
5. ๋ก๊ทธ ๋ฐ ์คํฑ์์น ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ํด ๊ด๋ จ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
โ ๋ฑ๋กํด์ผํ jar ํ์ผ
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.core-3.0.2.RELEASE
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ1 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Calculator.java → ์ธํฐํ์ด์ค
2. CalculatorImpl.java → ํด๋์ค. ์ฃผ ์ ๋ฌด, ๋ณด์กฐ ์ ๋ฌด ์ ์ฉ
3. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
-------------------------------------------------------------------------------------------------
โ โ โ AOP ๊ฐ๋ ์ค์ต 02 โ โ โ
โป AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๋ ํํ๋ก ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌ
3. AOP ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ์ํ๋ก
๋ณด์กฐ์ ๋ฌด(์๊ฐ ์ธก์ , ๋ก๊ทธ ๊ธฐ๋ก ์ฒ๋ฆฌ)๋ฅผ ์ํํ๋ ์ค์ต์ ์งํํ๋ค.
4. SpringPrj06
5. ๋ก๊ทธ ๋ฐ ์คํฑ์์น ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ํด ๊ด๋ จ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
โ ๋ฑ๋กํด์ผํ jar ํ์ผ
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.core-3.0.2.RELEASE
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ1 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Calculator.java → ์ธํฐํ์ด์ค (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
2. CalculatorProxy.java → ํ๋ก์(proxy) ํด๋์ค
(์ถ๊ฐ~!!!) ๋ณด์กฐ ์ ๋ฌด ์ ์ฉ ๋ฐ ์ฃผ ์ ๋ฌด ํธ์ถ ๊ณผ์
3. CalculatorImpl.java → ํด๋์ค. ์ฃผ ์ ๋ฌด ์ ์ฉ
4. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
-------------------------------------------------------------------------------------------------
โ โ โ AOP ๊ฐ๋ ์ค์ต 03 โ โ โ
โป Spring AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๋ ํํ๋ก ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌ
3. Spring AOP ๊ธฐ๋ฒ์ ์ ์ฉํ์ง ์์ ์ํ๋ก
๋ณด์กฐ์ ๋ฌด(์๊ฐ ์ธก์ , ๋ก๊ทธ ๊ธฐ๋ก ์ฒ๋ฆฌ)๋ฅผ ์ํํ๋ ์ค์ต์ ์งํํ๋ค.
4. SpringPrj07
5. ๋ก๊ทธ ๋ฐ ์คํฑ์์น ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ํด ๊ด๋ จ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
โ ๋ฑ๋กํด์ผํ jar ํ์ผ
(๋ก๊ทธ ๋ฐ ์คํฑ์์น ์ฌ์ฉ์ ์ํด ๋ฑ๋กํด์ผ ํ jar ํ์ผ
+ ์คํ๋ง AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ jar ํ์ผ)
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.asm-3.0.2.RELEASE
·ํ์ผ2 → org.springframework.beans-3.0.2.RELEASE
·ํ์ผ3 → org.springframework.context-3.0.2.RELEASE
·ํ์ผ4 → org.springframework.core-3.0.2.RELEASE
·ํ์ผ5 → org.springframework.expression-3.0.2.RELEASE
·ํ์ผ6 → org.springframework.aop-3.0.2.RELEASE
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ7 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
- ๊ฒฝ๋ก 3 → C:\s-f-3.0.2-dependencies\org.aopalliance\cohttp://m.springsource.org.aopalliance\1.0.0
·ํ์ผ8 → cohttp://m.springsource.org.aopalliance-1.0.0.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Calculator.java → ์ธํฐํ์ด์ค (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
2. CalculatorAspect.java → ๋ณด์กฐ ์ ๋ฌด ํด๋์ค
(์ถ๊ฐ~!!!) ๋ณด์กฐ ์ ๋ฌด ์ ์ฉ ๋ฐ ์ฃผ ์ ๋ฌด ํธ์ถ ๊ณผ์ .
3. CalculatorImpl.java → ํด๋์ค. ์ฃผ ์ ๋ฌด ์ ์ฉ (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
4. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
5. config.xml → ์คํ๋ง ํ๊ฒฝ ์ค์ ํ์ผ.
(์ถ๊ฐ~!!!) ๊ฐ์ฒด ์์ฑ ๋ฐ DI ์ค์ .
-------------------------------------------------------------------------------------------------
โ โ โ AOP ๊ฐ๋ ์ค์ต 04 โ โ โ
โป AOP Advice
·Advice
์ธ์ ์ด๋ค ๊ณตํต ๊ด์ฌ ์ฌํญ(๋ณด์กฐ ์ ๋ฌด, cross-cutting concern)์
์ ์ฉํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ.
Before Advice, After Advice, Around Advice ๋ฑ์ด ์๋ค.
·Before Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ์ ์ํ๋๋ ๊ฒฝ์ฐ
·After Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
·Around Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ๊ณผ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌ
3. Spring AOP ๊ธฐ๋ฒ์ Advice ๋ก ๊ตฌ๋ถํ์ฌ
๋ณด์กฐ์ ๋ฌด(์๊ฐ ์ธก์ , ๋ก๊ทธ ๊ธฐ๋ก ์ฒ๋ฆฌ)๋ฅผ ์ํํ๋ ์ค์ต์ ์งํํ๋ค.
4. SpringPrj08
5. ๋ก๊ทธ ๋ฐ ์คํฑ์์น ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ํด ๊ด๋ จ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
6. ์ถ๊ฐ๋ก Spring AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
โ ๋ฑ๋กํด์ผํ jar ํ์ผ
(๋ก๊ทธ ๋ฐ ์คํฑ์์น ์ฌ์ฉ์ ์ํด ๋ฑ๋กํด์ผ ํ jar ํ์ผ
+ ์คํ๋ง AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ jar ํ์ผ)
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.aop-3.0.2.RELEASE
·ํ์ผ2 → org.springframework.asm-3.0.2.RELEASE
·ํ์ผ3 → org.springframework.beans-3.0.2.RELEASE
·ํ์ผ4 → org.springframework.context-3.0.2.RELEASE
·ํ์ผ5 → org.springframework.core-3.0.2.RELEASE
·ํ์ผ6 → org.springframework.expression-3.0.2.RELEASE
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ7 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
- ๊ฒฝ๋ก 3 → C:\s-f-3.0.2-dependencies\org.aopalliance\cohttp://m.springsource.org.aopalliance\1.0.0
·ํ์ผ8 → cohttp://m.springsource.org.aopalliance-1.0.0.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Calculator.java → ์ธํฐํ์ด์ค (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
2. CalculatorAspect.java → ๋ณด์กฐ ์ ๋ฌด ํด๋์ค
๋ณด์กฐ ์ ๋ฌด ์ ์ฉ ๋ฐ ์ฃผ ์ ๋ฌด ํธ์ถ ๊ณผ์ .
3. CalculatorImpl.java → ํด๋์ค. ์ฃผ ์ ๋ฌด ์ ์ฉ (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
4. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
5. config.xml → ์คํ๋ง ํ๊ฒฝ ์ค์ ํ์ผ.
๊ฐ์ฒด ์์ฑ ๋ฐ DI ์ค์ .
6. CalculatorBeforeAdvice.java → ์ถ๊ฐ. BeforeAdvice
-------------------------------------------------------------------------------------------------
โ โ โ AOP ๊ฐ๋ ์ค์ต 05 โ โ โ
โป AOP Advice
·Advice
์ธ์ ์ด๋ค ๊ณตํต ๊ด์ฌ ์ฌํญ(๋ณด์กฐ ์ ๋ฌด, cross-cutting concern)์
์ ์ฉํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ.
Before Advice, After Advice, Around Advice ๋ฑ์ด ์๋ค.
·Before Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ์ ์ํ๋๋ ๊ฒฝ์ฐ
·After Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
·Around Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ๊ณผ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌ
3. Spring AOP ๊ธฐ๋ฒ์ Advice ๋ก ๊ตฌ๋ถํ์ฌ
๋ณด์กฐ์ ๋ฌด(์๊ฐ ์ธก์ , ๋ก๊ทธ ๊ธฐ๋ก ์ฒ๋ฆฌ)๋ฅผ ์ํํ๋ ์ค์ต์ ์งํํ๋ค.
4. SpringPrj09
5. ๋ก๊ทธ ๋ฐ ์คํฑ์์น ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ํด ๊ด๋ จ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
6. ์ถ๊ฐ๋ก Spring AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
โ ๋ฑ๋กํด์ผํ jar ํ์ผ
(๋ก๊ทธ ๋ฐ ์คํฑ์์น ์ฌ์ฉ์ ์ํด ๋ฑ๋กํด์ผ ํ jar ํ์ผ
+ ์คํ๋ง AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ jar ํ์ผ)
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.aop-3.0.2.RELEASE
·ํ์ผ2 → org.springframework.asm-3.0.2.RELEASE
·ํ์ผ3 → org.springframework.beans-3.0.2.RELEASE
·ํ์ผ4 → org.springframework.context-3.0.2.RELEASE
·ํ์ผ5 → org.springframework.core-3.0.2.RELEASE
·ํ์ผ6 → org.springframework.expression-3.0.2.RELEASE
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ7 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
- ๊ฒฝ๋ก 3 → C:\s-f-3.0.2-dependencies\org.aopalliance\cohttp://m.springsource.org.aopalliance\1.0.0
·ํ์ผ8 → cohttp://m.springsource.org.aopalliance-1.0.0.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Calculator.java → ์ธํฐํ์ด์ค (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
2. CalculatorAspect.java → ๋ณด์กฐ ์ ๋ฌด ํด๋์ค
๋ณด์กฐ ์ ๋ฌด ์ ์ฉ ๋ฐ ์ฃผ ์ ๋ฌด ํธ์ถ ๊ณผ์ .
3. CalculatorImpl.java → ํด๋์ค. ์ฃผ ์ ๋ฌด ์ ์ฉ (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
4. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
5. config.xml → ์คํ๋ง ํ๊ฒฝ ์ค์ ํ์ผ.
๊ฐ์ฒด ์์ฑ ๋ฐ DI ์ค์ .
6. CalculatorBeforeAdvice.java → ์ถ๊ฐ. BeforeAdvice
7. CalculatorAfterThrowing.java → ์ถ๊ฐ. After Throwing Advice
โป ๊ณตํต์ ๊ด์ฌ ์ฌํญ์ ์ ์ฉํด์ ๋ฐ์ํ๋ ์์กด ๊ด๊ณ์ ๋ณต์ก์ฑ๊ณผ
์ฝ๋ ์ค๋ณต์ ํด์ํด์ฃผ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ.
โ AOP ๊ฐ๋
์ฃผ ์ ๋ฌด๋ฅผ ์คํํ ๋ ๋ณด์กฐ์ ์ธ ์ ๋ฌด(์ฃผ ์ ๋ฌด ์คํ์๊ฐ ์ฒดํฌ, ๋ก๊ทธ ๊ธฐ๋ก ๋ฑ)๊ฐ ์งํ๋์ด์ผ ํ๋ค.
๋ง์ฝ, ์ฃผ ์ ๋ฌด๊ฐ ์ฌ๋ฌ ๊ฐ์ด๊ณ , ๋์ผํ ๋ณด์กฐ ์ ๋ฌด์ ์ํ์ด ์งํ๋์ด์ผ ํ๋ค๋ฉด
๋ณด์กฐ์ ๋ฌด ๋ถ๋ถ์ ์ค๋ณต๋ ์ฝ๋๊ฐ ๋ ์ ๋ฐ์ ์๋ค.
์ด๋ฐ ์ค๋ณต ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ณด์กฐ ์ ๋ฌด๋ฅผ ๋ณด๋ค ๋ ๋ฆฝ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์คํํ ์ ์๋๋ก
๊ตฌ์ฑํ๋ ๊ฒ์ AOP ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ๋ค.
โ AOP ๊ด๋ จ ์ฃผ์ ์ฉ์ด
- ๋ณด์กฐ ์ ๋ฌด(cross-cutting concern)
์ฃผ ์ ๋ฌด ์คํ ์ ๋ฐ์ํ๋ ๋ณด์กฐ์ ์ธ ์ ๋ฌด.
์ฃผ ์ ๋ฌด์ ๋ถ๋ฆฌ ๋ฐ ๊ฒฐํฉ์ด ์ฝ๊ฒ ์ด๋ฃจ์ด์ง ์ ์๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
- ์ฃผ ์ ๋ฌด (core concern)
ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ถ๋ถ.
์ฌ์ฉ์์ ์์ฒญ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ํ ๋ฐ ๊ฒฐ๊ณผ ๋ฐํ์ ํด์ผ ํ๋ค.
- Advice
์ธ์ ์ด๋ค ๊ณตํต ๊ด์ฌ ๊ธฐ๋ฅ (๋ณด์กฐ ์ ๋ฌด, cross-cutting concern)์ ์ ์ฉํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ.
Before Advice, After Advice, Around Advice ๋ฑ์ด ์๋ค.
·Before Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ์ ์ํ๋๋ ์ ๋ฌด
·After Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
·Around Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ๊ณผ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
- proxy
์ฃผ ์ ๋ฌด๋ฅผ ์คํํ๋ ๊ฐ์ฒด์ ๋์ผํ ๋ชจ์์ ๊ฐ์ง ๊ฐ์ง ๊ฐ์ฒด
์ฌ์ฉ์๊ฐ ์ง์ ์ฃผ ์ ๋ฌด๋ฅผ ์คํํ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์๊ฐ๋ ๊ฒ์ด ์๋๋ผ,
proxy ๋ฅผ ์ฐพ์๊ฐ๋๋ก ์ง์ ํ๊ฒ ๋๋ค.
proxy ๋ด๋ถ์์ ๋ณด์กฐ ์ ๋ฌด๋ฅผ ์คํํ ํ ์ฃผ ์ ๋ฌด๋ฅผ ํธ์ถํ๋๋ก ํ๋ฉด
์ธ๋ถ์์ ๋ณผ ๋ ์ฃผ ์ ๋ฌด๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก ํ ์ ์๋ค.
- joinpoint
proxy ๋ด๋ถ์์ ์ฃผ ์ ๋ฌด๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ์ ํน์ ์ง์ ์๋ง ํธ์ถ๋๋๋ก ํ ์ ์๋ค.
- weaving
advice ๋ฅผ ์ฃผ ์ ๋ฌด์ ์ ์ฉํ๋ ๊ณผ์ ์ ๋ถ๋ฅด๋ ๋ช ์นญ
- aspect
์ฌ๋ฌ ์ฃผ ์ ๋ฌด ๊ฐ์ฒด์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ๊ณตํต ๊ด์ฌ ์ฌํญ(๋ณด์กฐ ์ ๋ฌด)์
aspect ๋ผ๊ณ ํ๋ค.
โ AOP ์งํ ์์
์ฌ์ฉ์ ํ๋ก์ ๋ณด์กฐ์ ๋ฌด ์ฃผ์ ๋ฌด
(client) (proxy) (cross-cut...) (core concern)
โ------------------------------------------------------>โ
โ-----โ ------>โ
โ--------โก------->โ
โ------------------โข------------------->โ
โ<-----------------โฃ--------------------โ
โ--------โค------->โ
โ<-------------------------------------------------------โ
โ<------โฅ------โ
โ ์ฌ์ฉ์๋ proxy ๊ฐ์ฒด์ ์ ๊ทผํ๋ค.
์ฌ์ฉ์ ์ ์ฅ์์๋ proxy ๊ฐ์ฒด๊ฐ ์ฃผ ์ ๋ฌด(core concern) ๊ฐ์ฒด์ ๋์ผํ๊ฒ ์๊ฐํ๋ค.
โก proxy ๊ฐ์ฒด ๋ด๋ถ์์ ๋ณด์กฐ ์ ๋ฌด(cross-cutting concern) ๋ฅผ ์งํํ๊ฒ ๋๋ค.
์ฃผ ์ ๋ฌด ์คํ ์ ์ ์ํ๋๋ ๋ณด์กฐ ์ ๋ฌด๋
Before Advice, Around Advice
โข proxy ๊ฐ์ฒด ๋ด๋ถ์์ ์ฃผ ์ ๋ฌด(core concern) ๋ฅผ ํธ์ถํ๋ค.
์ฃผ ์ ๋ฌด๊ฐ ์งํ๋๋ค.
โฃ ์ฃผ ์ ๋ฌด๊ฐ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ค.
โค proxy ๊ฐ์ฒด ๋ด๋ถ์์ ๋ณด์กฐ์ ๋ฌด(cross-cutting concern)๋ฅผ ์งํํ๊ฒ ๋๋ค.
์ฃผ ์ ๋ฌด ์คํ ํ์ ์ํ๋๋ ๋ณด์กฐ์ ๋ฌด๋
After Advice, Around Advice ๊ฐ ์๋ค.
โฅ ์ฌ์ฉ์์๊ฒ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ค.
-------------------------------------------------------------------------------------------------
โ โ โ AOP ๊ฐ๋ ์ค์ต 01 โ โ โ
โป AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ด์ ํํ๋ก ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌ
3. AOP ๊ธฐ๋ฒ์ ์ ์ฉํ์ง ์์ ์ํ๋ก
๋ณด์กฐ์ ๋ฌด(์๊ฐ ์ธก์ , ๋ก๊ทธ ๊ธฐ๋ก ์ฒ๋ฆฌ)๋ฅผ ์ํํ๋ ์ค์ต์ ์งํํ๋ค.
4. SpringPrj05
5. ๋ก๊ทธ ๋ฐ ์คํฑ์์น ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ํด ๊ด๋ จ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
โ ๋ฑ๋กํด์ผํ jar ํ์ผ
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.core-3.0.2.RELEASE
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ1 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Calculator.java → ์ธํฐํ์ด์ค
2. CalculatorImpl.java → ํด๋์ค. ์ฃผ ์ ๋ฌด, ๋ณด์กฐ ์ ๋ฌด ์ ์ฉ
3. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
-------------------------------------------------------------------------------------------------
โ โ โ AOP ๊ฐ๋ ์ค์ต 02 โ โ โ
โป AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๋ ํํ๋ก ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌ
3. AOP ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ์ํ๋ก
๋ณด์กฐ์ ๋ฌด(์๊ฐ ์ธก์ , ๋ก๊ทธ ๊ธฐ๋ก ์ฒ๋ฆฌ)๋ฅผ ์ํํ๋ ์ค์ต์ ์งํํ๋ค.
4. SpringPrj06
5. ๋ก๊ทธ ๋ฐ ์คํฑ์์น ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ํด ๊ด๋ จ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
โ ๋ฑ๋กํด์ผํ jar ํ์ผ
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.core-3.0.2.RELEASE
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ1 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Calculator.java → ์ธํฐํ์ด์ค (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
2. CalculatorProxy.java → ํ๋ก์(proxy) ํด๋์ค
(์ถ๊ฐ~!!!) ๋ณด์กฐ ์ ๋ฌด ์ ์ฉ ๋ฐ ์ฃผ ์ ๋ฌด ํธ์ถ ๊ณผ์
3. CalculatorImpl.java → ํด๋์ค. ์ฃผ ์ ๋ฌด ์ ์ฉ
4. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
-------------------------------------------------------------------------------------------------
โ โ โ AOP ๊ฐ๋ ์ค์ต 03 โ โ โ
โป Spring AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๋ ํํ๋ก ๊ฐ๋ ์ค์ต
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌ
3. Spring AOP ๊ธฐ๋ฒ์ ์ ์ฉํ์ง ์์ ์ํ๋ก
๋ณด์กฐ์ ๋ฌด(์๊ฐ ์ธก์ , ๋ก๊ทธ ๊ธฐ๋ก ์ฒ๋ฆฌ)๋ฅผ ์ํํ๋ ์ค์ต์ ์งํํ๋ค.
4. SpringPrj07
5. ๋ก๊ทธ ๋ฐ ์คํฑ์์น ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ํด ๊ด๋ จ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
โ ๋ฑ๋กํด์ผํ jar ํ์ผ
(๋ก๊ทธ ๋ฐ ์คํฑ์์น ์ฌ์ฉ์ ์ํด ๋ฑ๋กํด์ผ ํ jar ํ์ผ
+ ์คํ๋ง AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ jar ํ์ผ)
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.asm-3.0.2.RELEASE
·ํ์ผ2 → org.springframework.beans-3.0.2.RELEASE
·ํ์ผ3 → org.springframework.context-3.0.2.RELEASE
·ํ์ผ4 → org.springframework.core-3.0.2.RELEASE
·ํ์ผ5 → org.springframework.expression-3.0.2.RELEASE
·ํ์ผ6 → org.springframework.aop-3.0.2.RELEASE
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ7 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
- ๊ฒฝ๋ก 3 → C:\s-f-3.0.2-dependencies\org.aopalliance\cohttp://m.springsource.org.aopalliance\1.0.0
·ํ์ผ8 → cohttp://m.springsource.org.aopalliance-1.0.0.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Calculator.java → ์ธํฐํ์ด์ค (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
2. CalculatorAspect.java → ๋ณด์กฐ ์ ๋ฌด ํด๋์ค
(์ถ๊ฐ~!!!) ๋ณด์กฐ ์ ๋ฌด ์ ์ฉ ๋ฐ ์ฃผ ์ ๋ฌด ํธ์ถ ๊ณผ์ .
3. CalculatorImpl.java → ํด๋์ค. ์ฃผ ์ ๋ฌด ์ ์ฉ (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
4. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
5. config.xml → ์คํ๋ง ํ๊ฒฝ ์ค์ ํ์ผ.
(์ถ๊ฐ~!!!) ๊ฐ์ฒด ์์ฑ ๋ฐ DI ์ค์ .
-------------------------------------------------------------------------------------------------
โ โ โ AOP ๊ฐ๋ ์ค์ต 04 โ โ โ
โป AOP Advice
·Advice
์ธ์ ์ด๋ค ๊ณตํต ๊ด์ฌ ์ฌํญ(๋ณด์กฐ ์ ๋ฌด, cross-cutting concern)์
์ ์ฉํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ.
Before Advice, After Advice, Around Advice ๋ฑ์ด ์๋ค.
·Before Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ์ ์ํ๋๋ ๊ฒฝ์ฐ
·After Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
·Around Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ๊ณผ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌ
3. Spring AOP ๊ธฐ๋ฒ์ Advice ๋ก ๊ตฌ๋ถํ์ฌ
๋ณด์กฐ์ ๋ฌด(์๊ฐ ์ธก์ , ๋ก๊ทธ ๊ธฐ๋ก ์ฒ๋ฆฌ)๋ฅผ ์ํํ๋ ์ค์ต์ ์งํํ๋ค.
4. SpringPrj08
5. ๋ก๊ทธ ๋ฐ ์คํฑ์์น ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ํด ๊ด๋ จ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
6. ์ถ๊ฐ๋ก Spring AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
โ ๋ฑ๋กํด์ผํ jar ํ์ผ
(๋ก๊ทธ ๋ฐ ์คํฑ์์น ์ฌ์ฉ์ ์ํด ๋ฑ๋กํด์ผ ํ jar ํ์ผ
+ ์คํ๋ง AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ jar ํ์ผ)
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.aop-3.0.2.RELEASE
·ํ์ผ2 → org.springframework.asm-3.0.2.RELEASE
·ํ์ผ3 → org.springframework.beans-3.0.2.RELEASE
·ํ์ผ4 → org.springframework.context-3.0.2.RELEASE
·ํ์ผ5 → org.springframework.core-3.0.2.RELEASE
·ํ์ผ6 → org.springframework.expression-3.0.2.RELEASE
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ7 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
- ๊ฒฝ๋ก 3 → C:\s-f-3.0.2-dependencies\org.aopalliance\cohttp://m.springsource.org.aopalliance\1.0.0
·ํ์ผ8 → cohttp://m.springsource.org.aopalliance-1.0.0.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Calculator.java → ์ธํฐํ์ด์ค (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
2. CalculatorAspect.java → ๋ณด์กฐ ์ ๋ฌด ํด๋์ค
๋ณด์กฐ ์ ๋ฌด ์ ์ฉ ๋ฐ ์ฃผ ์ ๋ฌด ํธ์ถ ๊ณผ์ .
3. CalculatorImpl.java → ํด๋์ค. ์ฃผ ์ ๋ฌด ์ ์ฉ (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
4. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
5. config.xml → ์คํ๋ง ํ๊ฒฝ ์ค์ ํ์ผ.
๊ฐ์ฒด ์์ฑ ๋ฐ DI ์ค์ .
6. CalculatorBeforeAdvice.java → ์ถ๊ฐ. BeforeAdvice
-------------------------------------------------------------------------------------------------
โ โ โ AOP ๊ฐ๋ ์ค์ต 05 โ โ โ
โป AOP Advice
·Advice
์ธ์ ์ด๋ค ๊ณตํต ๊ด์ฌ ์ฌํญ(๋ณด์กฐ ์ ๋ฌด, cross-cutting concern)์
์ ์ฉํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ.
Before Advice, After Advice, Around Advice ๋ฑ์ด ์๋ค.
·Before Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ์ ์ํ๋๋ ๊ฒฝ์ฐ
·After Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
·Around Advice
๋ณด์กฐ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด ์คํ ์ ๊ณผ ํ์ ์ํ๋๋ ๊ฒฝ์ฐ
โ ์ค์ต ์ฑ๊ฒฉ ๋ฐ ์ฃผ์์ฌํญ
1. ์ฝ์ ํ๋ก์ ํธ
2. ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌ
3. Spring AOP ๊ธฐ๋ฒ์ Advice ๋ก ๊ตฌ๋ถํ์ฌ
๋ณด์กฐ์ ๋ฌด(์๊ฐ ์ธก์ , ๋ก๊ทธ ๊ธฐ๋ก ์ฒ๋ฆฌ)๋ฅผ ์ํํ๋ ์ค์ต์ ์งํํ๋ค.
4. SpringPrj09
5. ๋ก๊ทธ ๋ฐ ์คํฑ์์น ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ํด ๊ด๋ จ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
6. ์ถ๊ฐ๋ก Spring AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ jar ํ์ผ์ ๋ฑ๋กํ์ฌ
์ค์ต์ ์งํํ ์ ์๋๋ก ํ๋ค.
โ ๋ฑ๋กํด์ผํ jar ํ์ผ
(๋ก๊ทธ ๋ฐ ์คํฑ์์น ์ฌ์ฉ์ ์ํด ๋ฑ๋กํด์ผ ํ jar ํ์ผ
+ ์คํ๋ง AOP ๊ธฐ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํ jar ํ์ผ)
- ๊ฒฝ๋ก 1 → C:\s-f-3.0.2-with-docs\dist
·ํ์ผ1 → org.springframework.aop-3.0.2.RELEASE
·ํ์ผ2 → org.springframework.asm-3.0.2.RELEASE
·ํ์ผ3 → org.springframework.beans-3.0.2.RELEASE
·ํ์ผ4 → org.springframework.context-3.0.2.RELEASE
·ํ์ผ5 → org.springframework.core-3.0.2.RELEASE
·ํ์ผ6 → org.springframework.expression-3.0.2.RELEASE
- ๊ฒฝ๋ก 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
·ํ์ผ7 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar
- ๊ฒฝ๋ก 3 → C:\s-f-3.0.2-dependencies\org.aopalliance\cohttp://m.springsource.org.aopalliance\1.0.0
·ํ์ผ8 → cohttp://m.springsource.org.aopalliance-1.0.0.jar
โ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ตฌ์ฑ
1. Calculator.java → ์ธํฐํ์ด์ค (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
2. CalculatorAspect.java → ๋ณด์กฐ ์ ๋ฌด ํด๋์ค
๋ณด์กฐ ์ ๋ฌด ์ ์ฉ ๋ฐ ์ฃผ ์ ๋ฌด ํธ์ถ ๊ณผ์ .
3. CalculatorImpl.java → ํด๋์ค. ์ฃผ ์ ๋ฌด ์ ์ฉ (๊ธฐ์กด ์์ค์ฝ๋ ๊ทธ๋๋ก ํ์ฉ)
4. Main.java → ํด๋์ค. main() ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํ ์คํธ ํด๋์ค
5. config.xml → ์คํ๋ง ํ๊ฒฝ ์ค์ ํ์ผ.
๊ฐ์ฒด ์์ฑ ๋ฐ DI ์ค์ .
6. CalculatorBeforeAdvice.java → ์ถ๊ฐ. BeforeAdvice
7. CalculatorAfterThrowing.java → ์ถ๊ฐ. After Throwing Advice