[Spring Framework] ์ Spring์ธ๊ฐ? Spring์ ์์ํ๊ธฐ ์ ์ ์์๋ณด์
์ด๋ฒ ๊ธ์ GDG Spring Framework Study์์ ์ฌ์ฉํ๊ฒ ๋ Spring ๊ธฐ์ ์ ์ฌ์ฉํ๊ธฐ ์ ์ ๊ณตํต์ ์ผ๋ก ์์์ผํ Spring์ ์ญ์ฌ์ ๋ํด์ ์ ์ ์ด์ผ๊ธฐํด๋ณด๋ ค ํ๋ค.
Framework vs Library
์ผ๋จ Spring์ ์ฌ์ฉํ๊ธฐ์ ์ ๋ฌด์์ด Library์ด๊ณ ์ Framework์ ์ ์ฌ์ฉํด์ผ ํ๊ณ ์ด๋ป๊ฒ ํ์ํ๋์ง๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ข๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋จ์ ํ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ๋ค์ ์งํฉ์ ๋งํ๋ค.
Library
์ฐ๋ฆฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก๊ทธ๋๋ฐ์์ ๊ธฐ์กด์ ๋ง๋ค์ด์ง ํจ์๋ฅผ ์ฌํ์ฉํจ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ ์ํ๋ค.
Framework
์ ํ๋ ์์ํฌ๊ฐ ํ์ํ๋์ง๋ ํ ๋จ์ด๋ก ์ ๋ฆฌํ์๋ฉด Choas State -> Reusable State ์ด๋ผ๊ณ ์๊ฐํ๋ค.
๊ฒฐ๊ตญ ํ๋ ์์ํฌ๋ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๋ก ํ๋์ ๋ผ๋๋ฅผ ๋ง๋ค์ด ๋์ ๊ฒ์ผ๋ก ํด์ํ ์ ์๋ค.
Library vs Framework
ํ์ง๋ง ๋จ์ํ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ผ๋๋ฅผ ๊ตฌ์ฑํ๋ ํ์ง ์๋์ ์ฐจ์ด๋ ์๋๋ค.
ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด๋ ๋ฐ๋ก ์ฃผ๋๊ถ์์ ๋์จ๋ค.
ํ๋ ์์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์ Flow๋ฅผ ๊ฐ๋ฐ์๊ฐ ์๋ Container์ ์์ํ๋ ํํ๋ก ์ฌ์ฉ์ด ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ํ์ํ ๊ฐ๋ ์ด ์์๋ ๋ฅ๋์ ์ผ๋ก ์ฌ์ฉํ ๋ฟ์ด์ง๋ง ํ๋ ์์ํฌ๋ ๊ทธ์ ๋ฐ๋๋ก ์ฌ์ฉ์๊ฐ ์์ฑํ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ํ๋ ์์ํฌ์ ์ํด ์ฌ์ฉ๋๋ค.
์ด๋ฐ ์๋ฏธ์์ ๋ค์์ ๋ฐฐ์ฐ๊ฒ๋ ๋ด์ฉ์ธ IoC(Inverse Of Control)์ธ ๊ฐ๋
์ด ๋ฑ์ฅํ๊ณ Spring์ ๋ฐฐ์ธ๋ ์ค์ํ ๊ฐ๋
์ด ๋๋ ๊ฒ์ด๋ค.
์์์ ๋ง ํ๋ฏ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ด๊ฐ ํ์ํ ๋๊ตฌ๋ค์ ์ง์ ํธ์ถํด์ ์ฌ์ฉํด์ผ ํ์ง๋ง ๊ทธ์ ๋ฌ๋ฆฌ ํ๋ ์์ํฌ๋ ์ ํด์ง ๋ฃฐ์ด ์๊ธฐ ๋๋ฌธ์ ๊ทธ ๋งํผ ์ง์ ์ฅ๋ฒฝ์ด ๋๋ค๊ณ ํ๋ค.
ํ์ง๋ง Algorithm์์ ์ฐ๋ฆฌ๋ ํ ๊ฐ์ง ๋ฐฐ์์ด ์์๋ค.
Divided And Conquer, ํด๊ฒฐํ ์ ์๋ ์์ ๊ฒ ๋ถํฐ ํ๋์ฉ ๋๋ ์ ์ ๋ณตํด๋๊ฐ๋ณด์.
์ด์ Spring์ ๋ํด์ ์ด์ผ๊ธฐํ ์ ์์ ์ ๋์ ์์ค์ด ๋์์ผ๋ฏ๋ก Spring์ ๋ํด ์์๋ณด์.
Spring
์ํคํผ๋์์์๋ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ๋์ ์ธ ์น ์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ฌ๋ฌ ์๋น์ค๋ฅผ ์ ๊ณตํ ๊ธฐ์ ์ด๋ผ๊ณ ํ๋ค.
์ด๋ฌํ Spring ํ๋ ์์ํฌ๋ ํ๋์ Target์ด ์๋๋ฐ ๋ฐ๋ก Enterprise project์ด๋ค.
2000๋
๋ ์ด๋ฐ์ Enterprise Project์์๋ 80ํผ์ผํธ์ ์คํจ ํ๋ฅ ์ ์๊ณ ์์๋ค๊ณ ํ๋ค.
Enterprise๊ธ์ ์น ์๋น์ค๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง ์ด์ธ์๋ ํ ์์คํ
๊ณผ์ ์ฐ๊ณ, ๋ถ์ฐ, ํธ๋์ญ์
, ๋ณด์์ ๋ํ Issue๋ฅผ ์ ๋ค๋ค์ผ ํ๊ณ ๊ทธ ๋ถ๋ถ ๋งํผ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ณต์กํด์ง๊ณ ์ฆ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ๋ค.
์ด๋ฌํ ๋ณต์กํจ์ ํด๊ฒฐํ๊ธฐ ์ํด Spring์ DI, AOP, PSA๋ฅผ ์ด์ฉํด์ Enterprise๊ธ์ ํ๋ก์ ํธ๋ฅผ ์ง์ํ๋ค.
๋ํ ์ด๋ฌํ Spring์ ํ๊ตญ์ ์น์ ์ ๋ นํ๊ณ ์๋ค๊ณ ๋ง์ ํน์๋ค์ด ์ด์ผ๊ธฐํ๊ณค ํ๋ค.
์ด์ ๊ด๋ จํด์๋ ์ ์๋ฐ Spring๋ง ๋ฝ๋์? ๊ผญ ๋ฐฐ์์ผ ํ๋์?์ ๊ธ์ ํ์ธํด๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒ์ด๋ค.
๋ค๋ฅธ Framework์ Spring์ ์ฐจ์ด์
์์ฉ๋๋ ๋ง์ Framework์๋ Spring๋ฟ๋ง ์๋๋ผ Python์ง์์ Django, Flask, Tornado๋ฑ์ด ์๊ณ Javascript ์ง์์๋ Express, Next.js, Nuxt.js ๊ทธ๋ฆฌ๊ณ C๊ณ์ด์๋ .NET ํ๋ ์์ํฌ ๋ฑ์ด ์๋ค.
ํ์ง๋ง ๋ง๊ณ ๋ง์ ํ๋ ์์ํฌ์์ ์ ์ฐ๋ฆฌ๋ Spring์ ์ ํํ๋์ง ์์๋ณด์.
์์์๋ ๋ง ํ๋ฏ์ด Spring์ Enterprise๊ธ์ ์ ํฉํ ํ๋ ์์ํฌ๋ผ๊ณ ํ๋ค.
๋ํ๋ฏผ๊ตญ์ Enterprise๊ธ์ ๋๊ธฐ์
์์๋ Spring์ด ์๋ง ์ ์ ํ ์ ํ์ด ์๋๊น ์ถ๋ค.
ํ์ง๋ง ๊ทธ ์ธ๋ฅผ ์ฐจ์งํ๋ ์คํํธ์
๊ธฐ์
์์๋ ๊ตณ์ด Enterprise๊ธ์ ๋ณต์กํจ์ ๋ค๋ฃจ๋ Spring์ด ์ต์ ์ ์ ํ์ ์๋๋ผ๊ณ ๋ค ํ๋ค.
์ ๋ถํฐ์ Django๋ฅผ ๋ฐฐ์๋ณด๊ณ ์ถ์๋ ๋์ ๋น์ทํ ๋
์๊ฐ ์๋ค๋ฉด Why we use django framework์ ๊ฐ์ ์ ์ฅ๊ณ ๋ฅผ ์จ์ผํ๋์ง์ ๋ํด์ ํ์ธํด๋ณด๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค.
Spring ๋ง์ ํน์ด์
Spring์ ํน์ง์ ์๋์ ๊ฐ๋ค.
- ๊ฒฝ๋ ์ปจํ ์ด๋
- ์ ์ด์ ์ญ์
- ์์กด์ฑ ์ฃผ์
- ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ํธ๋์ญ์ ๊ด๋ฆฌ
- MVC Pattern
๋ฑ์ด ์๋ค.
๊ฒฝ๋ ์ปจํ ์ด๋
์๋ฐ ๊ฐ์ฒด๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ค๋ ์ ์ด์ธ์๋ Spring์ ์ผ๋ถ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ชจ๋ Spring์ ํ์๋ก ํ์ง ์๋๋ค.
์๋ฅผ ๋ค์ด Spring MVC์์ด Spring JDBC๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ฑฐ๋, ํ์ํ ์์กด์ฑ๋ค์ Maven์ ์ํด ๊ด๋ฆฌ๋๋ฉฐ ํ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ชจ๋ ๊ฒ์ ๊ฐ์ ธ์์ผ ํ๋ ๊ฒ์ด ์๋๋ผ ํ์ํ ์ผ๋ถ๋ง ๊ฐ์ ธ๋ค ์ธ ์ ์๋ค.
์ฌ์ค์ ๊ฒฝ๋์ด๋ผ๋ ๋จ์ด๋ ์๋์ ์ธ ๊ฐ๋ ์ด ๊ผญ ๋ถ๊ฒ ๋๋ค.
์ฌ๊ธฐ์ Spring์ ๊ฒฝ๋ ์ปจํ ์ด๋๋ Spring๋ง์ ๋ ์ ์ ์ธ ๊ฐ๋ ์ด ์๋๋ผ J2EE์ ๋น๊ต์ ๊ฒฝ๋์ด๋ผ๋ ๋ป์ผ๋ก ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
์ ์ด์ ์ญ์ ๊ณผ ์์กด์ฑ ์ฃผ์
์์์ ๋ง ํ๋ฏ ์ฐ๋ฆฌ๋ ๊ฐ์ฒด์ ์์ฑ, ์๊ฑฐ, ํ์ฅ์ ๋ํ ๋ชจ๋ ๊ฒ์ ๊ด์ฌํ์ง ์์๋ ๋๋ค. ๋จ์ง IoC ์ปจํ ์ด๋์๊ฒ ๊ทธ ๊ถํ์ ์์ํ์ฌ ์ฐ๋ฆฌ๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๋์ฑ ์ง์คํ ์ ์๊ฒ ๋๋ค.
AOP ํ๋ก๊ทธ๋๋ฐ
Aspect Oriented Programming์ด๋ ๋ง ๊ทธ๋๋ก ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ด๋ค.
์ผ๋ฐ์ ์ธ ์น ๊ฐ๋ฐ์์๋ OOP์ ์ธ ํน์ฑ์ ํ์ฉํ์ฌ ๊ฐ๋ฐ์ ํ๊ฒ ๋๋ค.
ํ์ง๋ง OOP ํน์ฑ์ ๊ด์ฌ์ฌ๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ ๊ณณ์ ๋ชจ์ ๋ถ๋ฆฌํ๊ณ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ๊ฒ๋์ด ๋
๋ฆฝ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ๋
์ ๋ปํ์ง๋ง ์ค๋ณต๋ ์ฝ๋๊ฐ ๋ง์์ ธ ๊ฐ๋
์ฑ, ํ์ฅ์ฑ๋ฑ์ด ๋จ์ด์ง๋ ๋ฌธ์ ์ ์ด ์๋ค.
ํ์ง๋ง AOP๋ฅผ ์ด์ฉํ๋ค๋ฉด ๋ฌด๋ถ๋ณํ๊ฒ ์ค๋ณต๋๋ ์ฝ๋๋ฅผ ํ ๊ณณ์ ๋ชจ์ ์ค๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ณ ๊ณตํต๊ธฐ๋ฅ์ ํ ๊ณณ์ ๋ณด๊ดํจ์ผ๋ก ๊ณตํต ๊ธฐ๋ฅ ํ๋๋ฅผ ์์ ํด์ ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ๋ชจ๋ ๊ณตํต ๊ธฐ๋ฅ์ด ์์ ๋๋ ํจ์จ์ฑ์
์์ OOP์ ๊ดํ ๋ฌธ์ ์ ์ ๋ณด์ํ๊ธฐ ์ํด Spring์ AOP๋ฅผ ๋ณด๋ค ๋ AOP ์ค๋ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ์ง์์ ํ๊ณ ์๋ค.
Spring framework Architecture
Spring Framework ์ ๊ตฌ์กฐ๋ ์์ ๊ฐ๋ค.
์ฐ๋ฆฌ๋ Spring Framework์ ๊ตฌ์ฑํ๊ธฐ ์ํด์ ์ ๋ชจ๋ ๊ฐ๋
์ ์์์ผ ํ๋ ๊ฒ์ ์๋๋ค.
ํ ๋น์ Spring์ ๋ง์ ๋์์ ์ฃผ์ ๋ฐฑ๊ธฐ์ ๋์ด ๋ง์ํ์๊ธธ ํ ๋น์ Spring ๊ทธ๋ ๊ฒ ๋ณด์ง ๋ง์ธ์์ ๋์์์ ์ฐธ๊ณ ํ๋ฉด
Spring์ ๋ชจ๋ ์๋ ค๊ณ ํ๋ ๊ฒ ๋ณด๋ค ๋ด๊ฐ ํ์ํ ๋ชฉ์ ์ ๋ง๊ฒ ์์์ผ ํ๋ค.
๋ผ๊ณ ํ์ จ๋ ๋ง์ ๋์ํ๋ค.
๋ง์น๋ฉฐ
Java๋ฅผ ์
๋ฌธํ๊ณ ์น์ ๋ง๋ค์ด๋ณด๊ณ ์ถ๋ค๋ ์๊ฐ์ Spring์ ์ฒ์ ๊ณต๋ถํ๊ธฐ ์ํด์ ๋๋ ๋ฌด์์ ๊ฐ์๋ฅผ ์์๋ค.
ํ์ง๋ง ๊ณต๋ถ๋ฅผ ํ๋ฉฐ ํญ์ ๋๊ผ๋ ์ ์ด ๋ด๋ถ๊ฐ ์ด๋ป๊ฒ ๋์๊ฐ๋์ง๊ฐ ๊ถ๊ธํด์ ธ ๋ต๋ตํจ์ ์์ฐ์ฑ์ด ๋งค์ฐ ๋จ์ด์ง ํ์ต์ ํ์์๋ค.
Spring์ ๊ธฐ์
์์ ์ฌ์ฉํ ์ ๋์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ทธ ๋งํผ ์ง์
์ฅ๋ฒฝ์ด ๋์ ๋ถ์ผ๋ผ๋ ๊ฒ์ ๋๊ผ๊ณ ํ์ฌ๋ ๋๋ผ๊ณ ์๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ๋ Divide And Conquer์ด๋ผ๋ ์ปจ์
์ ํญ์ ์ผ๋ํด๋๊ณ ์์ ๊ฒ ๋ถํฐ ํ๋์ฉ ํด๊ฒฐํด ์์ ๊ฒ ๋ผ๋ฆฌ์ ์ ์ ์ ์ฐพ๊ณ ๋ ๋ค๋ฅธ ์ ์ ๊ณผ ์ฐ๊ฒฐ์ํค๋ฉฐ ์ฐ๋ฆฌ์ ์ ๊ฒฝ ๋คํธ์ํฌ๋ฅผ ๋ํ๋๊ฐ์.
Reference
์คํ๋ง ํ๋ ์์ํฌ(์ํคํผ๋์)
ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด์ webclub๋์ tistory
Why Framework is required
Why spring framework is popular-DZone
๊ฐ๋ํฌ๋์ Spring์ ์ ์ ๋ฐ ํน์ง