๋ง์ ์ด๋ณด ๊ฐ๋ฐ์๋ ์กฐ๋ง๊ฐ Java๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์ธ Spring์ ์ ํ๊ฒ ๋ฉ๋๋ค. Spring์ ์ฌ์ฉํ์ฌ ์ํํ ์ ์๋ ์ฃผ์ ์์
์ ๊ฐ๋ฐ์๋ฅผ ์ํ J2EE ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ๋จ์ํํ๋ ๊ฒ์
๋๋ค. Spring์ ์ฌ์ฉํ ๋ ๊ฐ๋ฐ์๊ฐ ์ป์ ์ ์๋ ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด "๋น์ด ์๋" ๊ณต๊ฐ์ ์ํ๋ ๊ฒฝ์ฐ Spring์ ํฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋์์ ํ๋ ์์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ๊ท์น์ ์ง์ ํฉ๋๋ค. ์ฆ, ๊ธฐ๋ฅ์ ๊ตฌ์ถํด์ผ ํ๋ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ๊ฐ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ค์ ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ฉ๋๋ค. Spring์๋ ํน์ ๊ธฐ๋ฅ(SpringMVC, Spring Security, SpringData ๋ฑ)์ ๋ง์ถฐ์ง ๋ง์ ํ์ ํ๋ก์ ํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ ์ฒด ๋ชฉ๋ก์ https://spring.io/projects ์์ ๋ณผ ์ ์์ผ๋ฉฐ , ์ฌ๊ธฐ์์ ๊ฐ๋ฐ์๋ ์์ ์๊ฒ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ ์ ํํ ์ ์์ต๋๋ค. ๋๋จธ์ง๋ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ๋ชจ๋์ ์์น์ ๋๋ค.
- Spring ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฒด๋ ์ข ์์ฑ ์ฃผ์ ์ ์ฌ์ฉํ์ฌ ๋์จํ๊ฒ ๊ฒฐํฉ๋ฉ๋๋ค. Spring์ ๋ชฉํ ์ค ํ๋๋ ์ผ๋ถ ๊ฐ์ฒด์ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํ ์ข ์์ฑ์ ๊นจ๋ ๊ฒ์ด์์ต๋๋ค. ์ค๋ ์ด๋ ๋ฌด์์ ๋๊น? ์ด๋ Object1์ด ๋ค๋ฅธ Object2์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ฆ, Object1์ ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ Object2์ ์ข ์๋ฉ๋๋ค. ๊ทธ๋ ์ ์์กดํฉ๋๊น? ๊ทธ๋ฌ๋ Object2 ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋๊น์ง Object1์ ํด๋น ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์ค๋ ์ ๋๋ ๋ฐฉ๋ฒ? ์์ฑ์๋ ์ค์ ์๋ฅผ ํตํด Object2 ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ Object1 ๊ฐ์ฒด์ "์ฃผ์ "ํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ์ค์ ๋ก ์ข ์์ฑ ์ฃผ์ ์ ๋๋ค. Spring์์๋ ๊ฐ์ฒด๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์ด์ผ ํ๋ฏ๋ก ํ์ ๊ตฌํ ๋์ฒด๋ฅผ ์ํด ์ข ์์ฑ์ด ์ธํฐํ์ด์ค ํํ๋ก ์ฃผ์ ๋๋ค๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ Spring ์ปจํ ์ด๋์ ์์๋์์ต๋๋ค. ์ด๊ฒ์ด ์ ์ด ์ญ์ (IoC)์ ๋๋ค. ํ์ํ ์ข ์์ฑ(๊ฐ์ฒด)์ ์ธ์คํด์คํํ๋ ๊ธฐ๋ฅ์ ์ปจํ ์ด๋๋ก ์ ์กํ๋ ๊ฒ์ ๋๋ค. ์ด ๋ชจ๋ ์ง๋ฌธ์์ ๊ฐ๋ฐ์์ ์ญํ ์ ๋ฌด์์ ๋๊น? Spring ์ปจํ ์คํธ์ ์ํ๋๋ก ๊ตฌ์ฑ ์์๋ฅผ ์ ์ธํฉ๋๋ค. ๊ฐ๋จํ ๋งํด์ Spring์ ์ปจํ ์คํธ๋ ๋ชจ๋ Bean์ด ์์นํ ๋งต์ ๋๋ค. Bean์ด Spring์ ์ปจํ ์คํธ์ ์๋ค๊ณ ๋งํ ๋ Bean์ด ๋งต์ ์๊ณ Spring์ด ๋งต์์ ์ด๋ฅผ ๊ฐ์ ธ์ค๋ ํค๋ฅผ ์๊ณ ์๋ค๋ ์ ์ ๊ณ ๋ คํ์ญ์์ค. xml ๊ตฌ์ฑ์ด๋ @Component ์ฃผ์์ด ์๋ ํด๋์ค์์ bean์ผ๋ก ํ์๋ ๋ชจ๋ ํญ๋ชฉ์ ์ธ์คํด์คํ๋๊ณ Map<key,bean> ๋งต ํ์์ ๋งต์ ๋ฐฐ์น๋ฉ๋๋ค. ์ปจํ ์ด๋์๋ ๋ชจ๋ ๋น์ "์ ์ฅ"ํ๋ ๋งต์ด ์์ต๋๋ค. (Spring์ ํต์ฌ ๊ฐ๋ ์ ๋น์ด๋ฉฐ ์ด๋ ์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ๋๋ ์ํฐํฐ์ ๋๋ค. ๋น(์ผ๋ฐ ํด๋์ค)์ด ๊ด๋ฆฌ๋๋ ค๋ฉด ๋น ํด๋์ค์ ์ํด์ผ ํฉ๋๋ค. Spring ์ปจํ ์คํธ.) ๊ทธ๋ฆฌ๊ณ ํ์ํ ๊ฒฝ์ฐ ๊ตฌํ์ ํตํด ์ปจํ ์ด๋๋ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํฉ๋๋ค. map.get(key), ํค๋ ํ๋ ์ ํ์ ๋๋ค.
- Spring์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ์๋ฟ๋ง ์๋๋ผ ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํ ํ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด @Autowired ์ฃผ์์ ์ฌ์ฉํ๋ฉด ๊ตฌ์ฑ ์์๋ฅผ ์๋์ผ๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. @Autowired ์คํ๋ง ์ฃผ์์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ์ค๋ช ํ ์ ์์ต๋๋ค. ์น์ ํ๋ ์น๊ตฌ์ฌ, ์คํ๋ง ์ปจํ ์ด๋์ฌ, ๋ด๊ฐ ์์ ์ ์๋ ๊ฒ์ ํด๋์ค ์ธ์คํด์ค๋ ๊ตฌํ์ด ์๋์ง ํ์ธํ๋ ค๋ฉด ๋น์ด ์๋ ๋งต์ ์ดํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค. ๋ง์ฝ ์๋ค๋ฉด, ์ ๊ฐ ์ ์ธ๋๊ธฐ ์ ์ ํ๋์ ๋งํฌ๋ฅผ ์ฃผ์ธ์. ์๋ ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ฉด ๊ตฌ์ฑ ์์ ์ข ์์ฑ์ ๊ฒฐ์ ํ ๋ ์ฝ๋ ์์ ์ค์ผ ์ ์์ต๋๋ค.
-
Spring์์๋ Bean ์ค์ ์ด ํ๋ก๊ทธ๋จ ์ฝ๋์ ๋ถ๋ฆฌ๋ฉ๋๋ค. ๊ตฌ์ฑ(์ข ์์ฑ ๊ด๋ฆฌ)์ ๋ณ๋์ ํ์ผ๋ก ์ด๋ํ๋ฉด ํ๋ก์ ํธ์ ํ์ ๋ณ๊ฒฝ(๊ตฌํ ๊ต์ฒด)์ด ๋ ์ฌ์์ง๋๋ค.
- ํ ์คํธ ๊ฐ๋ฅ์ฑ์ด ํฅ์๋์์ต๋๋ค. ํด๋์ค๊ฐ DI ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋๋ฉด ํ ์คํธ ์ค์ ์ข ์์ฑ์ ์ฝ๊ฒ ๋์ฒด(๊ฐ์ง ๊ตฌํ์ผ๋ก)ํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋๋ค.
- ์ฃผ์์ ์ฌ์ฉํ์ฌ ์ ์ธ์ ์คํ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋ ์์ ์ค์ ๋๋ค.
- ๋ฐ์ดํฐ ์ก์ธ์ค ๊ธฐ์ , ํธ๋์ญ์ , AOP์์ ์ง์ ๋ฐ ์ฐ์ํ ํตํฉ์ผ๋ก ๊ฐ๋ฐ์ด ๋จ์ํ๋ฉ๋๋ค.
- ์ข์ ๋ฌธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ ๋ ๋ง์ ๋์์ด ๋ฉ๋๋ค.
GO TO FULL VERSION