[๊ฐ์ผํ์์ Spring Boot ๊ต์ค] ๋ ๊ฑฐ์ Spring MVC vs Spring Boot, ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ฐ๋ ์ด์ผ๊ธฐ
๐ ๊ฐ์ผํ์์ Spring Boot ๊ต์ค: ๋ ๊ฑฐ์ Spring MVC vs Spring Boot, ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ฐ๋ ์ด์ผ๊ธฐ
์๋ ํ์ธ์! ๊ฐ์ผํ์ @talkit ์ ๋๋ค. ๐
์ง๋ ๊ธ๊น์ง ์ฐ๋ฆฌ๋ MacOS ํ๊ฒฝ์์ ์ฐ์ฌ๊ณก์ ๋์ Java 1.8 ์์ง์ ์น๊ณ , STS4 ์ค์น์ ์ด์ด ๊ฐ๊ฒฉ์ ์คํ๋ง ๋ถํธ(Spring Boot) Hello World ์น ์๋ฒ๋ฅผ ๊ตฌ๋ํ๋ ๋ฐ ์ฑ๊ณตํ์ต๋๋ค! ๋งค๋ฒ ์ต์ํ ์๋์ฐ ํ๊ฒฝ์์๋ง ๊ฐ๋ฐ ์ค์ ์ ํ๋ค๊ฐ, ๋งฅ๋ถ ํฐ๋ฏธ๋์ ๋๋ค๊ธฐ๋ฉฐ ์ค์ตํด ๋ณด๋ ์ฌ์ํ ์๋ฌ๋ฅผ ์ก๋ ๊ฒ๋ ์์ฃผ ์๋ค๋ฅด๊ณ ์ฌ๋ฏธ์๋ค์. ^^
๋จ์ํ ํ๋ฉด์ ๊ธ์ ํ๋๋ฅผ ๋์ฐ๋ HelloWorld ๋จ๊ณ๋ฅผ ๋์ด์๋, ์ด์ ์ค๋ฌด์์ ์ฌ์ฉํ๋ ์ง์ง ๋น์ฆ๋์ค ๋ก์ง(๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋, ์ํคํ ์ฒ ์ค๊ณ ๋ฑ)์ ์ถ๊ฐํ๊ณ ์ถ์ด์ง๋๊ตฐ์. ๊ทธ๋์ ๋ณธ๊ฒฉ์ ์ธ ์ฝ๋ ์์ฑ์ ์์, ๋จธ๋ฆฟ์์ ๋งด๋๋ ๋ช ๊ฐ์ง ๊ทผ๋ณธ์ ์ธ ๊ถ๊ธ์ฆ๋ค์ ์ ๋ฆฌํด ๋ณด์์ต๋๋ค.
- ์ ํต์ ์ธ Spring MVC์ ์์ Spring Boot ์ค์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ๋ฌด์์ด ๋ค๋ฅธ๊ฐ? (๊ทธ ๋ง๋ XML๋ค์ ๋ค ์ด๋๋ก ๊ฐ๋?)
- ์ฌ๋๋ค์ ์ ์ ๋ Spring Boot๋ฅผ ๋๊ณ 'ํด๋ผ์ฐ๋ ์นํ์ (Cloud-Friendly)'์ด๋ผ๊ณ ๋ถ๋ฅด๋๊ฐ?
- ๊ทธ๋ ๋ค๋ฉด ๊ธฐ์กด Spring MVC๋ ๋์ปค(Docker)๋ ์ฟ ๋ฒ๋คํฐ์ค(Kubernetes) ๊ฐ์ ํ๋์ ์ธ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ผ๋ก ์ ํ์ด ๋ถ๊ฐ๋ฅํ๊ฐ?
์ค๋์ ๋ณธ๊ฒฉ์ ์ธ ์ํคํ ์ฒ ์ค๊ณ์ ๋ค์ด๊ฐ๊ธฐ ์ , ์ด ๊ถ๊ธ์ฆ๋ค์ ์์ฃผ ๋ช ์พํ๊ณ ์ฝ๊ฒ ํ์ด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๊ฒ ์ต๋๋ค!
1. Spring MVC vs Spring Boot ์ค์ ์ ์ฐจ์ด: "์ค์ ์ง์ฅ์ ํด๋ฐฉ"
์ ํต์ ์ธ Spring MVC(์: ์ ์์ ๋ถํ๋ ์์ํฌ ๋ฑ)๋ก ๋น์ฆ๋์ค ํ๋ก์ ํธ๋ฅผ ์์ํ๋ ค๋ฉด, ์ฝ๋๋ฅผ ์ง๊ธฐ๋ ์ ์ ์์ฒญ๋ ์์ ํ๊ฒฝ ์ค์ ์ ์ง์น๊ณค ํ์ต๋๋ค.
applicationContext.xml, spring-mvc.xml, context-datasource.xml ๋ฑ ๊ฑฐ๋ํ๊ณ ๋ณต์กํ XML ํ์ผ๋ค์ ๋งค๋ฒ ๋ณต์ฌํด ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
ํ(DBCP)์ ์
ํ
ํ๊ณ , ์ปดํฌ๋ํธ ์ค์บ ๋ฒ์๋ฅผ ์ง์ ํด์ผ ํ์ฃ . ์คํ๋ผ๋ ํ๋ ๋๋ฉด ์ปดํ์ผ ์์ ์ ์ ์๋ ์๊ณ ๋ฐํ์ ์๋ฌ๋ฅผ ๋ฟ์ด๋ด๊ธฐ ์ผ์ค์์ต๋๋ค.
ํ์ง๋ง Spring Boot๋ ์ด ํจ๋ฌ๋ค์์ ์์ ํ ๋ฐ๊ฟจ์ต๋๋ค. ๋ถํธ์๋ ์คํ๋ง ๊ด๋ จ ์ค์ ์ ์ํ XML ํ์ผ์ด ๋จ ํ๋๋ ํ์ ์์ต๋๋ค!
์คํ๋ง ๋ถํธ๋ "์ค์ ๋ณด๋ค๋ ๊ด๋ก(Convention over Configuration)"๋ฅผ ๋ด์ธ์๋๋ค.
- ์๋ ์ค์ (Auto Configuration):
spring-boot-starter-web๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ์๊ฐ, ๋ถํธ๊ฐ ๋ด๋ถ์ ์ผ๋ก "์, ์ด ๊ฐ๋ฐ์๊ฐ ์น ์๋ฒ๋ฅผ ๋ง๋๋๊ตฌ๋!" ํ๊ณ ๋ด์ฅ ํฐ์บฃ ์๋ฒ, JSON ๋ณํ๊ธฐ, ๋ฌธ์ ํํฐ ๋ฑ์ ์์์ ์๋ฐ ์ฝ๋๋ก ์ ํ ํด ์ค๋๋ค. - ํ๋กํผํฐ ์ค์ฌ ์ ์ด: ๊ณผ๊ฑฐ ๋ณต์กํ๋ ๋ฐ์ดํฐ์์ค(DB ์ ์) ์ค์ ์ ์ด์
application.propertiesํ์ผ์ ๋ฑ ์ธ ์ค, ๋๋ผ์ด๋ฒ ์ด๋ฆ๊ณผ URL, ๊ณ์ ์ ๋ณด๋ง ์ ์ด์ฃผ๋ฉด ๋๋ฉ๋๋ค. - ๊ฐ๋ฐ์๋ ์ธํ๋ผ ์ค์ ์ ํ์ ๋บ ํ์ ์์ด ์ค์ง ๋น์ฆ๋์ค ๋ก์ง(Controller - Service - DTO - Mapper)์๋ง 100% ์ง์คํ ์ ์๊ฒ ๋ ๊ฒ์ด์ฃ .
2. Spring Boot๋ ์ 'ํด๋ผ์ฐ๋ ์นํ์ '์ผ๊น?
์ต๊ทผ ์ค๋ฌด ๋ฐฑ์๋ ์ธํ๋ผ์ ๋์ธ๋ AWS ๊ฐ์ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ฐ๋ ์ธ์์์ ์คํ๋ง ๋ถํธ๋ ๋ ๋ณด์ ์ธ ์์น๋ฅผ ์ฐจ์งํ๊ณ ์์ต๋๋ค. ์ ๊ทธ๋ด๊น์?
โ ๋ด์ฅ WAS๋ฅผ ํ์ '๋ ๋ฆฝ ์คํํ JAR' (์ด์์ฑ)
๋ ๊ฑฐ์ Spring MVC๋ ๋น๋ํ๋ฉด WAR ํ์ผ์ด ๋์ต๋๋ค. ์ด ํ์ผ์ ํผ์์ ์คํํ ์ ์๊ณ , ํด๋ผ์ฐ๋ ์๋ฒ๋ง๋ค ์ธ๋ถ ์น ์๋ฒ(Tomcat)๋ฅผ ๋ฐ๋ก ์ค์นํ๊ณ ์ค์ ์ ๋ง์ถ ๋ค์ ๊ทธ ์์ '์ฃผ์
(Deploy)'ํด์ผ ๊ตฌ๋๋ฉ๋๋ค.
๋ฐ๋ฉด, Spring Boot๋ ์น ์๋ฒ(Tomcat)๋ฅผ ์๋ฐ ํจํค์ง ๋ด๋ถ์ ์์ ๋ด์ฅํ๊ณ ์์ต๋๋ค. ๋น๋ํ๋ฉด ์น ์๋ฒ๊ฐ ํฌํจ๋ ๋จ ํ๋์ JAR ํ์ผ์ด ํญ ๋จ์ด์ง๋๋ค. ํด๋ผ์ฐ๋ ์๋ฒ์ ์๋ฐ๋ง ๊น๋ ค ์๋ค๋ฉด java -jar app.jar ๋ช
๋ น์ด ํ ์ค๋ก ์ฆ์ ์ด๋์๋ ๋๊ฐ์ด ๊ตฌ๋๋ฉ๋๋ค. ์ธํ๋ผ ์์กด์ฑ์ด ์ฌ๋ผ์ง ๊ฒ์
๋๋ค.
โก ์๋์ ์ธ ๊ตฌ๋ ์๋์ ๊ฐ๋ฒผ์ (์คํ ์ค์ผ์ผ๋ง ์ต์ ํ)
ํด๋ผ์ฐ๋์ ํต์ฌ์ ์ฌ์ฉ์๊ฐ ๋ชฐ๋ฆด ๋ ์๋ฒ๋ฅผ ์์๊ฐ์ ์์ญ ๋๋ก ๋๋ฆฌ๋ ์คํ ์ค์ผ์ผ๋ง(Auto Scaling)์
๋๋ค. ๋ ๊ฑฐ์ ์์คํ
์ ํฐ์บฃ์ ์ผ๊ณ WAR ์์ถ์ ํ๊ณ ๋น๋ํ XML์ ์ฝ๋๋ผ ์๋ฒ๊ฐ ์ค๋น๋๋ ๋ฐ ์์ญ ์ด์์ ์๋ถ์ด ๊ฑธ๋ ธ์ต๋๋ค.
ํ์ง๋ง ์คํ๋ง ๋ถํธ๋ ๋ถํ์ํ ์ธํ๋ผ ๊ตฌ์กฐ๋ฅผ ๊ฑท์ด๋ด๊ณ ์๋ฐ ์ฝ๋๋ก ์ฆ์ ๊ธฐ๋ํ๋ฏ๋ก ๊ตฌ๋ ์๋๊ฐ ๊ทน๋๋ก ๋น ๋ฆ
๋๋ค. ํด๋ผ์ฐ๋๊ฐ ๋ช
๋ นํ๋ ์ฆ์ ํธ๋ํฝ์ ๋ฐ์๋ผ ์ค๋น๋ฅผ ๋ง์นฉ๋๋ค.
โข ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ(Actuator) ๊ธฐ๋ณธ ๋ด์ฅ
์๋ง์ ์๋ฒ๊ฐ ๋ถ์ฐ๋์ด ์๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์๋ ์๋ฒ ์ํ ๊ฐ์๊ฐ ํ์์
๋๋ค. ์คํ๋ง ๋ถํธ๋ Actuator ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ํ์ฌ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ํ, DB ์ปค๋ฅ์
ํ ์ํ ๋ฑ์ ํ์ธํ ์ ์๋ ๋ชจ๋ํฐ๋ง ์ฐฝ๊ตฌ๋ฅผ ์ฝ๋ฉ ํ ์ค ์์ด ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํด ์ค๋๋ค.
3. ๊ทธ๋ผ Spring MVC๋ ๋์ปค๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋์?
๊ฒฐ๋ก ๋ถํฐ ๋ง์๋๋ฆฌ๋ฉด, ๋น์ฐํ ์ฌ์ฉํ ์ ์์ต๋๋ค! ๊ผญ ์คํ๋ง ๋ถํธ๋ง ์จ์ผ ๋์ปค/์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ธ ์ ์๋ ๊ฒ์ ์๋๋๋ค.
๋์ปค(Docker)์ ์ฟ ๋ฒ๋คํฐ์ค(Kubernetes) ์ ์ฅ์์๋ ์ปจํ ์ด๋ ์์ ๋ด๊ธด ํ๋ก๊ทธ๋จ์ด ์๋ ์คํ๋ง์ธ์ง ์ต์ ์คํ๋ง ๋ถํธ์ธ์ง ์๊ดํ์ง ์์ต๋๋ค. ํ์ค ๊ท๊ฒฉ๋ง ๋ง์ถ๋ฉด ์ด๋ค ํ๋ก๊ทธ๋จ์ด๋ ๋ค ๋ด์์ ๊ตด๋ ค์ค๋๋ค. ์ค์ ๋ก ์๋ง์ ๊ธฐ์ ๋ค์ด ๊ธฐ์กด์ ์ด์ํ๋ ๊ฑฐ๋ํ ๋ ๊ฑฐ์ Spring MVC ์์คํ ์ ๊ทธ๋๋ก ๋์ปค ์ด๋ฏธ์ง๋ก ํจํค์งํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์ผ๋ก ์ด์ฃผ(Migration)์์ผ ์ด์ํ๊ณ ์์ต๋๋ค.
๋ค๋ง, ์ฅ์ ์ ํ์ฉํ๋ ํจ์จ์ฑ์ ์ฐจ์ด๊ฐ ์กด์ฌํฉ๋๋ค.
- Spring MVC๋ฅผ ๋์ปค์ ์ฌ๋ฆด ๋: ๋์ปค ์ด๋ฏธ์ง ์์ ์ฐ๋ถํฌ OS๋ฅผ ๊น๊ณ , ์ธ๋ถ ํฐ์บฃ ์๋ฒ๋ฅผ ์ค์นํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ง๊ณ , ๊ฑฐ๊ธฐ์
WARํ์ผ์ ๋ณต์ฌํด ๋ฃ์ด์ผ ํ๋ฏ๋ก ๋์ปคํ์ผ(Dockerfile)์ด ๋ณต์กํด์ง๊ณ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๊ฐ ๋ฌด๊ฑฐ์์ง๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ปจํ ์ด๋๋ฅผ ๋ณต์ ํ๊ฑฐ๋ ์๊ฐ ์น์ (Heal)๋ฅผ ํ ๋๋ ๊ตฌ๋ ์๋๊ฐ ๋๋ ค ๊ตผ๋จ๊ฒ ๋ฐ์ํฉ๋๋ค. - Spring Boot๋ฅผ ๋์ปค์ ์ฌ๋ฆด ๋: ์์ํ ์๋ฐ ํ๊ฒฝ ์ด๋ฏธ์ง์
JARํ์ผ ํ๋๋ง ๋ณต์ฌํด ๋ฃ์ผ๋ฉด ๋๋ฉ๋๋ค. ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ๋งค์ฐ ๊ฐ๋ณ๊ณ , ์ฟ ๋ฒ๋คํฐ์ค์ ํฌ์ค ์ฒดํฌ(Liveness/Readiness Probe)์ ๋ถํธ์ Actuator ๊ธฐ๋ฅ์ด ์ฐฐ๋ก์ฒ๋ผ ์ฐ๋๋์ด ์์คํ ์๊ฐ ์น์ ๋ฅ๋ ฅ์ด ๊ทน๋ํ๋ฉ๋๋ค.
์ฆ, "๋์ปค์ ์ฟ ๋ฒ๋คํฐ์ค๋ Spring MVC๋ผ๋ ์๋ ์๋์ฐจ๋ ํธ๋ ์ผ๋ฌ์ ์ค์ด์ ์ผ๋ง๋ ์ง ์์ง์ฌ์ค ์ ์๋ค. ๋ค๋ง, ์ฒ์๋ถํฐ ์ปจํ ์ด๋ ๋นํ๊ธฐ์ ์ ๋ค์ด๊ฐ๋๋ก ๊ท๊ฒฉํ๋์ด ์ค๊ณ๋ Spring Boot๋ฅผ ํ์ ์ ๋ ํจ์ฌ ๋ ๊ฐ๋ณ๊ณ ์์ ํ๊ฒ ๋ ์๊ฐ ์ ์๋ค"๊ณ ์ดํดํ์๋ฉด ์ข์ต๋๋ค!
๐ ๊ฐ์ผํ์์ ์์ฝ ๋ฐ ์๊ณ
๊ฒฐ๊ณผ์ ์ผ๋ก, ๊ธฐ์กด์ ๋ณต์กํ ์ธํ๋ผ ํ๊ฒฝ์ ๋ค๋ฃจ์ด๋ณด์ ๋ถ๋ค์ด๋ผ๋ฉด ์คํ๋ง ๋ถํธ๊ฐ ์ ๊ณตํ๋ ์ด ๊ฐ๊ฒฐํจ๊ณผ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ(Cloud Native)์ ์ธ ํน์ฑ์ ๊ฐํํ ์๋ฐ์ ์์ต๋๋ค. ๊ณผ๊ฑฐ์ ์๋์ฐจ ์กฐ๋ฆฝ ๋จ๊ณ ๊ฐ์ ์ค์ ์ ๋ค์์ ๋ถํธ๊ฐ ๋ค ์์์ ํด์ฃผ๋๊น์.
๊ถ๊ธ์ฆ์ด ์์ํ๊ฒ ํด๊ฒฐ๋์์ผ๋, ๋ค์ ๊ธ์์๋ ์ง์ง ์ค๋ฌด ์ํคํ
์ฒ์ ๋ผ๋๋ฅผ ์ธ์๋ณด๊ฒ ์ต๋๋ค!
์ฐ๋ฆฌ๊ฐ ์ค์นํ ์๋ฐ 1.8 ํ๊ฒฝ์ ๋ฑ ๋ง์ถฐ์ Controller - Service - DTO - Mapper - MyBatis - DB๊น์ง ์ด์ด์ง๋ ํ์ค 5๊ณ์ธต ์ํคํ
์ฒ์ ํจํค์ง๋ฅผ ์ชผ๊ฐ๊ณ ์ค์ ์์ค ์ฝ๋๋ฅผ ์ฑ์ ์ปดํ์ผํ๋ ์ค์ ๊ณผ์ ์ผ๋ก ์ฐพ์์ค๊ฒ ์ต๋๋ค.
ํ๊ฒฝ ์ค์ ์ ์งํํ์๋ฉด์ ๊ถ๊ธํ ์ ์ด๋ ์๊ฒฌ์ด ์์ผ์๋ฉด ์ธ์ ๋ ๋๊ธ๋ก ํธํ๊ฒ ์ํตํด ์ฃผ์ธ์. ๊ฐ์ฌํฉ๋๋ค! bananas ๐
๊ฐ์ผํ์๋ ๋ง๋์๋ ํ๋ก๊ทธ๋จ ์จ๋ณด๊ณ ์ถ๋ค์ ใ
0.00 SBD,
1.65 STEEM,
1.65 SP
[booming-kr-auto]
๋ณดํ ์๋ฃํ์ต๋๋ค ๐
Upvoted! Thank you for supporting witness @jswit.