๐[Spring] Spring ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ .
Spring ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ผ๋ฉฐ, ๊ทธ ์ฃผ์ ๋ชฉ์ ์ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ์ ์์กด์ฑ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ฝ๋์ ๋ชจ๋ํ์ ์ ์ฐ์ฑ์ ๋์ด๋ ๋ฐ ์์ต๋๋ค.
Spring ์ปจํ ์ด๋๋ ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๋ฉฐ, ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ๋์ ๋๋ค.
1๏ธโฃ Spring ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ .
1. ์์กด์ฑ ์ฃผ์ (DI, Dependency Injection) ๊ด๋ฆฌ.
- Spring ์ปจํ ์ด๋๋ ๊ฐ์ฒด ๊ฐ์ ์์กด์ ์ ์๋์ผ๋ก ์ฃผ์ ํด์ค๋๋ค.
- ๊ฐ๋ฐ์๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๊ณ ์ฐ๊ฒฐํ ํ์ ์์ด, ํ์ํ ์์กด์ฑ์ ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- ์ด๋ก ์ธํด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๊ณ , ์์คํ ์ด ๋ ์ ์ฐํด์ง๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ์๋น์ค๋ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์ค์ ํด ์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ์์ฑ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
2. ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ.
- Spring ์ปจํ ์ด๋๋ ๊ฐ์ฒด(Bean, ๋น)์ ์์ฑ, ์ด๊ธฐํ, ์ฌ์ฉ, ์๋ฉธ ๋ฑ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ๊ฐ์ฒด๊ฐ ์ธ์ ์์ฑ๋๊ณ , ์ธ์ ํ๊ดด๋๋์ง๋ฅผ ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด์ ์ํ๋ฅผ ์ผ์ผ์ด ๊ด๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค.
- ์ด๋ ํนํ ์ฑ๊ธํค ๋น์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ฉฐ, ์ ํ๋ฆฌ๊ฒ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ฑ๋ฅ ์ต์ ํ์๋ ๊ธฐ์ฌํฉ๋๋ค.
3. ๋ชจ๋ํ์ ์ฌ์ฌ์ฉ์ฑ.
- Spring ์ปจํ ์ด๋๋ ๊ฐ ๋น(Bean)์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ๋ฏ๋ก ๋ชจ๋ํ๋ ์ฝ๋๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
- ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ด๊ธฐํ ๋ก์ง์ด ๋ถ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก, ๋์ผํ ๋น์ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ํ, ์์กด์ฑ์ ์ฃผ์ ๋ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
4. ํ ์คํธ ์ฉ์ด์ฑ.
- ์์กด์ฑ ์ฃผ์ ์ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋ฉด, ๋จ์ ํ ์คํธ๊ฐ ํจ์ฌ ์ฌ์์ง๋๋ค.
- Spring ์ปจํ ์ด๋๋ ํ ์คํธ ํ๊ฒฝ์์๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, Mock ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํด ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธ๋ถ ์์คํ ์ ์์กดํ์ง ์๊ณ ๋ ๊ฐ ๊ฐ์ฒด์ ๋์์ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
- ์ด๋ ํนํ ์๋ํ ํ ์คํธ์ TDD(Test-Driven Development) ์์ ํฐ ์ฅ์ ์ผ๋ก ์์ฉํฉ๋๋ค.
5. ์ ํ๋ฆฌ์ผ์ด์ ์ค์ ์ ์ผ๊ด์ฑ.
- Spring ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ ์์๋ฅผ ์ผ๊ด๋๊ฒ ์ค์ ํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
- ๋น ์ค์ ์ XML, ์๋ฐ ์ค์ ํด๋์ค, ๋๋ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ์ผ๊ด๋๊ฒ ๊ด๋ฆฌํ ์ ์์ด, ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ ๋ฐฉ์์ด ํ์คํ๋ฉ๋๋ค.
- ์ด๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ค์ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ค์ด๋ ๋ฐ ํฐ ๋์์ ์ค๋๋ค.
6. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ์ฑ ํฅ์.
- Spring ์ปจํ ์ด๋๋ ์์กด์ฑ์ ์ธํฐํ์ด์ค๋ก ์ถ์ํํ๊ณ ๊ตฌํ์ฒด๋ฅผ ์ฃผ์ ํ๊ธฐ ๋๋ฌธ์, ๊ตฌํ์ฒด์ ๋ณ๊ฒฝ์ด ๋งค์ฐ ์ ์ฐํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ธ๋ถ ์๋น์ค์ ํต์ ํ๋ ๋ฐฉ์์ด ๋ฐ๋๋๋ผ๋, ํด๋น ๊ตฌํ์ ๋ง ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ์ฝ๋๋ ์์ ํ์ง ์์๋ ๋๋๋ก ์ค๊ณํ ์ ์์ต๋๋ค.
7. AOP(Aspect-Oriented Programming, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ) ์ง์.
- Spring ์ปจํ ์ด๋๋ AOP๋ฅผ ์ง์ํ๋ฏ๋ก, ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ด๋ จ ์๋ ํก๋จ ๊ด์ฌ์ฌ(๋ก๊น , ํธ๋์ญ์ ๊ด๋ฆฌ, ๋ณด์ ๋ฑ)๋ฅผ ๋ณ๋์ ๋ชจ๋๋ก ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ๋ ๋ชจ๋ํํ ์ ์์ผ๋ฉฐ, ๋น์ฆ๋์ค ๋ก์ง์ด ํก๋จ ๊ด์ฌ์ฌ๋ก ์ธํด ๋ณต์กํด์ง๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
8. ํธ๋์ญ์ ๊ด๋ฆฌ.
- Spring ์ปจํ ์ด๋๋ ํธ๋์ญ์ ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ค์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์๋์ผ๋ก ๊ด๋ฆฌํ ํ์ ์์ด, ์ด๋ ธํ ์ด์ ์ ํตํด ํธ๋์ญ์ ๊ฒฝ๊ณ๋ฅผ ์ ์ํ๊ณ ์๋์ผ๋ก ๊ด๋ฆฌ๋๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- ์ด๋ ํนํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๋ จ๋ ์์ ์์ ์ผ๊ด๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
9. ๊ตญ์ ํ ์ง์.
- Spring ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตญ์ ํ(i18n) ๋ฅผ ์ง์ํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๋ค๊ตญ์ด ์ง์์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฉ์์ง ๋ฒ์ญ ๋ฐ ํฌ๋งทํ ์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
2๏ธโฃ ๊ฒฐ๋ก .
- Spring ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ์ ์์กด์ฑ ์ฃผ์ ์ ์๋ํํ์ฌ, ๋ ๋ชจ๋ํ๋๊ณ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ํ๊ธฐ ์ํจ์ ๋๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ๊ด๋ฆฌ์ ์์กด์ฑ ์ฃผ์ ์ ๋ํ ๋ณต์ก์ฑ์ ์ค์ด๊ณ , ๋น์ฆ๋์ค ๋ก์ง ์ฃผํ์ ์ง์คํ ์ ์์ต๋๋ค.
- ๋ํ, Spring ์ปจํ ์ด๋๋ ํ ์คํธ ์ฉ์ด์ฑ, ์ ์ฐ์ฑ, ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์์ฑ ๋ฑ์ ํฌ๊ฒ ํฅ์์์ผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํจ์จ์ฑ์ ๋์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.