ํจ์จ์ ์ธ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
โ Framework๊ฐ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๋ก ์ ๊ณต
( ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ํต์ฌ ๋ก์ง ๊ฐ๋ฐํ๋ ๊ฒ์ ์ง์คํ ์ ์๋๋ก ํจ )
์ ํด์ง ๊ท์ฝ์ด ์์ด, ์ ํ๋ฆฌ์ผ์ด์
ํจ์จ์ , ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
โ Framework ๊ท์ฝ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์, ์ ์ง๋ณด์ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๋ฌธ์ ์ ํ์
ํ ์์ ๊ฐ๋ฅ
โ ๋ค๋ฅธ ์ฌ๋์ด ๋ด ์ฝ๋ ์์ ํ ๊ฒฝ์ฐ์๋, ๋น ๋ฅด๊ฒ ์ฝ๋ ํ์
ํ ์์ ๊ฐ๋ฅ
๊ธฐ๋ณธ์ ์ด ์ค๊ณ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๊ณตํด ์์ฐ์ฑ ํฅ์
์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ๋๊ณ , ํ์ฅ์ฑ ์ข์
์ฌ์ฉํ๊ณ ์ ํ๋ Framework์ ๊ท์ฝ๋ค์ ํ์ตํ ์๊ฐ ํ์ ( ๋ฌ๋์ปค๋ธ ์กด์ฌ )
์์ ๋กญ๊ณ ์ ์ฐํ ๊ฐ๋ฐ ์ด๋ ค์
โ Framework์ ๊ท์ฝ์ ๋ฒ์ด๋๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์, ์ด๋ฏธ ๋ง๋ ๊ตฌ์กฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ๊ฒ ๋ ๊ฒฝ์ฐ, ๋ง๋ ๊ฒ๋ค์ ๋ชจ๋ ํ๋ฌผ๊ณ ์๋กญ๊ฒ ๊ตฌ์กฐ๋ถํฐ ๋ค์ ์ง์ผํจ
๋์๊ด์ ์ฑ ๋ค์ ๋ชจ์๋ ๊ฒ ์ฒ๋ผ ํ์ํ ๊ธฐ๋ฅ๋ค์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ด ์ ๊ณตํ๋ ๊ฒ
๊ตฌ์กฐ ์์ ์์๋ค์ ๋ง๋ค๊ธฐ ์ํด ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ ๊ตฌํ์ฒด๋ค์ ์ ๊ณตํ๋ ๊ฒ
์ฝ๊ฒ ๊ต์ฒด ๊ฐ๋ฅ
๊ทธ ๋ ๊ทธ ๋ ํ์ํ Library๋ค์ ์ ํ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
( ์ง ๋์ ์ฝ๋ ๋ด์์ ํ์ํ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธ์ถํด์ ์ฌ์ฉ )
โ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ฃผ๋๊ถ์ด ๊ฐ๋ฐ์์๊ฒ ์์
โ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ฃผ๋๊ถ์ด Framework์ ์์ (IoC (Inversion Of Control))
โ ๋ ๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋, ํ์ํ ๊ธฐ๋ฅ์ ๋ฏธ๋ฆฌ ๊ตฌํํด๋์ ์งํฉ์ฒด๋ผ๋ ๊ฒ์ ๋์ผํ์ง๋ง, ์ฐ์ด๋ ์ํฉ์ด ๋ค๋ฆ
โ
โ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ ์ด๊ถ์ ์ฐจ์ด๊ฐ ์์
Ex. ์๋์ฐจ๋ฅผ ๋ง๋๋ ๊ฒ์ ์์๋ก ๋ ๋ค๋ฉด,
- Framework โ ์๋์ฐจ์ ๋ผ๋
- Library โ ์๋์ฐจ์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ถํ
์ฌ๋ฌ Framework ์ค ํ ์ข ๋ฅ
๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น์ ์ ๋ง๋ ์ฌ์ฌ์ฉ๊ณผ ํ์ฅ์ด ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์คํฌ์ ํฅ์์ํฌ ์ ์์
๋ณด๋ค ๋์ ์ฑ๋ฅ๊ณผ ์๋น์ค์ ์์ ์ฑ์ด ํ์ํ ๋ณต์กํ ๊ธฐ์ ์ฉ ์ํฐํ๋ผ์ด์ฆ ์์คํ ์ ์ ๋๋ก ๊ตฌ์ถํ๊ธฐ ์ํ ๋ฅ๋ ฅ ๊ธฐ๋ฅผ ์ ์์
POJO(Plan Old Java Object)๊ธฐ๋ฐ์ ๊ตฌ์ฑ
DI(Dependency Injection) ์ง์
AOP(Aspect Oriented Programming, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ) ์ง์
Java ์ธ์ด๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ป๋ ์ฅ์
โ ๋ณ์ ํ์
, ๋ฉ์๋ ์
์ถ๋ ฅ์ด ์ด๋ค ํ์
์ ๊ฐ์ ธ์ผํ๋์ง ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์, ์ฝ๋์ ์์ /๋ณด์์ด ์ฉ์ดํ๊ณ ์น์๋ฒ ๊ตฌ์ถ ์ ๋ฐํ์
์ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐฉ์ง ๊ฐ๋ฅ
โ Java ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ Framework๋ค๋ ๋ง์
Ex. Apache Struts2, Apache Wicket, JSF(Java Server Faces), Grails ๋ฑ
โ
โ But, ๋๋ถ๋ถ์ ๊ธฐ์ ๋ค์ด ๊ธฐ์ ์ฉ ์ํฐํ๋ผ์ด์ฆ ์์คํ ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐ ํ ๋,
๊ฐ๋ฐ ์์ฐ์ฑ์ด ์ข๊ณ ์ ์ง ๋ณด์๊ฐ ์ข ๋ ์ฉ์ดํ Framework์ธ Spring Framework๋ฅผ ์ฃผ๋ก ์ฌ์ฉ
โ๏ธ ๊ธฐ์ ์ฉ ์ํฐํ๋ผ์ด์ฆ ์์คํ
- ๊ธฐ์ ์ ์๋ฌด๋ฅผ ์ฒ๋ฆฌํด์ฃผ๋ ์์คํ
Ex. ๊ณ ๊ฐ์ ์ํ ์๋น์ค, ์กฐ์ง์ ์๋ฌด
โ ๋๋์ ์ฌ์ฉ์์ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ํด ์๋ฒ์ ์์ ํจ์จ์ฑ, ๋ณด์์ฑ, ์์คํ ์ ์์ ์ฑ, ํ์ฅ์ฑ ๋ฑ์ ์ถฉ๋ถํ ๊ณ ๋ คํด์ ์์คํ ๊ตฌ์ถํจ
ํด๋ผ์ด์ธํธ ์ธก HTML/JS ์ฝ๋์ ์๋ฒ ์ธก Java ์ฝ๋๊ฐ ๋ค์์ฌ์๋ ๋ฐฉ์
๊ฐ๋ ์ฑ๋ ๋จ์ด์ง๊ณ ๋๋ฌด ๋ณต์ก ( ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง ๋ณด์ ์ธก๋ฉด์์ ์ต์ ์ ๋ฐฉ์ )
ํ์ ์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅ
JSP ์ฝ๋์์ Java ์ฝ๋๋ง ๋ณ๋์ ์๋ธ๋ฆฟ ํด๋์ค๋ก ๋ถ๋ฆฌํ ๋ฐฉ์
( ํด๋ผ์ด์ธํธ ์น ์์ฒญ ์ฒ๋ฆฌ์ ํนํ๋ Java ํด๋์ค์ ์ผ์ข
)
( JSP ๋ฐฉ์๋ ๋ด๋ถ์ ์ผ๋ก๋ Servlet ๋ฐฉ์ ์ฌ์ฉ )
๊ฐ๋ฐ์๊ฐ ๋ณ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ค๋ ์์ ์ ์ง์ ์ฝ๋๋ก ์์ฑ๋ ํด์ผ ํ๊ณ ์บ๋ฆญํฐ์ ๋ ์ง์ ํด์ฃผ์ด์ผ ํจ
๋น์ฆ๋์ค ๋ก์ง๋ ์๊ณ ๋ฐ์ดํฐ ์ก์ธ์ค ๋ก์ง๋ ์๋๋ฐ ์ฝ๋ ์์ฒด๊ฐ ๋๋ฌด ๊ธบ
๋์ ๋ณด์ด์ง ์์ง๋ง ์๋ธ๋ฆฟ์์ ๊ฐ๋ฐ์๊ฐ ์ง์ ํด์ผํ๋ ์ผ๋ค์ Spring์์ ์์์ ์ฒ๋ฆฌํด์ค
์ด ๋ฐฉ์์ด ๋์ ๋จ์ผ๋ก์จ Java ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์๋ฐฉ์์ด ํ๊ธฐ์ ์ผ๋ก ๋ณํจ
But, Spring ๊ธฐ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ก๋ ์ค์ ์์
์ด ์ฌ์ ํ ๋ถํธ
( Spring ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์์ ์ผ๋ก ๊ตฌ๋ํ๊ธฐ ์ํด ์จ์ผํ๋ ์ค์ ํ์ผ๋ค์ด ๋ณต์ก )
์ด ์ ์ ๋ฌธ์ ๋ค์ด ๋๋ถ๋ถ ๊ฐ์ ๋จ
Spring MVC ์ค์ ์ ๋ณต์กํจ๊ณผ ์ด๋ ค์์ ๊ทน๋ณต์ ์ํด ํ์
์ด ์ ๋ฐฉ์๋ค์ ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ฌํ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ ๋ชฉ์ ์ผ๋ก ๋จ์ํ List์ ๋ด์๋๋ฐ, ์ด ๋ฐฉ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํด์ ๋ฐ์ดํฐ ์ก์ธ์ค ์ฒ๋ฆฌ๊น์ง ํ๋๋ก ํจ
๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ์ ์ฅํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ
์ฝ๋ ๊ธธ์ด๋ ํฌ๊ฒ ๋ฐ๋ ๊ฒ์ด ์๊ณ ์คํ๋ ค ๋ ๊น๋ํด์ง
์ค์ ํ์ผ๋ Spring์ด ๋์ ์ฒ๋ฆฌํด์ฃผ์ด ์์ฃผ ๊ฐ๋จ
โ ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์ค ๊ฐ๋ฅ
โฌ๏ธ POJO๋ผ๋ ๊ฒ์ IoC/DI, AOP, PSA๋ฅผ ํตํด์ ๋ฌ์ฑํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธ
POJO๋ฅผ ์ด์ฉํด์ ํ๋ก๊ทธ๋๋ฐ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ
But, ๋จ์ํ ์์ ์๋ฐ ๊ฐ์ฒด๋ง์ผ๋ก ์ฌ์ฉํ๋ค๋ ๋ง์ด ์๋๋ผ,
๊ฐ์ฒด์งํฅ์ ์๋ฆฌ์ ์ถฉ์คํ๋ฉฐ ๋ค๋ฅธ ํ๊ฒฝ๊ณผ ๊ธฐ์ ์ ์ข
์๋์ง ์๊ณ ๋ค๋ฅธ ๊ธฐ์ ๊ณผ ๊ท์ฝ์ ์ฝ๋งค์ด์ง ์์ ๊ฐ์ฒด
1. Java ์ธ์ด ์ธ์ ๋ค๋ฅธ ๊ธฐ์ ์ด๋ ๊ท์ฝ์ ์ฝ๋งค์ด์ง ์์์ผ ํจ
โ ํน์ ๊ธฐ์ ์ ์์ํด์ ์ฝ๋ ์์ฑํ ๊ฒฝ์ฐ ๊ทธ ํด๋์ค๋ฅผ ๋ช
์์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ถ๋ถ์ ์ผ์ผ์ด ๋ชจ๋ ์์ ํด์ผํ๊ณ ๋ค์ค ์์์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ์์ํ๋ฉด ๊ฐ์ฒด ์งํฅ ์ค๊ณ ๊ธฐ๋ฒ ์ ์ฉ์ด ์ด๋ ค์์ง
2. ํน์ ํ๊ฒฝ์ ์ข ์์ ์ด์ง ์์์ผํจ
ํน์ ํ ํ๋ ์์ํฌ์์๋ง ๋์์ด ๊ฐ๋ฅํ๋ฉด ์๋จ
โ ๊ทธ ํ๊ฒฝ ๋ณํ๋ฉด ๋ค ๊ฐ์์์ด์ผ ํ๋๊น
์น ๊ธฐ๋ฐ์ ํ๊ฒฝ์ ๋ณด/์น ๊ธฐ์ ์ ๋ด๊ณ ์๋ ํด๋์ค or ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์๋จ
( ์น์์๋ง ๋์ํ๋ api๋ฅผ ์ง์ ์ฌ์ฉํ๋ฉด ์๋จ )
( But, ๋ค๋ฅธ api๋ค๋ ์ฌ์ฉ์ ์์ ์ํ๊ธฐ์ ํ์ฅ์ฑ ์ธก๋ฉด์์ ๋ถ๋ฆฌํ ์ ์๊ธฐ์ ์ต๋ํ ์์ฐ๋ ค๊ณ ํ๋ฉด์ ์จ์ผํ ๊ฒฝ์ฐ์ ์ฐ๊ธฐ )
3. ๊ฐ์ฒด ์งํฅ ์๋ฆฌ ๋ฐ๋ผ์ผ ํจ
๋จ์ํ Java๋ก ๊ตฌํํ๋ค๊ณ ํด๋ ๋ชจ๋ ๊ฐ์ฒด ์งํฅ์ ์ค๊ณ๊ฐ ์ ์ฉ๋๋ค๊ณ ํ๊ธด ์ด๋ ค์
์ฑ
์ / ์ญํ ์ด ๋ถ๋ช
ํ ๋๋์ด์ ธ์ผ ํจ (๊ฐ์ฒด์งํฅ์ 5๋ ์๋ฆฌ SOLID )
โ ํ๋์ ํด๋์ค์๋ ํ๋์ ์ฑ
์ / ์ญํ ๋ง ์กด์ฌํด์ผ ํจ
โ ์์, ๋คํ์ฑ์ ํ์ฉํด์ผ ํจ
โ ์กฐ๊ฑด๋ฌธ๋ง์ ํ์ฉํ์ฌ ์ค๊ณ๋ ์ค๋ธ์ ํธ๋ POJO๊ฐ ์๋
ํน์ ํ๊ฒฝ์ด๋ ๊ธฐ์ ์ ์ข ์์ ์ด์ง ์์ผ๋ฉด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ , ํ์ฅ ๊ฐ๋ฅํ ์ ์ฐํ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
์ ์์ค ๋ ๋ฒจ์ ๊ธฐ์ ๊ณผ ํ๊ฒฝ์ ์ข
์์ ์ธ ์ฝ๋๋ฅผ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋์์ ์ ๊ฑฐ
โ ์ฝ๋๊ฐ ๊น๋ํด์ง
โ ๋๋ฒ๊น
๋ ์๋์ ์ผ๋ก ์ฌ์์ง
ํน์ ๊ธฐ์ ์ด๋ ํ๊ฒฝ์ ์ข ์์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ๋ ๋จ์
๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๋ฅผ ์ ํ์์ด ์ ์ฉ ๊ฐ๋ฅ (๊ฐ์ฅ ์ค์)
Spring Framework ์ฌ์ฉ ์ ์๋ ์ํ๋ ํน์ ๊ธฐ์ ์ด ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํจ
But, ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด์ ์ ์ง, ๋ณด์, ํ์ฅ์ด ์ด๋ ค์์ง๊ณ Java ์ธ์ด๋ ์ฌ์ฉํ์ง๋ง ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๋ณธ์ง์ ์์ด๋ฒ๋ฆฌ๋ ๋ฌธ์ ์ ์ด ์๊น
โ POJO ๊ฐ๋
๋ฑ์ฅ
๐ฅ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋๋ฐ ์ฝ๋๋ฅผ ์์ฑํ ๋,
ํญ์ ๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ ๊ฐ์ฒด์งํฅ์ค๋ฌ์ด๊ฐ์ ๋ํ ๊ณ ๋ฏผ์ ํ๋ ์ต๊ด์ ๊ฐ์ง๋ ๊ฒ์ด ์ค์!
POJO ํ๋ก๊ทธ๋๋ฐ์ ํจ๊ณผ์ ์ผ๋ก ์ ์ฉํ๊ธฐ ์ํด์๋ ํน์ ๊ธฐ์ ์ ๋ํ ์ง์๋ณด๋ค๋ JDK์ API์ ๋ํ ์ง์๊ณผ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฌ๊ณ ๋ฐฉ์๊ณผ ์ค๊ณ๋ฅผ ์ํ ํ๋ จ์ด ์ฐ์ ์ ๋์ด์ผ ํจ
์ ํ๋ฆฌ์ผ์ด์
ํ๋ฆ์ ์ฃผ๋๊ถ์ด ๋ค๋ฐ๋ ๊ฒ
Ex. Framework์ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ฆ์ ์ฃผ๋๊ถ์ด ๊ฐ๋ฐ์๊ฐ ์๋ Framework์ ์๋ ๊ฒ ์ฒ๋ผ
ํด๋์ค ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํ ์ค์ํ ๋ฐฉ๋ฒ ( ์ธํฐํ์ด์ค ์ฌ์ฉ )
โ๏ธ ๊ฐ๋ฐ์๊ฐ ์ ์ด๊ถ์ ๊ฐ๋๋ค
- ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋ ์์ ๊ฐ์ฒด๋ฅผ ๋ด ๋ง๋๋ก ๊ฐ์ ๋ผ์ธ ์ ์
- ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋ ๋๋ก ์ฝ๋์ ํ๋ฆ์ด ์งํ๋จ
- ํด๋น ํด๋์ค๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์กดํ๊ณ ์๋์ง ๊ฐ๋ฐ์๊ฐ ์๊ณ ํ์ฉํด์ผํจ
โ๏ธ ์ ์ด๊ถ์ ์ธ๋ถ๋ก ๋๊ธด๋ค ( IoC ) ( ๊ฐ๋ฐ์ -> ์ธ๋ถ )
- ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ์ ๋ํ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ์ง ์์
Ex. ์ญ์ , ์์กด๊ด๊ณ ์ฃผ์ , ์์ฑ- ํด๋น ํด๋์ค๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์กดํ๊ณ ์๋์ง ๋ชฐ๋ผ๋ ๋จ
Ex 1. ์ฌํ์ ๊ฐ๋ ค๊ณ
APackage
๊ตฌ๋งคํจ
( ์ฌ๊ธฐ์APackage
์ ์ฌํ๊ฒฝ๋ก๋Acourse โ Bcourse โ Ccourse
๋ก ์ ํด์ ธ ์์ )
- ์ด ๊ฒฝ์ฐ์๋ ์์ฑ์์ ์ง์ ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ฃผ๊ฒ ๋จ
โAPackage
๋ผ๋ ์ ์ด๊ถ์ด ๊ฐ์ฒด ๋ด๋ถ์ ์๋ ๊ฒ
โ - ์ฌ๊ธฐ์ ๊ณ ๊ฐ์ด ๋ค๋ฅธ ์ฝ์ค๋ฅผ ๋ฃ์ด๋ฌ๋ผ๊ณ ํ๋ฉด ๋ถ๊ฐ๋ฅ
โ ์์ ๊ฐ์ด ์ง์ฌ์ง ์ฝ๋์์๋ ํฐ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ผํจ
Ex 2. ์์ ์์๋ฅผ Spring Framework๋ก ๋ง๋ ๋ค๋ฉด,
- ์ด ๊ฒฝ์ฐ์๋ ์์ฑ์๊ฐ ์ถ์ํ๋
TourGuide
๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์์๋ก ๋ฐ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐ๊ณ ์์
โ - ์ํ๋ course์ ๊ฐ์ฒด๋ฅผ ๋ฆฌ์คํธ์ ์ง์ ๋ฃ์ด์ฃผ๋ฉด
APackage
์ ๊ทธ course๋ค์ด ๋ด๊น
( ์ฌ๊ธฐ์ ์ฃผ์ ๋๋ ๊ฐ course๋ค์TourGuide
๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ ํด๋์ค๋ค )
โ
โAPackage
๋ผ๋ ์ ์ด๊ถ์ด ์ธ๋ถ์(๊ณ ๊ฐ์๊ฒ) ์์
( ์์ฑ์ ๋ถ๋ถ์์ ์์กด์ฑ ์ฃผ์ ์ด ์ด๋ฃจ์ด์ง )
โ๏ธ ๋ณดํต Java ์ฝ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ด ํ๋ฆ
main()
๋ฉ์๋๊ฐ ์์ด์ผ ์คํ
โ System ํด๋์ค๋ฅผ ํตํด static ๋ฉค๋ฒ๋ณ์์ธ out์pritln()
ํธ์ถ
(main()
๋ฉ์๋๊ฐ ์ข ๋ฃ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ๋ ์ข ๋ฃ )
โ๏ธ ํ ๋ฆฌ์ฐ๋ ๋ฒ์น (Hollywood Principle)
- Don't call us, we'll call you
- ์ ํฌ๋ฅผ ๋ถ๋ฅด์ง ๋ง์ธ์ ์ ํฌ๊ฐ ์์์ ๋ถ๋ฅผ๊ฒ์
IoC ๊ฐ๋ ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
์์ฑ์๋ฅผ ํตํด์ ์ด๋ค ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ ๋ฐ๋ ๊ฒ
โ๏ธ ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ๋ค
โ ์์ฑ์์ ํ๋ผ๋ฏธํฐ๋ก ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ๊ฒ
Ex. A ํด๋์ค๊ฐ B ํด๋์ค์ ๊ตฌํ ํด๋์ค์ผ ๋,
<A ํด๋์ค๋ B ํด๋์ค์๊ฒ ์์กดํ๋ค> ๋ผ๊ณ ํจ
( ๋์์ ๋ฐ๋ ์ชฝ์ด A / ๋์์ ์ฃผ๋ ์ชฝ์ด B )
Ex. ๊ธฐ๋ฅ์ ๋ง๋ค์ด ๋์ A ํด๋์ค์, main ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ B ํด๋์ค๊ฐ ์๋ค๊ณ ํ ๋,
B ํด๋์ค์์ new ํค์๋๋ก A ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ด ๊ฐ์ฒด๋ก A ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค๋ฉด
์ฌ์ฉํ๊ณ ์ ํ๋ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ฐธ์กฐํ๊ฒ ๋๋ฉด ์์กด๊ด๊ณ๊น ์ฑ๋ฆฝํ ๊ฒ
โ๏ธ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ
์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ๋ฅผ ์ํด ๊ต์ฅํ ๋ง์ด ์ฌ์ฉํ๋ ๋ค์ด์ด๊ทธ๋จ
์ ํ๋ฆฌ์ผ์ด์ ๊ตฌํ์ ํ์ํ ํด๋์ค๋ค์ ํฐ ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด๊ธฐ ์ํด ์ฌ์ฉ
[์ฐธ๊ณ ] https://online.visual-paradigm.com/diagrams/features/
โ๏ธ ์ ์บ์คํ
โ ์ธํฐํ์ด์ค ํ์ ์ ๋ณ์์ ๊ทธ ์ธํฐํ์ด์ค์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ํ ๋น
โ ์์ ํ Spring Framework ์์ญ์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ ์ํด๋๊ณ Spring์ ๋์์ ๋ฐ์, ๋ค๋ฅธ ํด๋์ค์ ์์กด ๊ฐ์ฒด๋ค์ ์ฃผ์
ํ๋ ๊ฒ
( Spring Framework ์์ญ์ ํด๋์ค๋ ์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ ํต์ฌ ๋ก์ง์ ๊ด์ฌํ์ง ์์ )
โ ์์ ์ด ๋ง์ ๊ฒฝ์ฐ์๋ Spring Framework ์์ญ์ ์๋ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋จ
โ ๊ฐ์ฒด์งํฅ์ 5๋ ์์น SOLID ์ค DIP(Dependency Inversion Principle)๋ ๊ฐ์ด ์๊ฐํด ๋ณด๊ธฐ !
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ
โ๏ธ Aspect
โ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณตํต ๊ด์ฌ์ฌ
( ๋ญ๊ฐ ๊ณตํต์ ์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ ์ฌ์ฉํ๋ ๊ฐ๋ )
์ ํ๋ฆฌ์ผ์ด์
์ ํต์ฌ ์
๋ฌด ๋ก์ง(๋น์ฆ๋์ค ๋ก์ง)์์ ๊ณตํต ๊ธฐ๋ฅ ๋ก์ง๋ค์ ๋ถ๋ฆฌํ๋ ๊ฒ
Ex. ๊ณตํต ๊ธฐ๋ฅ - ๋ก๊น
์ด๋ ๋ณด์, ํธ๋์ญ์
, ๋ชจ๋ํฐ๋ง, ํธ๋ ์ด์ฑ ๋ฑ
โ ๊ณตํต ๋ก์ง๋ค์ Aspect๋ก ๋ถ๋ฆฌํ๊ณ ํด๋น Aspect๊ฐ ์ฌ์ฉ๋๋ ๋ฉ์๋ ๋งคํ
โ๏ธ ๋ชจ๋ํ
๊ณตํต ๊ด์ฌ ์ฌํญ์ ๋ถ๋ฆฌ + ๋งคํ
โ๏ธ ๊ณตํต ๊ด์ฌ ์ฌํญ(Cross-cutting concern)
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ณตํต ๊ธฐ๋ฅ๋ค์ ๋ํ ๊ด์ฌ์ฌ
- ํต์ฌ ๋ก์ง์ ์ ๋ฐ์ ์ผ๋ก ๋๋ฃจ ์ฌ์ฉ๋จ
Ex. ๋ณด์
โ๏ธ ํต์ฌ ๊ด์ฌ ์ฌํญ(Core concern)
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํ ํต์ฌ ๋ก์ง(๋น์ฆ๋์ค ๋ก์ง)์ ๋ํ ๊ด์ฌ์ฌ
Ex. ๊ธฐ๋ฅ- ํต์ฌ ๊ด์ฌ ์ฌํญ์ ๋ฐ๋๋๋ ๊ฐ๋ ์ผ๋ก ๊ณตํต ๊ด์ฌ ์ฌํญ์ ๋ถ๊ฐ์ ์ธ ๊ด์ฌ ์ฌํญ์ด๋ผ๊ณ ํํํ๊ธฐ๋ ํจ
[์ฐธ๊ณ ] https://velog.io/@geesuee/Spring-AOPAspect-Oriented-Programming%EC%99%80-%ED%94%84%EB%A1%9D%EC%8B%9C
์ฝ๋์ ๊ฐ๊ฒฐ์ฑ ์ ์ง
๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น์ ๋ง๋ ์ฝ๋ ๊ตฌํ
๊ณตํต ์ฝ๋์ ์ฌ์ฌ์ฉ
( ํต์ฌ ๋ก์ง์ ๊ณตํต ๊ธฐ๋ฅ๋ค์ด ์ฌ๊ธฐ์ ๊ธฐ ๋ณด์ด๋ฉด ์ฝ๋๋ ๋ณต์กํด์ง๊ณ ์ ์ง/๋ณด์ ๋ชจ๋ ํ๋ฆ )
Ex. ํด๋์ค ๋ด๋ถ์ ํธ๋์ญ์
์ฒ๋ฆฌ๋ฅผ ์ํ rollback(), commit() ๋ฑ๊ณผ ๊ฐ์ ์ฝ๋๋ ๋ชจ๋ ์ฌ๋ผ์ง๊ณ ๋น์ฆ๋์ค ๋ก์ง๋ง ์ฒ๋ฆฌํ๋ ์ฝ๋๋ง ๋จ๊น
๊ทธ๋ฆฌ๊ณ ์ด ํธ๋์ญ์
์ฒ๋ฆฌ๋ ์ ๋
ธํ
์ด์
์ ๋ถ์ฌ Spring ๋ด๋ถ์์ AOP ๊ธฐ๋ฅ์ ํตํด ํธ๋์ญ์
์ ์ฉํ๋๋ก ํจ
โ ์์ ์ด ๊ตฌํํ ์ฝ๋๋ฅผ ๊น๋ํ๊ณ , ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ์ ์งํ๋ ค๊ณ ๋์ ์์ด ๋ ธ๋ ฅํด์ผํจ
โ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฌ๊ณ
์ผ๊ด๋ ์๋น์ค ์ถ์ํ
โ๏ธ ์ถ์ํ
โ ์ด๋ค ํด๋์ค์ ๋ณธ์ง์ ์ธ ํน์ฑ๋ง ์ถ์ถํด์ ์ผ๋ฐํ ํ๋ ๊ฒ
( ์ถ์ ํด๋์ค / ์ธํฐํ์ด์ค ์ฌ์ฉ )
์ถ์ํ๋ ์์ ํด๋์ค๋ฅผ ์ผ๊ด๋๊ฒ ๋ฐ๋ผ๋ณด๋ฉฐ ํ์ํด๋์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ
( ์์ํด๋์ค๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ด์ฉํ๋ ํ๋์ ์๋น์ค )
Ex. ํด๋ผ์ด์ธํธ(main())๊ฐ ํ์ ํด๋์ค๋ฅผ ์ด์ฉํ ๋, ์ง์ ์ ์ผ๋ก ์ด์ฉํ์ง ์๊ณ ์์ ํด๋์ค ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์ด์ฉ(๋์จํ ๊ฒฐํฉ) )
โ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๋ ๋ญ๊ฐ ์์ ๋์๋์ง ๋ชฐ๋ผ๋ ๋จ
์๋น์ค์ ๊ธฐ๋ฅ์ ์ ๊ทผํ๋ ๋ฐฉ์ ์์ฒด๋ฅผ ์ผ๊ด๋๊ฒ ์ ์งํ๋ฉด์, ๊ธฐ์ ์์ฒด๋ฅผ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ
ํ๊ฒฝ์ ๋ณํ์ ์๊ด ์์ด ์ผ๊ด๋ ๋ฐฉ์(ํ๊ฒฝ)์ผ๋ก ์ ๊ณตํ๋ ์ถ์ํ ๊ตฌ์กฐ
โ ์ธํฐํ์ด์ค์์ ์ถ์ ๋ฉ์๋๋ฅผ ๋ง๋ค ๋ฏ, ์ถ์ํ๋ ์๋น์ค๋ฅผ ํตํด ํ๊ฒฝ์ด ๋ฐ๋์ด๋ ํฉ์ฉํ ์ ์์ด์ผํจ
โ DI๋ฅผ ํ์ฉํด ์ฌ์ฉํ ๊ฐ์ฒด๋ง ๋ฐ๊ฟ์ฃผ๋๋ก ๊ตฌํ
๋ญ๊ฐ ์์ง๊น์ง๋ ์ ๋จธ๋ฆฟ์์ ์ ๋ฆฌ๊ฐ ๋์ง ์๋๋ค
๋จธ๋ฆฌ๊ฐ ์ด์ง,,
ํ์ง๋ง ๊ทธ๋๋ ๊ฐ ๊ฐ๋
๋ค์ ๋ชฉ์ ์ ๋๋ ์ดํด๋ฅผ ํ์ผ๋ ์์ผ๋ก ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฐฐ์ฐ๋ฉด์ ์ฐจ์ฐจ ๋์ฑ ์ดํดํด ๋๊ฐ ๊ฒ์ด๋ค