[Spring Boot] ํ๋ก์ ํธ ๊ตฌ์กฐ ์์๋ณด๊ธฐ
spring boot๋ก ๊ฒ์ํ์ ๋ง๋ค๋ค๊ฐ ๊ตฌํ ์์ฃผ๋ก ์์ ์ ํ๊ณ ์๋๋ฐ ์, ์ด๋ป๊ฒ ๋์ ๊ฐ๋์ง ๊ถ๊ธํด์ ๊ตฌ์กฐ๋ฅผ ์์๋ณด๊ณ ์ ํ๋ค.
1. src/main/java ๋๋ ํ ๋ฆฌ (์ ์ผ ์ค์)
ํ ๋ธ๋ก๊ทธ์์ ๋ช ํํ๊ฒ ์ ๋ฆฌํด์ค ๊ฒ ๊ฐ์ ์ฐธ๊ณ ์ฉ์ผ๋ก ๋จผ์ ์ ์ํฉ๋๋ค.
์ปจํธ๋กค๋ฌ : @Controller (ํ๋ ์ ํ
์ด์
๋ ์ด์ด, ์น ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํจ)
๋ก์ง ์ฒ๋ฆฌ : @Service (์๋น์ค ๋ ์ด์ด, ๋ด๋ถ์์ ์๋ฐ ๋ก์ง์ ์ฒ๋ฆฌํจ)
์ธ๋ถI/O ์ฒ๋ฆฌ : @Repository (ํผ์์คํด์ค ๋ ์ด์ด, DB๋ ํ์ผ๊ฐ์ ์ธ๋ถ I/O ์์
์ ์ฒ๋ฆฌํจ)
Controller
์ ์ฌ์ง์ ์น ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํตํ ๋ ์ด๋ค ๋ก์ง์ ๊ฑฐ์ณ์ ์ ๋ณด๊ฐ ์ ๋ฌ์ด ๋๋์ง์ ๋ํ ๊ทธ๋ฆผ์ ๋๋ค.
๊ฐ์ฅ ์์ชฝ์ ๋ณด๋ฉด front-end์์ ๋ค์ด์ค๋ ํด๋ผ์ด์ธํธ ์ธก์ ์์ฒญ์ด ๊ฐ์ฅ ๋จผ์ ์๋ฒ ์ธก๊ณผ ๋ง๋ฟ๋ ๋ถ๋ถ์ด ๋ฐ๋ก Controller์
๋๋ค.
์๋ฒ์์ ๊ธฐ๋ฅ๋ณ URL์ด๋ผ๋ API๋ฅผ ๊ฐ์คํด ๋์๊ณ , ํด๋ผ์ด์ธํธ๋ ํ์ํ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ์ ์ ํ API์ ์์ฒญํ๋ ๊ฒ์ด์ฃ .
์ฆ Controller๋ ์ด๋ฐ ์ฐฝ๊ตฌ ์ญํ ์ ํ๋ API๋ค์ ๋ชจ์๋์ ํด๋์ค์
๋๋ค.
๋น์ฐํ ์ ๋ณด๋ฅผ ํ๋ก ํธ ์ชฝ์ผ๋ก ๋ด๋ ค์ค ๋๋ ์ด ์ปจํธ๋กค๋ฌ์ API๋ฅผ ํตํด์ ๋ณด๋ด์ค๋๋ค.
Repository
Repository๋ ์ง์ญํด๋ '์ ์ฅ์'๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊น์ ์ฐ๊ด์ด ์์์ ์ ์ ์์ต๋๋ค.
๋ง์ต๋๋ค. ๋ฐ์ดํฐ๋จ์ ์ง์ ๋งค์นญ๋๋ Entity๋ผ๋ ๊ฒ์ด ์๋๋ฐ, ์ด Entity๋ฅผ ํตํด ๋ฐ์ดํฐ ํ
์ด๋ธ์ด ์์ฑ์ด ๋๋ฉด, ๋ฐ์์จ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค(ex. MySQL, mariaDB)์ ์ ์ฅํ๊ณ ์กฐํํ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
์ ์ฌ์ง์ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL)๊ณผ ์ด๋ฅผ ์กฐ์ํ๋ SQL๋ฌธ๊ณผ ๋งค์นญ๋๋ ๊ฐ๋
์ผ๋ก, ์คํ๋ง๋ถํธ์์ Domain(Entity)๊ฐ table์ , Repository๊ฐ SQL์ ๋งค์นญ๋ฉ๋๋ค. ์ฆ Repository์์ ์ฃผ์ด์ง jpa ์ธํฐํ์ด์ค ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ์ฃผ๊ธฐ ์ํด ๋จ์ ๋ฐ์ดํฐ์กฐํ๋ก๋ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ๊ฐ๋
๋ค์ด ์์ ๊ฒ ์
๋๋ค. ์ด๋ ๋์ฑ ๊ณ ๋ํ๋ ์ ๋ณด ๊ฐ๊ณต์ ์ฒ๋ฆฌํ๋ ๊ณณ์ด ๋ฐ์์ ์ค๋ช
ํ Service์
๋๋ค.
Service
Service๋ ๋งค์ฐ ์ ๋งคํ๋ฉด์๋ ํ์คํ ๋
์์ธ ๊ฒ ๊ฐ์ต๋๋ค.
Service๋ ์์์ ์ธ๊ธํ๋ฏ์ด Repository์์ ์ป์ด์จ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์๋ฐ ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ ๊ฐ๊ณต ํ ๋ค์ Controller์๊ฒ ์ ๋ณด๋ฅผ ๋ณด๋ด๋ ๊ณณ์
๋๋ค.
์ด๋ป๊ฒ ๋ณด๋ฉด Controller๋ ํด๋ผ์ด์ธํธ์, Repository๋ ๋ฐ์ดํฐ์ ๋ง๋ฟ์์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ถ๋ถ์ผ๋ก ์ฌ๊ธธ ์ ์์ผ๋ ์ค์ง์ ์ผ๋ก ์ค์ํ ์๋์ด ๋ง์ด ์ผ์ด๋๋ ๋ถ๋ถ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ ๊ฐ ์ฃผ๋ชฉํ๋ ๊ฒ์ '๊ทธ๋ผ repository์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๋ฐ๋ก ๊ฐ๊ณตํด์ ์ปจํธ๋กค๋ฌํํ
์ฃผ๋ฉด ๋๋๋ฐ ๊ตณ์ด service๊ฐ ํ์ํ๊ฐ'์ ๋ํ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ๊ฐ์ ๊ถ๊ธ์ฆ์ ๊ฐ์ง ์ฌ๋์ด ๋ง์๋ณด์๊ณ , ์ ๋ณด๋ฅผ ์กฐ๊ธ๋ง ์ฐพ์๋ด๋ ์ฌ๋ฌ ์ ๋ณด๊ฐ ๋์์ต๋๋ค.
(์ง๊ธ๋ถํฐ ์๊ธฐํ๋ ๋ถ๋ถ์ service์ ์ง์ ์ ์ธ ์ฐ๊ด์ ์๋ค๊ณ ๋๋ ์๋ ์์ต๋๋ค)
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ํด๋ผ์ด์ธํธ ์ฆ controller ์ชฝ์์ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ฌ ์ ๋ณด๋ฅผ ์ป๊ณ ๊ฐ๊ณตํด์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ ์ํํฉ๋๋ค. ์ ๋ณด๋ฅผ ์ง์ CRUDํ๊ณ ๊ฐ๊ณตํ๋ ๊ณผ์ ์์ ํ
์ด๋ธ์ ์ ์ฅ๋ ์๋ณธ์ ์ ๋ณด๊ฐ ์์๋ ์ฐ๋ ค๊ฐ ํฌ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฐ๋ผ์ ์ ๋ณด ๋ณ๋์ ์ํ์ด ํฐ ๋ก์ง์ Service์์ ์งํํ๋ ๊ฒ์
๋๋ค. ์ถ๊ฐ๋ก ์ด๋๋ ์๋ณธ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ถ์ถํ ์ ๋ณด์ ๋ณต์ฌ๋ณธ์ธ DTO๋ฅผ ๋ง๋ค์ด์ ๋ก์ง์ ์กฐ์ํ๋ ๊ฒ์
๋๋ค.
DTO๋?
https://kkh1902.tistory.com/155?category=977211
2. SpringboardApplcation ํด๋์ค
DemoApplication ํ์ผ์ ์ด์ด๋ณด๋ฉด, main ๋ฉ์๋๊ฐ ์ ์ธ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
main ๋ฉ์๋๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ์ญํ ์ ํด์ค๋๋ค.
@SpringBootApplication ์ด๋ ธํ ์ด์ ์ main ํด๋์ค์ ์๋ ์ด๋ ธํ ์ด์ ์ด๊ณ ,
ํด๋น ์ด๋ ธํ ์ด์ ์ ๋ค์์ ์ธ ๊ฐ์ง ์ด๋ ธํ ์ด์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
3. src/main/resources ๋๋ ํ ๋ฆฌ
templates :
๊ธฐ์กด์ ์คํ๋ง์ HTML ๋ด์ ์๋ฐ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ JSP์ ๋ฐฉ์์ ์ฌ์ฉํ์์ต๋๋ค.
๋๋ ํ ๋ฆฌ์ ์์น๋ ์น ๋๋ ํ ๋ฆฌ์ ํด๋นํ๋ src/main/webapp ์์ ์กด์ฌํ์์ต๋๋ค.
ํ์ง๋ง, ์ด๋ฌํ ๋ฐฉ์์ war ํ์ผ๋ก ํจํค์งํ ๋์์ ๊ฒฝ์ฐ์๋ง ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ฌํ ์ด์ ๋ก ์คํ๋ง ๋ถํธ๋ src/main/resources ๋๋ ํ ๋ฆฌ ๋ด์์ ํ๋ฉด๊ณผ ๊ด๋ จ๋ ํ์ผ์ ๊ด๋ฆฌํ๋ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์์ต๋๋ค.
์คํ๋ง ๋ถํธ๋ ํ์๋ฆฌํ(Thymeleaf) ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉ์ ๊ถ์ฅํ๋๋ฐ, ํ์๋ฆฌํ๋ JSP์ ๋ง์ฐฌ๊ฐ์ง๋ก HTML ๋ด์์ ๋ฐ์ดํฐ๋ฅผ
์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฆ, ํ์๋ฆฌํ(Thymeleaf)์ ํ์ผ๋ค(HTMLํ์ผ์ด ๋์ ์ผ ๋, ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋)
templates ํด๋์์ ์ฌ์ฉํฉ๋๋ค.
static :
์ ์ ์ปจํ ์ธ ๋ ์๋ฒ์์ ๋ญ ํ๋๊ฑฐ ์์ด ํ์ผ์ ์น๋ธ๋ผ์ฐ์ ์ ๊ทธ๋๋ก ๋ด๋ ค์ฃผ๋ ๊ฒ์ด๊ณ ,
ํด๋น ํด๋์๋ css, fonts, images, plugin, scripts ๋ฑ์ ์ ์ ๋ฆฌ์์ค ํ์ผ์ด ์์นํฉ๋๋ค.
์คํ๋ง ๋ถํธ๋ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์ ์ ์ปจํ ์ธ ๋ฅผ /static์์ ์ฐพ์์ ์ ๊ณต์ ํฉ๋๋ค.
application.properties :
ํด๋น ํ์ผ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด์ ์๋์ผ๋ก ๋ก๋ฉ๋๋ ํ์ผ์ ๋๋ค.
์๋ฅผ ๋ค์ด ํฐ์บฃ(Tomcat)๊ณผ ๊ฐ์ WAS(ํฌํธ ๋ฒํธ, ์ฝํ ์คํธ ํจ์ค ๋ฑ)์ ์ค์ ์ด๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์ ๋ณด ๋ฑ ๊ฐ๊ฐ์ผ๋ก
๋ถ๋ฆฌ๋์ด ์๋ XML ๋๋ ์๋ฐ ๊ธฐ๋ฐ์ ์ค์ ์ ํด๋น ํ์ผ์ Key - Value ํ์์ผ๋ก ์ง์ ํ์ฌ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
4. src/test/java ๋๋ ํ ๋ฆฌ
ํด๋น ๋๋ ํ ๋ฆฌ์๋ DemoApplicationTests ํด๋์ค๊ฐ ์์ฑ๋์ด ์๋๋ฐ,
ํด๋น ํด๋์ค๋ฅผ ์ด์ฉํด์ ๊ฐ๊ฐ์ ๊ฐ๋ฐ ๋จ๊ณ์ ์๋ง์ ํ ์คํธ๋ฅผ ์งํํ ์ ์์ต๋๋ค.
๊ธฐ์กด์ ์คํ๋ง๊ณผ ๋ค๋ฅด๊ฒ ๋ณต์กํ ์ค์ ์์ด ํ ์คํธ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
build.gradle
ํด๋น ํ๋ก์ ํธ์ Type์ ๊ทธ๋๋ค(Gradle)๋ก ์ ํ
๋ฉ์ด๋ธ(Maven)์ pom.xml
๋ฉ์ด๋ธ(Maven)๊ณผ ๊ทธ๋๋ค(Gradle)์ ๊ฐ๋ ๋ฐ ๋น๊ต