[Spring] ๐ ์ Spring ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋๊ฐ?
Java ํ๋ ์์ํฌ์ ์ข ๋ฅ๋ Hibernate, Struts, Play Framework, Apache Wicket, Spark, Spring ๋ฑ์ด ์์ต๋๋ค.
๊ทธ ์ค Java๋ฅผ ๋ค๋ฃจ๋ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์๋ Spring์ด ์ ๋ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ์ฐ๋ฆฌ๋ Spring ํ๋ ์์ํฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ ๊น์?
Spring ํ๋ ์์ํฌ๊ฐ world's most popular ํ๊ธฐ์?
๐ ์ฐ์ Spring์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ์ ๋ํด์ ์์๋ด ์๋ค.
2002๋ ๋ก๋ ์กด์จ์ ์ํด ์ฑ ์ด ์ถ๊ฐ๋ฉ๋๋ค. ๊ทธ ๋ด์ฉ ์ค EJB์ ๋ฌธ์ ์ ์ ์ง์ ํ๊ณ , EJB ์์ด๋ ์ถฉ๋ถํ ๊ณ ํ์ง์ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์์ ๋ณด์ฌ์ฃผ๋ ์์ ์ฝ๋๊ฐ ์์์ต๋๋ค. ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ฑ ์ ์์ ์ฝ๋๋ฅผ ํ๋ก์ ํธ์ ์ฌ์ฉํ๊ฒ ๋์๊ณ , ์ฑ ์ผ๋ก๋ง ์ ํด์ง๊ธฐ์๋ ์๊น๋ค๋ ์ฃผ๋ณ์ ๊ถ์ ๋ก ์ธํด ์คํ์์ค ํ๋ก์ ํธ๋ก ์ถ์ํ๊ฒ ๋ฉ๋๋ค.
Fortunately Yann stepped up with a suggestion: “Spring”. His reasoning was association with nature (having noticed that I'd trekked to Everest Base Camp in 2000); and the fact that Spring represented a fresh start after the “winter” of traditional J2EE.
Spring Framework: The Origins of a Project and a Name
Apache์ฌ๋จ์ ๋ฐํ์ ๋ฐ๋ฅด๋ฉด Spring ํ๋ ์์ํฌ๋ J2EE๋ฅผ ๋์ฒดํ ํ๋ ์์ํฌ๋ก ์๊ฐ๋๋ฉฐ ์ ํต์ ์ธ J2EE(EJB)๋ผ๋ '๊ฒจ์ธ'์ ๋์ด ์๋ก์ด ์์์ ์๋ฏธํ๋ '๋ด'์ผ๋ก ์๊ฐ๋ฉ๋๋ค.
๐ ๋ง์ ์ฌ๋๋ค์ ์ ํ์ ๋ฐ์ ์ ์์๋ Spring ํ๋ ์์ํฌ์๋ ์ด๋ ํ ์ฅ์ ์ด ์์๊น์?
๊ฒฝ๋ํ (Lightweight)
- Spring์ ๊ฒฝ๋ํ ๋ ํ๋ ์์ํฌ๋ก, ์ฝ 2MB์ ๋ถ๊ณผํฉ๋๋ค. ์ด๋ ์์์ ์ ๊ฒ ์ฌ์ฉํ๊ณ , ๋ ๋น ๋ฅธ ์์ ์๊ฐ์ ๊ฐ์ง๋ฉฐ, ๋์ ํ์ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค. ๋ํ ๋ชจ๋์ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ ์ ์์ด ๋ถํ์ํ ๋ถ๋ถ์ ์ ์ธํ๊ณ ์ฌ์ฉํ ์ ์์ด ํจ์จ์ ์ธ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
DI (Dependency Injection)
- Spring์ DI๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ง์ํฉ๋๋ค. DI๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปดํฌ๋ํธ ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ์ด ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ ๋๋ค. ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ ์ฃผ์ ์ ํตํด ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
AOP (Aspect Oriented Programming)
- Spring์ AOP๋ฅผ ์ง์ํฉ๋๋ค. AOP๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ ์ค๋ณต๋๋ ๊ธฐ๋ฅ์ ์ผ๊ด์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ์ฝ๋๋ฅผ ๋์ฑ ๊น๋ํ๊ณ ์ ์ง๋ณด์๊ฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ก๊น , ๋ณด์, ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ์ ๊ณตํต ๊ธฐ๋ฅ์ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋ฉด์, ๊ธฐ๋ฅ์ ์ธ ๋ก์ง๊ณผ ๋ถ๋ฆฌํ์ฌ ๊ตฌํํ ์ ์์ต๋๋ค.
MVC ์น ํ๋ ์์ํฌ
- Spring์ MVC ์น ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ ์ ์๋๋ก ๋์์ค๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ ์ ์์ผ๋ฉฐ, ํ์ฅ์ฑ์ด ๋์์ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํตํฉ (Integration)
- Spring์ ๋ค์ํ ํตํฉ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค. JMS, JDBC, JPA, JMX, RMI ๋ฐ ๋ค์ํ ์น ์๋น์ค ๊ธฐ์ ์ ์ง์ํ๋ฉฐ, ์ฝ๊ฒ ํตํฉํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ๊ฐ์ ์์คํ ๊ณผ ๋ฐ์ดํฐ ์์ค๋ฅผ ํตํฉํ์ฌ ๋์ ํ์ฅ์ฑ์ ๊ฐ์ง ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๋ณด์ (Security)
- Spring์ ๋ณด์ ๊ธฐ๋ฅ๋ ์ง์ํฉ๋๋ค. Spring Security๋ ์ธ์ฆ, ๊ถํ ๋ถ์ฌ, ์ธ๊ฐ ๋ฐ SSO (Single Sign-On)
Spring ํ๋ ์์ํฌ๋ ๊ธฐ๋ฅ์ด ๋ง์๋งํผ ํ๊ฒฝ์ค์ ์ด ๋ณต์กํ ํธ์ ๋๋ค.
์ด์ ์ด๋ ค์์ ๋๋ผ๋ ์ฌ์ฉ์๋ค์ ์ํด ๋์จ ๊ฒ์ด Spring์ ๋ ์ฝ๊ฒ ์ด์ฉํ๊ธฐ ์ํ ๋๊ตฌ Spring Boot ํ๋ ์์ํฌ์ ๋๋ค.
Spring Boot๋ ๋งค์ฐ ๊ฐ๋จํ๊ฒ ํ๋ก์ ํธ๋ฅผ ์ค์ ํ ์ ์๊ฒ ํ์ฌ, Spring ๊ฐ๋ฐ์ ์กฐ๊ธ ๋ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ํ๊ณ ์์ต๋๋ค.
๐ Spring Boot ํ๋ ์์ํฌ ์ฌ์ฉ ์ฅ์
- Dependency ํธ์
- Configuration
- AutoConfiguration (@SpringBootApplication)
- ํธ๋ฆฌํ ๋ฐฐํฌ (Tomcat ์ด๋ Jetty ๊ฐ์ ๋ด์ฅ WAS๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ jar ํ์ผ๋ก ๊ฐํธํ๊ฒ ๋ฐฐํฌ)
๐ ์ ๋ฆฌ๋ฅผ ํ์๋ฉด ์ Spring ํ๋ ์์ํฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ ๊น์?
๊ธฐ์กด ์๋ฐ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ๋ค(EJB, JavaEE)๋ณด๋ค ํ ์คํธํ๊ธฐ ์ฝ๊ณ , ์ฌ์ฉํ๊ธฐ ๊ฐ๋จํ๋ฉฐ, ์ ์ฐํ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ก๊ณ , ํธ๋ ๋๋ฅผ ์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋ฐ ํ๋ ์์ํฌ ์ค Spring ํ๋ ์์ํฌ๋ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ ํธํ๋ ์ธ๊ธฐ ์๋ ํ๋ ์์ํฌ ์ค ํ๋์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ค๋ ๋ง์ ๊ธฐ๋ฅ๊ณผ ์ ์ฉํ ๋๊ตฌ๋ค์ ์ ๊ณตํฉ๋๋ค.
๋ฐ๋ผ์ ์ต๊ณ ์ธ ํ๋ ์์ํฌ๋ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ, ๊ฐ๋ฐ์๋ค์ ๊ธฐ์ ์์ค, ๊ธฐ์ ์ ๋น์ฆ๋์ค ๋ชจ๋ธ ๋ฑ์ ๊ณ ๋ คํ์ฌ ๊ฒฐ์ ๋ ์ ์์ต๋๋ค.