๐ก ์คํ๋ง ํ๋ ์์ํฌ๋ ์๋ฐ ํ๋ซํผ์ ์ํ ์คํ ์์ค ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ๋ก์ ๊ฐ๋จํ ์คํ๋ง์ด๋ผ๊ณ ๋ ํ๋ค.
๋์ ์ธ ์น ์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ฐ์ง ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
๋ํ ๋ํ๋ฏผ๊ตญ ๊ณต๊ณต๊ธฐ๊ด์ ์น ์๋น์ค ๊ฐ๋ฐ ์ ์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์๋ ์ ์์ ๋ถ ํ์คํ๋ ์์ํฌ์ ๊ธฐ๋ฐ ๊ธฐ์ ๋ก์ ์ฐ์ด๊ณ ์๋ค.Spring ๊ณต์ ์ฌ์ดํธ

๐ก
Spring Core Container๋ ์คํ๋ง์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๋ฉฐ ์ค์ํ ๋ชจ๋ ์ค ํ๋์ด๋ค. ์ด ๋ชจ๋์ ์คํ๋ง์์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ค. ์คํ๋ง์DI(Dependency Injection)๊ณผIoC(Inversion of Control)๊ฐ๋ ์ด ๊ตฌํ๋์ด ์๋ค. ์ด๋ฅผ ์ด์ฉํ์ฌ ์ฝ๋์์ฌ์ฌ์ฉ์ฑ๊ณผ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์๋ค.
๐ก
AOP๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์์ ์ฝ๋ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค. ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค. ์คํ๋ง์์๋ AOP๋ฅผ ์ด์ฉํด ๋ก๊น , ํธ๋์ญ์ , ๋ณด์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
AspectJ์์ ํตํฉ์ ์ ๊ณตํ๋ค.Instrumentation์ ์๋ฐ ํ๋ก๊ทธ๋จ์ ๋์์ ๊ด์ฐฐํ๊ณ ์กฐ์ํ๋ ๊ธฐ์ ์ด๋ค. ์คํ๋ง์์๋ Instrumentation์ ์ด์ฉํด ํด๋์ค ๋ก๋ฉ, ๋ฉ์๋ ์คํ ๋ฑ์ ์์
์ ์ถ์ ํ๊ณ ๋ณ๊ฒฝํ ์ ์๋ค.๐ก
JDBC๋ Java์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ ์ ์๋ API์ด๋ค. JDBC๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ฉ์๋์ ํด๋์ค๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ฅผ ํตํด Java ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๐ก
ORM์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ์ถ์ํํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ด๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๊ฐ์ฒด๋ฅผ ์ง์ ๋ค๋ฃจ๋ฉด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ์ํ ์ ์๋ค. ORM ํ๋ ์์ํฌ๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ๋ด๋นํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์คํํ๋ ๋ฑ์ ์์ ์ ๋์ ์ํํ๋ค.
๐ก
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ ๋จ์์ด๋ค. ์ฌ๋ฌ ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด๋ฉด, ๋ชจ๋ ์ฟผ๋ฆฌ๊ฐ ์ฑ๊ณตํ๋ฉด ๋ณ๊ฒฝ ๋ด์ฉ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋๊ณ , ํ๋๋ผ๋ ์คํจํ๋ฉด ๋ณ๊ฒฝ ๋ด์ฉ์ด ์ทจ์๋๋ค. ์ด๋ฐ ํธ๋์ญ์ ์ ๋ณด๋ค ์ฝ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์คํ๋ง์์๋ํธ๋์ญ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด ์ ์ธ์ ํธ๋์ญ์ ์ฒ๋ฆฌ, ํ๋ก๊ทธ๋จ์ ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ์ ํ ์ ์์ผ๋ฉฐ, ํธ๋์ญ์ ์์ฑ์ XML์ด๋ ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด ์ค์ ํ ์ ์๋ค.
OXM(Object XML Mapping)์ ์๋ฐ ๊ฐ์ฒด์ XML ๋ฌธ์ ๊ฐ์ ๋งคํ์ ์ง์ํ๋ ๋ชจ๋์ด๋ค. ๊ฐ๋ฐ์๋ XML ๋ฌธ์๋ฅผ ์ง์ ์์ฑํ ํ์ ์์ด, ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ XML ๋ฌธ์๋ฅผ ์์ฑํ๊ณ ์ฝ์ ์ ์๋ค.Java Messaging Service(JMS)๋ ์๋ฐ์์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ API์ด๋ค. ์ด API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ์ฐ ์์คํ
์์ ๋ฉ์์ง๋ฅผ ๊ตํํ ์ ์๋ค. JMS๋ ๋ฉ์์ง ์ ์ก๊ณผ ์์ ์ ์ํ ์คํ๊ณผ ๋ฉ์์ง์ ์์ฑ์ ์ ์ํ๊ธฐ ์ํ API๋ฅผ ์ ๊ณตํ๋ค. ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ชฝ์์๋ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ณ ๋ชฉ์ ์ง๋ฅผ ์ง์ ํ ๋ค์, JMS Provider๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค. ๋ฉ์์ง๋ฅผ ๋ฐ๋ ์ชฝ์์๋ ๋ฉ์์ง๋ฅผ ์์ ํ๊ณ ์ฒ๋ฆฌํ๋ค. JMS๋ ๋๋ถ๋ถ์ ๋ฉ์์ง ์งํฅ ๋ฏธ๋ค์จ์ด(MOM)์์ ์ฌ์ฉ๋๋ค.๐ก
Servlet์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ ์คํ๋๋ ์๋ฐ ํด๋์ค์ด๋ค. ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ์๋ต์ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ค. Servlet์ JSP(JavaServer Pages)์ ํจ๊ป Java EE(Java Platform, Enterprise Edition)์ Web API๋ฅผ ๊ตฌ์ฑํ๋ค. ์คํ๋ง์์๋ Servlet API๋ฅผ ์ด์ฉํ์ฌ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ค.
๐ก
Spring Web MVC๋ ์คํ๋ง์์ ์ ๊ณตํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ MVC ํจํด ๊ตฌํ ๋ชจ๋์ด๋ค. ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋, ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํ๋ฉฐ ํ์ด์ง ์ด๋์ ๊ด๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ, ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ํ๋ฉด์ ์ถ๋ ฅํ๋ ๋ทฐ, ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ ๋ชจ๋ธ๋ก ๊ตฌ๋ถํ์ฌ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ MVC ํจํด์ด๋ผ๊ณ ํ๋ค. ๋๋ถ๋ถ์ ์น ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ MVC ํจํด์ ๊ตฌํ์ฒด์ด๋ฉฐ, ์คํ๋ง์์๋ ์ด๋ฅผ ์ง์ํ๋ค. Spring Web MVC๋ ์ด๋ฌํ ์ปจํธ๋กค๋ฌ, ๋ทฐ, ๋ชจ๋ธ์ ๊ฐ๋ฐํ๋ ๋ฐ ๋์์ ์ฃผ๋ฉฐ, ํนํ ์ ์ฐํ URL ๋งคํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ URL๊ณผ ์ปจํธ๋กค๋ฌ๋ฅผ ๋งคํ์ํค๋ ์์ ์ ์ฝ๊ฒ ์ํํ ์ ์๋ค.
Spring WebFlux๋ ์คํ๋ง 5์์ ์ถ๊ฐ๋ ๋ชจ๋๋ก, ๋น๋๊ธฐ ์น ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ํด Reactive Streams๋ฅผ ์ง์ํ๋ ๋ชจ๋์ด๋ค. ๊ธฐ์กด์ Spring Web MVC์๋ ๋ฌ๋ฆฌ, Servlet API์ ์์กดํ์ง ์๊ณ , Netty, Undertow, Servlet 3.1+ ์ปจํ
์ด๋์ ๊ฐ์ ๋ค์ดํฐ๋ธ ๋ฆฌ์กํฐ๋ธ ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ ์ ์๋ค. Spring WebFlux๋ Reactor๋ฅผ ์ด์ฉํ์ฌ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋์ ์ฒ๋ฆฌ๋๊ณผ ํ์ฅ์ฑ์ ์ ๊ณตํ๋ค.WebSocket์ HTTP์ ๋ฌ๋ฆฌ ์๋ฐฉํฅ ํต์ ์ ์ง์ํ๋ ํ๋กํ ์ฝ์ด๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํ๋ค. ์คํ๋ง์์๋ ์น ์์ผ์ ์ง์ํ๊ธฐ ์ํด Spring Websocket ๋ชจ๋์ ์ ๊ณตํ๋ค. Spring Websocket ๋ชจ๋์ STOMP(Subscribable-Text-Oriented Messaging Protocol) ํ๋กํ ์ฝ์ ์ด์ฉํ์ฌ WebSocket์ ๊ตฌํํ๋ค. STOMP๋ WebSocket์ ์ด์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉ๋๋ ๋ฉ์์ง ํ๋กํ ์ฝ์ด๋ค. Spring Websocket ๋ชจ๋์ ๋ฉ์์ง ๋ธ๋ก์ปค์ ์ฐ๋ํ์ฌ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ๋ธ๋ก์ปค๋ฅผ ์ด์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ๋ฐ์ ์ ์๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ค์์ ์ฌ์ฉ์ ๊ฐ์ ์ค์๊ฐ ์ฑํ
, ๊ฒ์ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.Portlet์ ์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ชจ๋์ด๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๋ก๋๋๋ค. Portlet์ ์ผ๋ฐ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋ฌ๋ฆฌ, ํน์ Portlet ์ปจํ
์ด๋์์ ์คํ๋์ด์ผ ํ๋ฉฐ, Portlet ์ปจํ
์ด๋๋ ์น ์๋ฒ์์ ๋ถ๋ฆฌ๋์ด ์คํ๋๋ค. Spring Portlet MVC๋ Spring MVC์ ๋น์ทํ ๋ฐฉ์์ผ๋ก ๋์ํ๋ฉฐ, Portlet ์ปจํ
์ด๋์์ ์คํ๋๋ Portlet ์ปจํธ๋กค๋ฌ, ๋ทฐ, ๋ชจ๋ธ์ ๊ฐ๋ฐํ ์ ์๋ค.JUnit ๋๋ TestNG๋ฅผ ์ฌ์ฉํ์ฌ Spring ๊ตฌ์ฑ ์์์ ๋จ์ ํ
์คํธ ๋ฐ ํตํฉ ํ
์คํธ๋ฅผ ์ง์ํ๋ค.Groovy๋ JVM์์ ์คํ๋๋ ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ค. Java์ ์๋ฒฝํ๊ฒ ํธํ๋๋ฉฐ, Java์ ๊ฐ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด์๋ ๋ณด๋ค ๊ฐ๊ฒฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค. Groovy๋ Gradle ๋ฑ์ ๋น๋ ํด์์ ๋๋ฆฌ ์ฌ์ฉ๋์ด, Java ๊ฐ๋ฐ ํ๋ก์ธ์ค์์ ์์ฃผ ์ฌ์ฉ๋๋ค.Kotlin์ JVM์์ ์คํ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก, ์๋ฐ์ ์๋ฒฝํ๊ฒ ์ํธ์ด์ฉ์ด ๊ฐ๋ฅํ๋ค. ์๋ฐ๋ณด๋ค ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ๊ณผ ๋๋ค ํํ์, ๋ ์์ ์ฑ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ผ ์ ์๋ค. ์คํ๋ง์์๋ Kotlin์ ๊ณต์์ ์ผ๋ก ์ง์ํ๋ฉฐ, ์คํ๋ง ๋ถํธ์์๋ Kotlin์ ์ด์ฉํ ๊ฐ๋ฐ์ ์ฝ๊ฒ ํ ์ ์๋ค.J2EE(Java 2 Platform, Enterprise Edition)์ 1999๋
์ ๋ฐํ๋ ์๋ฐ ๊ธฐ๋ฐ์ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ํ์ค์ด๋ค. J2EE๋ ๋ค์ํ ๊ธฐ์ ๊ณผ API๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ์ด๋ค์ ์กฐํฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
, ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์
, ๋ถ์ฐ ์ปดํจํ
๋ฑ์ ๊ฐ๋ฐํ ์ ์๋ค. J2EE๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, EJB(Enterprise JavaBeans)์ ๊ฐ์ ๊ธฐ์ ์ ์ด์ฉํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ ์ ์๋ค. ํ์ง๋ง J2EE๋ ๋งค์ฐ ๋ณต์กํ๊ณ , ์๋ฒ ํ๊ฒฝ์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ๋์ ์ฑ๋ฅ์ ๋ฐํํ์ง ๋ชปํ๋ ๋ฌธ์ ์ ์ด ์๋ค. ์ด์ ๋ํ ๋์์ผ๋ก ๋ฑ์ฅํ ๊ฒ์ด Spring์ผ๋ก, Spring์ J2EE์ ๋ณต์ก์ฑ์ ์ค์ด๊ณ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ์ง์ํ๋ค.
| SpringFramework ๋ฒ์ | ์ถ์์ผ | ํน์ง |
|---|---|---|
| 1.0 | 2004๋ | ๊ฒฝ๋ ์ปจํ ์ด๋, AOP, JDBC ์ถ์ํ, ํธ๋์ญ์ ๊ด๋ฆฌ ๋ฑ์ ๊ธฐ๋ฅ ์ ๊ณต |
| 2.0 | 2006๋ | AspectJ ํตํฉ, XML ๋ค์์คํ์ด์ค, ์๋ฐ 5 ์ง์ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 2.5 | 2007๋ | ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ๊ตฌ์ฑ์์ ์ค์บ, OXM(Object-XML Mapping) ๋ชจ๋, JPA(Java Persistence API) ์ง์ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 3.0 | 2009๋ | Java SE 5 ์ด์ ์ง์, RESTful ์น ์๋น์ค ์ง์, ์๋ฐ ๊ตฌ์ฑ ์ด๋ ธํ ์ด์ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 3.1 | 2011๋ | ์๋ฐ 7 ์ง์, ์บ์ ์ถ์ํ, ์คํ๋ง MVC ํ ์คํธ ํ๋ ์์ํฌ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 3.2 | 2012๋ | Java SE 6 ์ด์ ์ง์, ์๋ฐ ๊ธฐ๋ฐ์ ์ค์ ํด๋์ค ์ง์, ํ ์คํธ ์ปจํ ์คํธ ํ๋ ์์ํฌ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 4.0 | 2013๋ | ์๋ฐ 8 ์ง์, WebSocket, JMS 2.0, HTML5 ์ง์ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 4.1 | 2014๋ | ์๋ฐ 8์ ๋๋ค ํํ์ ์ง์, ์บ์ ์ถ์ํ ๊ฐ์ , Groovy ์คํฌ๋ฆฝํธ ์์ฑ์ ์ํ ์คํฌ๋ฆฝํธ ๋น ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 4.2 | 2015๋ | ์๋ฐ 8์ Date-Time API ์ง์, HTTP Streaming, WebSocket ๊ฐ์ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 4.3 | 2016๋ | ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ ๊ฐ์ , ์บ์ ์ถ์ํ ๊ฐ์ , ๋๋ค ์ง์ ๊ฐ์ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 5.0 | 2017๋ | ์๋ฐ 8 ์ด์ ์ง์, ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ ์ง์, Kotlin ์ง์ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 5.1 | 2018๋ | ๋ฆฌ์กํฐ๋ธ ์น ํด๋ผ์ด์ธํธ, Kotlin ์ฝ๋ฃจํด ์ง์, Spring MVC ๊ฐ์ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 5.2 | 2019๋ | ๋ฆฌ์กํฐ๋ธ ํ ์คํธ ์ง์, ๋ก๊น ์์คํ ๊ฐ์ , OAuth 2.0 ํด๋ผ์ด์ธํธ ๋ฑ์ ๊ธฐ๋ฅ ์ถ๊ฐ |
| 6.0 | 2022๋ | ์๋ฐ 17 ์ด์ ์ง์, XML ์ค์ ์ง์ |

