Spring Boot๋ฅผ ์ฒ์ ๊ณต๋ถํ๋ ์ฌ๋์ด ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํด์ ์์ฑํ ํฌ์คํธ์ ๋๋ค. ์ค๊ฐ๋ ๋ฐ ์ค๋ฅ๊ฐ ์์ ์ ์์ผ๋, ๋ฐ๊ฒฌํ์ ๋ค๋ฉด ๊ฐ๊ฐ์์ด ๋๊ธ์ ํตํด์ ์๋ ค์ฃผ์ธ์! ํ์ธํ๋ ๋๋ก ์ ํํ ์ ๋ณด๋ฅผ ํ์ธํด์ ๊ณ ์น๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ์
์ด๋ฒ Spring Boot ์คํฐ๋๋ ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ์ ๊น์ํ๋๊ป์ ์ธํ๋ฐ์ ์ฌ๋ ค์ฃผ์๋ ์๋ฐ ์คํ๋ง ์์ ์ ๋ณต ์๋ฆฌ์ฆ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์งํํ๋ค. ๊ทธ ์๋ฆฌ์ฆ์ ๊ฐ์ฅ ์ฒซ ๊ฐ์์ธ ์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ ์ ๋ค์ด๋ณด๊ณ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
ํด๋น ๊ฐ์๋ ๋ด๊ฐ ๋๋ผ๊ธฐ์ ํฌ๊ฒ ๋ค์์ ์ปจํ ์ธ ๋ฅผ ๊ฐ์ง๊ณ ์์๋ค.
- Spring ๊ธฐ์ด ๊ธฐ๋ฅ ์จ๋ณด๊ธฐ
- Spring Bean๊ณผ ์์กด ๊ด๊ณ
- ํ์ ๊ด๋ฆฌ ์์ ๊ตฌํํ๊ธฐ
- Controller - Service - Repository ํจํด ์ ์ฉ
- Spring MVC ์ ์ฉ
- ์์ ์์ ์ ๋ค์ํ DB ์ ๊ทผ ๊ธฐ์ ์ ์ฉ
- JDBC
- JDBC Template
- JPA
- Spring Data JPA
- ์์ ์์ ์ ๊ฐ๋จํ AOP ์ ์ฉ
์ด ํฌ์คํธ์์๋ ํ์ ๊ด๋ฆฌ ์์ ๊ตฌํํ๊ธฐ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค.
ํ์ ๊ด๋ฆฌ ์์ ๊ตฌํํ๊ธฐ
๊ฐ์์์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋ค๋ค๋ณธ ํ ๊ณง์ฅ ํ์ ๊ด๋ฆฌ ์์ ๊ตฌํ์ ๋์ ํ๋ค. ์ด ์ฑํฐ์ ํต์ฌ์ ์คํ๋ง์์ ์ฌ์ฉํ๋ ํจํด์ธ Controller - Service - Repository ํจํด์ ๋ํด์ ๊ฐ๋ณ๊ฒ ์ดํด๋ณด๊ณ , ์ด๋ฅผ ์์ ๋ฐฐ์ด MVC์ ์ ์ฉํ์ฌ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋ก์ง๊ณผ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๋ก์ง์ ์ฐ๊ฒฐํด ํ์ ๊ด๋ฆฌ ์์ ๋ฅผ ๊ตฌํํด๋ด๋ ๊ฒ์ ์๋ค. ๋๋ ์ฝ๋์ ๋ํ ๋ถ๋ถ๋ณด๋ค ๊ฐ๋ ์์ฒด์ ์กฐ๊ธ ๋ ์ง์คํด์ ๊ธ์ ์จ๋ด๋ ค๊ฐ๋ณด๋๋ก ํ๊ฒ ๋ค.
Controller - Service - Repository ํจํด ์ ์ฉ
์ผ๋ฐ์ ์ผ๋ก Spring Boot ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ๋ค์์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๊ตฌ์กฐ์ ๋ํ ์ค๋ช
์ฌ๊ธฐ์, ํ์ดํ๋ โ์ถ๋ฐํ๋ ๊ณณ์ด ๋์ฐฉํ๋ ๊ณณ์ ์ฌ์ฉํ๋คโ ์ ๋๋ก ์๊ฐํ๋ฉด ํธํ ๊ฒ ๊ฐ๋ค. ์ฆ, โController๊ฐ Service๋ฅผ ์ฌ์ฉํ๋คโ ์ ๊ฐ์ ๋๋์ด๋ค.
๊ฐ๊ฐ์ ์์๋ค์ ์ญํ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- Domain : ์ ์ ์๊ฒ ์ ๊ณต ํน์ ๊ด๋ฆฌํ๊ณ ์ ํ๋ ํน์ ์ ๋ณด์ ๋ํ ๊ฐ์ฒด์ด๋ค. ์๋ฅผ ๋ค์ด ํ์, ๊ฒ์๊ธ, ๋๊ธ ๋ฑ์ผ๋ก ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ๋ค.
- Controller : ์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊ป ์์ฑํ Controller์ด๋ค. ์น MVC์ Controller์ด๊ธฐ๋ ํ๋ค.
- Service : ์ฐ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ์ ํ์ ์์ด ํต์ฌ์ ์ธ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ ๋ถ๋ถ์ด๋ค.
- Repository : ์ ์ฅ์๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , DB์ ์ง์ ์ ๊ทผํ๋ ๋ถ๋ถ์ด๋ค. ์ฌ๊ธฐ์ Domain ๊ฐ์ฒด๋ฅผ DB์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ค.
๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ด๋ค ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ฅผ ๊ฑฐ์น๊ฒ ๋ ๊ฒ์ด๋ค.
- Tomcat์ ์ํด ํน์ Controller๋ก ์์ฒญ์ด ๋ค์ด์จ๋ค.
- ํด๋น Controller๊ฐ ํน์ Service์ ๋น์ฆ๋์ค ๋ก์ง ์ํ์ ์์ฒญํ๋ค.
- ํด๋น Service๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ฉด์, DB์ ์ ๊ทผํ ํ์๊ฐ ์์ ๋๋ง๋ค Repository์ ์์ฒญํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
๊ตฌํ์ ๋ํ ํน์ง
๋ณดํต Repository๋ฅผ ๊ตฌํํ ๋, Service๋ ์ง์ ์ ์ผ๋ก๋ Repository์ ์ธํฐํ์ด์ค์ ์์กด ๊ด๊ณ๋ฅผ ๊ฐ์ง๋๋ก ์ค๊ณํ๋ค๊ณ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด DB์ ์ข ๋ฅ๊ฐ ๋ฐ๋๊ฑฐ๋, DB์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋๋๋ผ๋ Service์ ๊ตฌํ์ ๋ฐ๊พธ์ง ์๊ณ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์งํฅ์ ์ฅ์ ์ ๋๋ฆด ์ ์๋ค.
๋ํ, Service์ Repository๋ฅผ ๊ตฌํํ๋ค ๋ณด๋ฉด (ํนํ ๊ฐ๋จํ ์์ ์ผ์๋ก ๋) Service์ Repository์ ๊ตฌํ์ด ๊ฑฐ์ ๋น์ทํ๊ฑฐ๋ ํ๋ ์ผ์ด ๊ฑฐ์ ๊ฐ๋ค๊ณ ๋๋ ์ ์๋๋ฐ , ์ด ๋ถ๋ถ์ ์ ์ํด์ผ ํ๋ค. ๊ฐ๋จํ ์์ ๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ ๊ตณ์ด ์์ ํจํด์ ์ ์ฉํ์ง ์์๋ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๋ ๊ทธ๋ ๊ฒ ๋๋ ๊ฐ๋ฅ์ฑ์ด ๋์๋ฐ Repository๋ DB ์ ๊ทผ์ ๋ํํ๋ ์ญํ ์ ๋๋์ด๊ณ Service๋ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ก ์๋ฆฌํน์กฐ๋ฆฌํน์ ํด์ ํ์ํ ํํ๋ก ๋ณํํด Controller์๊ฒ ๋ค์ ๊ฑด๋ค์ฃผ๋ ์ญํ ์ ๋๋์ด๋ค.
Spring MVC ์ ์ฉ
๊ทธ๋ฌ๋ฉด Controller - Service - Repository๋ฅผ ๊ตฌํํ๊ณ ๋๋ฉด MVC์์ ์ด๋๊ฐ M, ์ด๋๊ฐ V, ๊ทธ๋ฆฌ๊ณ ์ด๋๊ฐ C๊ฐ ๋๋ ๊ฒ์ผ๊น? ์๋ฌด๋๋ View๋ ThymeLeaf Template Engine์ ์ฌ์ฉํ๋ ๋ถ๋ถ์ด ๋ ๊ฒ ๊ฐ๊ณ , Controller๋ ์ฐ๋ฆฌ๊ฐ ๊ตฌํํ Controller, ๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง Service์ Repository๊ฐ Model์ด๋ผ๊ณ ์๊ฐํ ์ ์์ ๊ฒ ๊ฐ๋ค.
์ฌ๊ธฐ์ ๋๋ ์ด Spring MVC๊ฐ ์ MVC๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง๋ ๊ฒ์ธ์ง ์๋ฌธ์ ๊ฐ์ง๊ฒ ๋์๋ค. ์๋ํ๋ฉด MVC ํจํด์์๋ ์ฌ์ฉ์์ ์ ๋ ฅ์ด Controller๋ฅผ ํตํด ๋ค์ด์ค๊ณ , ์ด๊ฒ์ผ๋ก ์ธํด Model์ด ์ ๋ฐ์ดํธ ๋๋ฉฐ, ์ด Model์ ๊ธฐ๋ฐ์ผ๋ก View๊ฐ ์ ๋ฐ์ดํธ๋๊ฒ ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ง๊ธ ๋ฐฐ์ด Spring MVC์ ๊ฒฝ์ฐ Model(Service, Repository)๋ฅผ ํตํด ๊ฐ๊ณตํ ๋ฐ์ดํฐ๋ฅผ Controller์๊ฒ ์ ๋ฌํ๊ณ ์ด๊ฒ์ด View Resolver์๊ฒ ์ ๋ฌ๋์ด View๊ฐ ์ ๋ฐ์ดํธ ๋๋ ๊ตฌ์กฐ๋ก ๋์ด์๋ค. ์ฆ, Model์ด View๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ๊ฒ์ด ์๋๋ผ Controller๊ฐ View๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค. ์ด๋ MVP ํจํด์ ๋ ๊ฐ๊น์ง ์๋๋ผ๋ ์๊ฐ์ด ๋ค์๊ณ , Spring MVC๋ผ๋ ์ด๋ฆ์ ์๋ฌธ์ ๊ฐ์ง๊ฒ ๋์๋ค. ์ด์ ๋ํด์ ์กฐ๊ธ ๋ ์์๋ณด์์ผ ํ ๊ฒ ๊ฐ๋ค.
์ด๋ฐ ๋ถ๋ถ์ ์ฐจ์นํ๊ณ , ์ง๊ธ๊น์ง ํ ํ๋ฆ์ ๊ทธ๋๋ก ์ด์ฉํ๋ฉด ํน์ ์ฃผ์์ HTTP method๋ฅผ ๋งคํํ์ฌ Controller๋ก ์์ฒญ์ ๋ฐ๊ณ , ๊ทธ์ ์๋ง๋ ๋น์ฆ๋์ค ๋ก์ง์ Service๋ฅผ ํตํด ์คํํ๊ณ (๊ทธ๋ฆฌ๊ณ ์ด Service๋ DB์ ์ ๊ทผ์ด ํ์ํ ๋๋ง๋ค Repository์ ์์ฒญํ๊ณ ) ์ด๊ฒ์ ๋ค์ Controller์์ ๋ฐ์์ ์ต์ข
๊ฒฐ๊ณผ๋ฅผ return ํ๋ฉด @ResponseBody
๋ผ๋ ์ด๋
ธํ
์ด์
์ด ๋ถ์ด์์ง ์๋ ์ด์ View Resolver๋ฅผ ํตํด์ ํน์ Template์ ์ฐพ์์ ๊ทธ๊ฒ์ html๋ก ๋ ๋๋งํ์ฌ ์ ์ ์๊ฒ ๋ณด๋ด์ฃผ๊ฒ ๋ ๊ฒ์ด๋ค.
๋ค์์
๋ค์ ํฌ์คํธ์์๋ ์ด ์์ ์ ๋ค์ํ DB ์ ๊ทผ ๊ธฐ์ ์ ์ ์ฉํ๋ ๋ด์ฉ์ ๋ํด์ ๊ฐ๋ตํ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค.
๋.