[Spring boot] IntelliJ IDEA๋ฅผ ์ด์ฉํ Spring boot ํ๋ก์ ํธ ์์
๊ธฐ์กด์ Java ์ธ์ด๋ฅผ ์ด์ฉํด์ ์น ๊ฐ๋ฐ์ ์ํด์๋ Tomcat, Jetty ๋ฑ๊ณผ ๊ฐ์ Servlet Container๋ฅผ ์ค์นํ๊ณ , ํ๋ก์ ํธ ๋ด์ ํ๊ฒฝ์ ๊ตฌ์ฑํด์ผ ํ๊ณ , ๋ํ์ ์ธ Java Application Framework์ธ Spring ์ญ์ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ด ๋ง๋ง์น ์๋ค๋ ์ด์ ๋ก Java ์ธ์ด๋ฅผ ์ ์ฌ์ฉํ๋ ๋ถ์ด ์๋ ๋ถ๋ค์ ๋๋ถ๋ถ ์น ๊ฐ๋ฐ์ ์ํด ๋น๊ต์ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ด ์ฌ์ด Node.js์ Express๋ Python์ Django ๋ฑ์ ๋ง์ด ์ฌ์ฉํ์ฃ .
Spring boot
Spring boot๋ ์ด๋ฌํ Spring์ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ ์ด๋ ค์๊ณผ ๋ถ๋ด์ ๋์ด์ฃผ๊ธฐ ์ํด ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ ์ต์ํ ํ๊ณ , ๊ฐ๋ฐ์๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ๋์์ค๋๋ค.
๋จผ์ Spring boot์ ํน์ง๋ถํฐ ๊ฐ๋จํ ์ดํด๋ณด์๋ฉด..
- Embedded Tomcat์ด ๋ด์ฅ๋์ด ์์ด, Jetty ๋ฑ์ ์ฌ์ฉํด ๋ ๋ฆฝ ์คํ์ด ๊ฐ๋ฅํ Spring Application ๊ฐ๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ํตํฉ ์คํํฐ๋ฅผ ์ ๊ณตํ์ฌ Maven, Gradle ๋ฑ์ ๋ํ๋์ ๊ตฌ์ฑ์ ๊ฐ์ํ ํ์์ต๋๋ค.
- Starter ํจํค์ง๋ฅผ ํตํด ์๋ํ๋ ์คํ๋ง ์ค์ ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฒ๊ฑฐ๋ก์ด XML ์ค์ ์ ์๊ตฌํ์ง ์์ต๋๋ค.
- JAR ํ์ผ ํฌ๋งท์ ์ฌ์ฉํด Java ์ต์ ๋ง์ผ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ํฐ๋ง๊ณผ ๊ด๋ฆฌ๋ฅผ ์ํ Spring Actuator๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ ํน์ง๋ค ์ค์์ ์ ๊ฐ ์งํ๊ฒ ์น ํด ๋์ ๋ ๊ฐ์ง ์ฌํญ์ ๊ต์ฅํ ๋งค๋ ฅ์ ์ด๋ผ๊ณ ๋ด ๋๋ค. ๊ธฐ์กด์ Spring์ ์์กด์ฑ ์ฃผ์ (DI) ๋ฑ์ด ๋ชจ๋ XML ์ค์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ด, ์ฝ๋๋ฅผ ๋ ๊ตฐ๋ฐ๋ฅผ ๋ด์ผ ํ๋ ๋ถํธํ ์ ์ด ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฅผ Java ์ฝ๋์์ ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด ์์กด์ฑ ์ฃผ์ ์ ๊ฐ๋ฅํ๋๋ก ๊ตฌํํ์๊ณ , ๋ JAR ํ์ผ๋ก ๋ฐฐํฌํ ์ ์๋๋กํ์ฌ Tomcat์ ์ด์ฉํ์ง ์๊ณ , Java ์ต์ ๋ง์ผ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ ๊ทธ๋งํผ ํ๋ก๋์ ์ ๋ํ ์์ ๋๋ ๋์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
How to start
๊ทธ๋ผ ์ด์ IntelliJ IDEA๋ฅผ ์ด์ฉํด Spring boot ํ๋ก์ ํธ๋ฅผ ์์ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋จผ์ , IntelliJ IDEA๋ฅผ ์คํ์ํจ ํ, Create New Project ๋ฒํผ์ ํด๋ฆญํด์ค๋๋ค.
์ข์ธก์์ Spring Initializr ๋ฒํผ์ ํด๋ฆญํด์ค๋๋ค. Spring Initializr๋ ๊ฐ๋จํ ๊ธฐ๋ณธ ์ ๋ณด๋ง์ผ๋ก Spring boot ํ๋ก์ ํธ๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ค ์ ์๋๋ก Spring ํ๋ก์ ํธ์์ ๊ฐ๋ฐํ ๋๊ตฌ์ ๋๋ค.
Project SDK์์ ์ฌ๋ฌ๋ถ์ด ์ํ๋ Java ๋ฒ์ ์ ์ ํํ ์ ์์ต๋๋ค. ์ด ํฌ์คํธ์์๋ Java 8 ๋ฒ์ ์ ์ด์ฉํด์ ์์ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Next ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ฌ๋ฌ๋ถ๋ค์ ํ๋ก์ ํธ ์ด๋ฆ์ ์ ๋ ฅํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ฐ๋ Java ํ๋ก์ ํธ์ ์ด๋ฆ๊ณผ๋ ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ง์ ํด์ผ ํ๋ ๋๋์ ๋๋ค. ๊ฐ๊ฐ ํ๋์ฉ ์ค๋ช ์ ๋๋ฆฌ์๋ฉด..
- GroupID: ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ๋ฅผ ๋ชจ๋ ํ๋ก์ ํธ ์ฌ์ด์์ ๊ณ ์ ํ๊ฒ ์๋ณํด์ฃผ๋ ID
- ArtifactID: ํ์ฌ ๋ง๋ค๋ ค๊ณ ํ๋ ํ๋ก์ ํธ์ ์ด๋ฆ์ผ๋ก ์ฐจํ ๋ฐฐํฌํ ๋ JAR ํ์ผ์ ๋ถ์ฌ์ง๋ ํ์ผ ์ด๋ฆ
์ง๊ธ์ ์์ ํ๋ก์ ํธ๋ก ์์ํ๊ฒ ๋์ง๋ง, ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด, ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํด๋น ํ๋ก์ ํธ์ ๋ํ ๊ทธ๋ฃนํ์ด ํ์ํ ํ ๋ฐ, ๊ทธ ๊ทธ๋ฃน์ ID๋ฅผ GroupID๋ผ๊ณ ๋ณด์๋ฉด ๋๊ณ , ๊ฐ๊ฐ์ ํ๋ก์ ํธ ์ด๋ฆ์ ArtifactID์ ๋ฃ์ด์ฃผ์๋ฉด ๋๊ฒ ์ต๋๋ค.
๋ค์์ผ๋ก, ์์กด์ฑ ๊ด๋ฆฌ ํด์ ์ ํด์ผ ํฉ๋๋ค. ์์กด์ฑ ๊ด๋ฆฌ ํด์ Maven, Gradle ๋ ๊ฐ์ง๋ฅผ ๊ณ ๋ฅผ ์ ์๋๋ฐ, ๊ฐ์ธ์ ์ผ๋ก ์ ๋ Groovy ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ Gradle์ ๋ง์ด ์ฌ์ฉํ๋ ํธ์ ๋๋ค.
Langauge๋ Kotlin ์ธ์ด๋ก ์งํํ๊ณ , Packaging์ Jar ํ์ผ๋ก ๋ง์ถฐ ์ฃผ์ธ์. ๋ฒ์ ๊ณผ ํ๋ก์ ํธ ์ด๋ฆ์ ์์์ ์ค์ ํ๋๋ก ๊ทธ๋๋ก ์ด์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
Next ๋ฒํผ์ ๋๋ฌ ๋ค์์ผ๋ก ์งํํ๋ฉด, ์ฌ๋ฌ๋ถ๋ค์ด ์ฌ์ฉํ ๋ํ๋์๋ฅผ ์ ํํ ์ ์๋๋ก ๋ชฉ๋ก์ ์ ๊ณตํฉ๋๋ค. ์ฌ๊ธฐ์ ๋์ ์๋ ๋ชฉ๋ก๋ค์ ๋๋ถ๋ถ Spring ๊ฐ๋ฐํ์์ ์งํํ๋ ๋ํ๋์๋ฅผ ํฌํจํ์ฌ GCP, AWS ๋ฑ์ ํด๋ผ์ฐ๋ ํด, Java์์ Getter Setter ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ๋ช ํ Lombok ๋ฑ ๋ค์ํ ๋ํ๋์๊ฐ ์ ๊ณต๋ฉ๋๋ค.
๊ทธ ์ค REST API๋ฅผ ๊ฐ๋ฐํ๊ณ ์ ํ๋ค๋ฉด, ๋ํ์ ์ผ๋ก Web ๋ถ๋ถ์์ Spring Web์ ์ฒดํฌ๋ฅผ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค. Spring Web์ Spring boot์์ REST API๋ฅผ ์ฝ๊ฒ ๊ฐ๋ฐํ๊ธฐ ์ํ ๋ํ๋์๋ก GetMapping, PostMapping ๋ฑ REST API์ ์ด๋ ธํ ์ด์ ์ ์ ๊ณตํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๊ฒ REST API๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด ๋ถ๋ถ์ ๋ค์ ํฌ์คํธ์์ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ฌ๋ฌ๋ถ๋ค์ ํ๋ก์ ํธ๋ฅผ ์ ์ฅํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ๋ฉด Spring boot ํ๋ก์ ํธ๊ฐ ๋๋ฑ ๋ง๋ค์ด์ง๊ฒ ๋ฉ๋๋ค.
๋ค์ ํฌ์คํธ๋ก ์ด์ด ๋๊ฐ์, ๊ฐ๋จํ REST API๋ฅผ ๋ง๋๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.