Name : ํ๋ก์ ํธ๋ช
Location : ์ ์ฅ ๊ฒฝ๋กCreate Git repository ์ฒดํฌํ๋ฉด ์๋์ผ๋ก Git Local ์ ์ฅ์๊ฐ ์์ฑ ๋๋ค.Language : JavaBuild system : GradleJDK : 11Gradle DSL : KotlinGroupId : com.ohgiraffersArtifactId : ํ๋ก์ ํธBuild System์ ์ํํธ์จ์ด๋ฅผ ๋น๋ํ๊ณ ํจํค์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ์ด๋ค. ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์์ฐ์ฑ๊ณผ ํจ์จ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ์๋ํ ์์
์ ์ํํ๋ค. ์์ค ์ฝ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ฑ์ ์ฒ๋ฆฌํ๊ณ , ์ปดํ์ผ๋ฌ์ ๋ง์ปค๋ฅผ ํธ์ถํ๋ฉฐ, ํ
์คํธ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ํํ๋ค. ๋ํ์ ์ธ Build System์ผ๋ก๋ Maven, Gradle ๋ฑ์ด ์๋ค.
Maven : Java์ฉ Build System์ผ๋ก, XML ๊ธฐ๋ฐ์ผ๋ก ๋น๋ ์์
์ ์ํํ๋ค. Maven์ ์์กด์ฑ ๊ด๋ฆฌ์ ๋น๋ ๊ณผ์ ์ ํ์คํ๊ฐ ์ ์ด๋ฃจ์ด์ ธ ์๋ค. ๋ํ, ์ค์ ์ ์ฅ์์์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๋ค์ด๋ก๋ ๋ฐ์ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋, ๋น๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๋จ์ ์ด ์๋ค.
Gradle : Java์ฉ Build System์ผ๋ก, Groovy ๊ธฐ๋ฐ์ผ๋ก ๋น๋ ์์
์ ์ํํ๋ค. Gradle์ Maven๋ณด๋ค ๋ ๋น ๋ฅด๊ณ , ์ ์ฐ์ฑ์ด ๋๋ค. ์คํฌ๋ฆฝํธ ์ธ์ด๋ก ์์ฑ๋์ด ์์ด, ๋น๋ ์คํฌ๋ฆฝํธ์ ๊ฐ๋
์ฑ์ด ๋๊ณ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ค. ๋น๋ ๊ณผ์ ์์ ํ์ํ ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์บ์ํด๋์ด ๋น๋ ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.
Groovy๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ Java๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ค. Java์ ๋ง์ฐฌ๊ฐ์ง๋ก JVM(Java Virtual Machine)์์ ๋์ํ๋ฉฐ, Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. Groovy๋ Java์ ๋ฌ๋ฆฌ ์ข ๋ ๊ฐ๊ฒฐํ๊ณ ์ ์ฐํ ๋ฌธ๋ฒ์ ๊ฐ์ง๊ณ ์์ด, Java๋ณด๋ค ์ฝ๋ ์์ฑ์ด ๊ฐํธํ๋ค.Kotlin์ Java๋ณด๋ค ์ฝ๋ ์์ฑ์ด ๊ฐ๊ฒฐํ๊ณ ์์ฐ์ฑ์ด ๋์ผ๋ฉฐ, Null ์์ ์ฑ์ด ๋๋ค๋ ์ฅ์ ์ด ์๋ค. Gradle Kotlin์ Groovy๋ Java๋ก ์์ฑ๋ ์คํฌ๋ฆฝํธ๋ณด๋ค ๊ฐ๋
์ฑ์ด ๋๊ณ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ค.Maven Repository๋ Maven Build System์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฅ์์ด๋ค. Maven์ ์ด ์ ์ฅ์์์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๋ค์ด๋ก๋ ๋ฐ์ ์ฌ์ฉํ๋ค. Maven Central Repository๋ ๊ฐ์ฅ ๋ํ์ ์ธ Maven Repository ์ค ํ๋์ด๋ค. ์ด ์ ์ฅ์์๋ ์๋ง์ Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ๋ฑ๋ก๋์ด ์์ด, ๊ฐ๋ฐ์๋ค์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Maven Central Repository์์ ๊ฒ์ํ์ฌ ์ฌ์ฉํ ์ ์๋ค. Gradle๋ Maven๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด Maven Repository๋ฅผ ์ฌ์ฉํ๋ค.
Maven Repository ์ ์ ์ํ ์ ์๋ค. Maven Repository: Search/Browse/Explore


