๐ก ๋ณธ ๊ฒ์๊ธ์ ๊น์ํ๋์ ์ธํ๋ฐ(Inflearn) ๊ฐ์ ์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ ์ ๋ํ ์๊ฐ ๊ธฐ๋ก์ฉ์ผ๋ก ์์ฑ๋์์ต๋๋ค.
1. ํ๋ก์ ํธ ์์ฑ
1-1. ์คํ๋ง ๋ถํธ(Spring Boot) ๋ฒ์
- 'SNAPSHOT'์ ์์ง ๊ฐ๋ฐ ์ค์ธ ๋ฒ์ ์ด๋ค.
- 'M(Milestone)'์ ์ ์ ๋ฆด๋ฆฌ์ฆ ์ ์ฌ์ฉ์ ํ ์คํธ ๋ฒ์ ์ ๋งํ๋ค.
- ๋ณ๋ ํ๊ธฐ ์๋ ๊ฒ์ด ๋ฐ๋ก ์ ์ ๋ฆด๋ฆฌ์ฆ ๋ ๋ฒ์ ์ผ๋ก, ์์ ์ฑ ๋์ ์คํ๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค.
1-2. ํ๋ก์ ํธ ๋ฉํ๋ฐ์ดํฐ
- Group์ com.reminder์ ๊ฐ์ด ๋๊ฐ๋ ๊ธฐ์ ์ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ์์ฑํ๋ ๋์ด๋ค.
- Artifact๋ ๋น๋๋ผ ๋์ค๋ ํ๋ก์ ํธ ๊ฒฐ๊ณผ๋ฌผ์ ์ด๋ฆ์ ์ง์นญํ๋ค.
2. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ดํด๋ณด๊ธฐ
โ ๊ทธ๋ ์ด๋ค(Gradle)์ ์์กด๊ด๊ณ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ํจ๊ป ๋ค์ด๋ก๋ํด ๊ฐ์ ธ์จ๋ค. ์ด๋ ์ค๋ณต๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ (*) ํ์์ผ๋ก ๋์ฒด๋๋ค.
โ ํ์ ์์System.out.println()์ผ๋ก ์คํ ๋ด์ญ์ ํ์ธํ๋ ์ผ์ ์์ผ๋ฉฐ, ๋์ ์ ๋ก๊น ์ ์ฐ๊ฒ ๋๋ค. ๋ก๊ทธ๋ก ๋จ๊ฒจ ์ฌ๊ฐํ ์๋ฌ๋ง ๋ฐ๋ก ๋ชจ์ ๊ด๋ฆฌํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ์ด์ ์๋ slf4j๋ฅผ ๋ง์ด ์ผ์ผ๋, ์์ฆ์ logback์ผ๋ก ๋์ด๊ฐ๋ ์ถ์ธ์ด๋ค.
- spring-boot-starter-web
- spring-boot-starter-tomcat: ํฐ์บฃ(์น ์๋ฒ)
- spring-webmvc: ์คํ๋ง ์น MVC
- spring-boot-starter-thymeleaf: ํ์๋ฆฌํ ํ ํ๋ฆฟ ์์ง
- spring-boot-starter(๊ณตํต)
- spring-boot
- spring-core
- spring-boot-starter-logging
- logback
- slf4j
- spring-boot
- spring-boot-starter-test
- junit: ํ ์คํธ ํ๋ ์์ํฌ
- mockito: ๋ชฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- assertj: ํ ์คํธ ์ฝ๋๋ฅผ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- spring-test: ์คํ๋ง ํตํฉ ํ ์คํธ ์ง์
3. View ํ๊ฒฝ์ค์
3-1. Welcome Page ์์ฑ
โ ์คํ๋ง ๋ถํธ(Spring Boot)๋ ์ ์ ์ธ ๋๋ ํ ํ๋ฆฟ์ ๊ธฐ๋ฐํ ์ฐ์ปด ํ์ด์ง ๋ชจ๋๋ฅผ ์ง์ํ๋ค. ์คํ ์ ์ฌ์ ์ ์ค์ ๋ ์ ์ ์์ ์์น๋ก ๊ฐ index.html ํ์ผ์ ํ์ํ ๋ค, ์กฐํ๋ ๋ฐ๊ฐ ์๋ค๋ฉด ๊ทธ ๋ค์์ผ๋ก ํ ํ๋ฆฟ ํ์์ index๋ฅผ ์ฐพ๋๋ค: https://docs.spring.io/spring-boot/docs/2.7.15/reference/html/web.html#web.servlet.spring-mvc.welcome-page
- ์ ์ ์์ ์์น์ธ resources:static/ ํด๋ ํ์์ index.html์ ์ฌ๋ ค๋๋ฉด ์ฐ์ปด ํ์ด์ง๋ก์ ๊ธฐ๋ฅํ๋ค.
3-2. Thymeleaf ํ ํ๋ฆฟ ์์ง
โ ์คํ๋ง ๋ถํธ(Spring Boot)๋ ํ๋ฆฌ๋ง์ปค(FreeMarker), ๊ทธ๋ฃจ๋น(Groovy), ํ์๋ฆฌํ(Thyemleaf), ๋จธ์คํ์(Mustache)์ ๊ฐ์ ํ ํ๋ฆฟ ์์ง ๊ด๋ จ ์๋ ์ค์ ๊ธฐ๋ฅ์ด ๋ด์ฌ๋ผ ์๋ค: https://docs.spring.io/spring-boot/docs/2.7.15/reference/html/web.html#web.servlet.spring-mvc.template-engines
- ์๋ฒ ์ฌ์ด๋ ํ
ํ๋ฆฟ ์์ง์ธ ํ์๋ฆฌํ(Thymeleaf) ์ฌ์ฉ์ ์ํด์๋ ์์กด์ฑ ์ถ๊ฐ๊ฐ ์ฐ์ ๋์ด์ผ ํ๋ค.
- implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
- ํ์๋ฆฌํ(Thymeleaf)์์ ํค๋(header), ํธํฐ(footer) ๋ฑ ๊ณตํต ๋ ์ด์์์ ๊ตฌ๋ถ ๋ฐ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด์๋ ์์กด์ฑ ์ถ๊ฐ๊ฐ ํ์ํ๋ค.
- implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
3-3. ๋ทฐ ๋ฆฌ์กธ๋ฒ(View Resolver) ํตํ ํ๋ฉด ๋์ ์๋ฆฌ
- ์ปจํธ๋กค๋ฌ์์ ๋ฆฌํด ๊ฐ์ผ๋ก ๋ฌธ์๋ฅผ ๋ฐํํ๊ฑฐ๋ ๋ทฐ ๋ฆฌ์กธ๋ฒ(View Resolver)๊ฐ ํด๋น ์ด๋ฆ์ ๊ฐ์ง ํ๋ฉด์ ์ฐพ์ ์ฒ๋ฆฌํ๋ค.
- ์คํ๋ง ๋ถํธ(Spring Boot) ํ ํ๋ฆฟ ์์ง ๊ธฐ๋ณธ ๋ทฐ ๋ค์(view name)์ผ๋ก ๋งคํ์ด ์ด๋ค์ง๋ ๊ฒ์ด๋ค.
- resources:templates/ + { view name } + .html
4. ๋น๋ํ๊ณ ์คํํ๊ธฐ(Windows)
โ ์๋์ฐ ์ด์์ฒด์ ์์ ๊ทธ๋ ์ด๋ค(Gradle) ๊ธฐ๋ฐ์ผ๋ก ๋น๋ํ๊ณ , ๋น๋ ๋ ์๋ฅด(jar) ํ์ผ์ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ ํ๋ค.
- ๋ช
๋ น ํ๋กฌํํธ(cmd)๋ฅผ ์คํํด ํ๋ก์ ํธ ํด๋๊ฐ ์๋ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ค.
- ์ฐพ๊ณ ์ ํ๋ ํด๋๊ฐ D๋๋ผ์ด๋ธ์ ์์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์จ์ D๋๋ผ์ด๋ธ๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์๋ค: D:
- cd(change directory) ๋ช ๋ น์ด ํตํด ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์๋ฅผ ๋ค์ด C๋๋ผ์ด๋ธ์ 'study/hello-spring' ํด๋ ํ์์ ํ๋ก์ ํธ๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ์. ์ด๋ ๋จ์ผ ๋ช ๋ น์ผ๋ก cd study, cd hello-spring, cd hello-spring์ฒ๋ผ ํ๊ณ ํ๊ณ ๋ค์ด๊ฐ ์ ์๊ฒ ์์ฑํ ์๋ ์๊ณ , ๋ค์๊ณผ ๊ฐ์ด ์ผ๊ด์ ์ผ๋ก ์ธ ์๋ ์๋ค: C:\Users\User>cd study\hello-spring-hello-spring
- ๋น๋๋ฅผ ์งํ์ํค๋ ๋ช
๋ น์ด๋ก์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค: gradlew build
- BUILD SUCCESSFUL ๊ฒฐ๊ณผ๊ฐ ๋ณด์ด๋ฉด ๋น๋๊ฐ ์ฑ๊ณต๋ฆฌ์ ๋ง์ณ์ง ๊ฒ์ด๋ค.
- ๋ง์ฝ ์ ๋ช ๋ น์ด๋ก ์ํํ ์คํ์ด ์ด๋ ต๋ค๋ฉด gradlew clean build๋ฅผ ์จ์ ๋์ ํ ์ ์๋ค.
- ๋ฐ๋๋ก gradlew clean์ ๊ธฐ์กด์ ๋น๋๋ ๋ด์ญ์ ์ญ์ ํ๋ ๋ช ๋ น์ด์ด๋ค.
- ๋น๋ ๋ ๊ฒฐ๊ณผ๋ฌผ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค์ด์๋ ํด๋๋ก ์ด๋ํ๋ค: cd build/libs
- ์ด๋ ๋๋ ํ ๋ฆฌ ์์ ์์ธ ๊ตฌ์ฑ์ ์กฐํํ๊ณ ์ ํ๋ค๋ฉด ๋ช
๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค: dir
- ์์ ๋น๋ ๊ณผ์ ์ ๋ฌธ์ ๊ฐ ์์๋ค๋ฉด libs ํด๋ ํ์์ ์๋ฅด(jar) ํ์ผ์ด ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์์ ๊ฒ์ด๋ค.
- ์กฐํ๋ ์ด๋ฆ์ ์ฐธ๊ณ ํด ํด๋น ์๋ฅด(jar) ํ์ผ์ ์คํ์ํจ๋ค: java -jar ํ์ผ์ด๋ฆ.jar
- ์ฌ๊ธฐ์๋ java -jar hello-spring-0.0.1-SNAPSHOT.jar์ ๊ฐ์ด ์์ฑํ์๋ค.
- ์คํ๋ง(Spring) ๋ก๊ณ ๋ถํฐ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋์๋ค๋ ์๋ด๋ง๊น์ง ์ถ๋ ฅ๋๋ค๋ฉด ๋ฌด์ฌํ ์คํ๋ ๊ฒ์ด๋ค.
- ์คํํ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃ์ํค๋ ๊ฒ๋ ์ค์ํ๋ค. ๊ณ์ ์ผ๋ ์ํ๋ก ์ฌ์ฉํ๋ค๊ฐ ํฌํธ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค: ctrl + C