Gradle DSL : Kotlin ์ ์ ํํ๊ธฐ ๋๋ฌธ์ Gradle(Kotlin) ํญ์ ์ ํํ๋ค.
build.gradle ํ์ผ์ ์ด์ด Maven Repository ์์ ๋ณต์ฌํ ๊ตฌ๋ฌธ์ ๋ถ์ฌ ๋ฃ์ด ์๋์ ๊ฐ์ด ์์ฑํ๋ค.dependencies {
implementation("org.springframework:spring-core:5.3.27")
implementation("org.springframework:spring-context:5.3.27")
implementation("org.springframework:spring-beans:5.3.27")
implementation("org.springframework:spring-expression:5.3.27")
implementation("org.springframework:spring-aop:5.3.27")
implementation("commons-logging:commons-logging:1.2")
...์๋ต
}Load Gradle Change ๋ฒํผ์ ๋๋ฌ dependencies ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์์ํจ๋ค.
โ ํด๋น ํ๋ก์ ํธ์์ ์ฌ์ฉ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋์ผ๋ก ๋ค์ด๋ก๋ ๋๊ณ ํ๊ฒฝ์ ๋ฑ๋ก ๋๋ค.
๐ก Lombok์ ์๋ฐ ํด๋์ค์์ ๋ฐ๋ณต์ ์ผ๋ก ์์ฑ๋๋ getter, setter, toString, ์์ฑ์ ์ฝ๋ ๋ฑ์ ์์ค๋ค์, ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์๋ตํ ์ ์๋๋ก ์ปดํ์ผ ์์ ์ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
@Getter : ํด๋น ๋ฉค๋ฒ ๋ณ์์ ๋ํ getter๋ฅผ ์์ฑํ๋ค.@Setter : ํด๋น ๋ฉค๋ฒ ๋ณ์์ ๋ํ setter๋ฅผ ์์ฑํ๋ค.@ToString : ํด๋น ํด๋์ค์ toString()์ ์๋์ผ๋ก ์์ฑํ๋ค.@EqualsAndHashCode : ํด๋น ํด๋์ค์ equals()์ hashCode()๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ค.@NoArgsConstructor : ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ์์ฑ์๋ฅผ ์์ฑํ๋ค.@AllArgsConstructor : ๋ชจ๋ ๋ฉค๋ฒ ๋ณ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ์์ฑํ๋ค.@RequiredArgsConstructor : final์ด๋ @NonNull์ธ ๋ฉค๋ฒ ๋ณ์๋ง ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ์์ฑํ๋ค.@Data : @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor์ ๋ชจ๋ ์ ์ฉํ ๊ฒ๊ณผ ๊ฐ๋ค.Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ฅผ ์งํํด์ผํ๋ค.
File > Settings ํด๋ฆญPlugins ํด๋ฆญMarketplace ํญ์์ Lombok ๊ฒ์Lombok Plugin์ ์ค์นํ๊ณ IntelliJ๋ฅผ ๋ค์ ์์build.gradle.kts ํ์ผ์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐ
dependencies {
implementation("org.projectlombok:lombok:1.18.26")
annotationProcessor("org.projectlombok:lombok:1.18.26")
...์๋ต
}
build.gradle ํ์ผ์ ์ ์ฅํ๊ณ , IntelliJ์์ Reload Changes ๋ฒํผ์ ๋๋ฅธ๋ค.

์ฌ์ฉํ Lombok ์ด๋ ธํ ์ด์ ์ ํด๋์ค์ import ํ๋ค.
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class MyClass {
private String name;
private int age;
}
Lombok ์ด๋ ธํ ์ด์ ์ ์ ์ฉํ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด, getter, setter, toString ๋ฑ์ ๋ฉ์๋๋ฅผ ๋ณ๋๋ก ์์ฑํ์ง ์์๋ ๋๋ค.
MyClass myClass = new MyClass();
myClass.setName("John");
myClass.setAge(30);
System.out.println(myClass.getName()); // "John" ์ถ๋ ฅ
System.out.println(myClass.getAge()); // 30 ์ถ๋ ฅ
System.out.println(myClass); // "MyClass(name=John, age=30)" ์ถ๋ ฅ