Spring Boot๋ฅผ ์ฒ์ ๊ณต๋ถํ๋ ์ฌ๋์ด ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํด์ ์์ฑํ ํฌ์คํธ์ ๋๋ค. ์ค๊ฐ๋ ๋ฐ ์ค๋ฅ๊ฐ ์์ ์ ์์ผ๋, ๋ฐ๊ฒฌํ์ ๋ค๋ฉด ๊ฐ๊ฐ์์ด ๋๊ธ์ ํตํด์ ์๋ ค์ฃผ์ธ์! ํ์ธํ๋ ๋๋ก ์ ํํ ์ ๋ณด๋ฅผ ํ์ธํด์ ๊ณ ์น๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ์
์ด๋ฒ Spring Boot ์คํฐ๋๋ ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ์ ๊น์ํ๋๊ป์ ์ธํ๋ฐ์ ์ฌ๋ ค์ฃผ์๋ ์๋ฐ ์คํ๋ง ์์ ์ ๋ณต ์๋ฆฌ์ฆ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์งํํ๋ค. ๊ทธ ์๋ฆฌ์ฆ์ ๊ฐ์ฅ ์ฒซ ๊ฐ์์ธ ์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ ์ ๋ค์ด๋ณด๊ณ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
ํด๋น ๊ฐ์๋ ๋ด๊ฐ ๋๋ผ๊ธฐ์ ํฌ๊ฒ ๋ค์์ ์ปจํ ์ธ ๋ฅผ ๊ฐ์ง๊ณ ์์๋ค.
- Spring ๊ธฐ์ด ๊ธฐ๋ฅ ์จ๋ณด๊ธฐ
- Spring Bean๊ณผ ์์กด ๊ด๊ณ
- ํ์ ๊ด๋ฆฌ ์์ ๊ตฌํํ๊ธฐ
- Controller - Service - Repository ํจํด ์ ์ฉ
- Spring MVC ์ ์ฉ
- ์์ ์์ ์ ๋ค์ํ DB ์ ๊ทผ ๊ธฐ์ ์ ์ฉ
- JDBC
- JDBC Template
- JPA
- Spring Data JPA
- ์์ ์์ ์ ๊ฐ๋จํ AOP ์ ์ฉ
์ด ํฌ์คํธ์์๋ ํ์ ๊ด๋ฆฌ ์์ ์ ๋ค์ํ DB ์ ๊ทผ ๊ธฐ์ ์ ์ ์ฉํ๋ ๊ฒ์ ๋ํด์ ๊ฐ๋ตํ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค. ์ฝ๋์ ๋ํ ๋ถ๋ถ์ ์ฝ๊ฐ ๋ฐฐ์ ํ๊ณ , ๊ฐ๋ ์ ์ธ ๋ด์ฉ๊ณผ ๋๋ ์ ์ ์ค์ฌ์ผ๋ก ์ ์ด๋ณด๋ ค ํ๋ค.
๋ค์ํ DB ์ ๊ทผ ๊ธฐ์
์์ JDBC
JDBC๋ ์๋ฐ์์ DB์ ์ ์ํ ์ ์๋๋ก ํ๋ ์๋ฐ API์ด๋ค. ์ฝ๊ฒ ์ด์ผ๊ธฐํด๋ณด์๋ฉด, DBMS ์ฝ์ ์์์ ์ฟผ๋ฆฌ๋ฅผ ๋์ ธ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ ๊ฒ์ ์๋ฐ ์ฝ๋ ์์์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ธฐ์ ์ ๋๋ก ์๊ฐํ๋ฉด ๋๋ค.
JDBC๋ก Repository ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๊ฐ ๋ฉ์๋๋ง๋ค ๋๋ต ๋ค์์ ๊ณผ์ ์ผ๋ก ์์ ์ ์ํํ๊ฒ ๋๋ค.
- ์ฟผ๋ฆฌ ์ค์
- ์ปค๋ฅ์ ๋ฐ์์ค๊ธฐ
- ์ฟผ๋ฆฌ ์คํ ์ค๋น
- ์ฟผ๋ฆฌ ์คํ
- ์ปค๋ฅ์ ๋ซ๊ธฐ
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ๋ค์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ค ๊ตฌํํด์ผํ๋ค. ๊ทธ๋์ ์ฝ๋๊ฐ ๊ธธ๊ณ , ๋ก์ง์ ํ์ ํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
์ฌ์ค์ ์ต๊ทผ์๋ ์ฐ์ง ์๋ ๊ธฐ์ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
Spring JdbcTemplate
JDBC๋ก๋ง ๊ตฌํ์ ํ๋ฉด ์์ ๋จ๊ณ๋ณ๋ก ์ฝ๋๋ฅผ ๋ค ๊ตฌํํด์ผ ํ๋ค๊ณ ํ๋ค. ํ์ง๋ง JdbcTemplate๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ๋ํญ ์ค์ผ ์ ์๋ค. ํ์ง๋ง ์ฟผ๋ฆฌ๋ ๊ธฐ์กด๊ณผ ๊ฐ์ด ์์ฑ์ ํด์ฃผ์ด์ผ ํ๋ค.
์์ JDBC์์ try ... catch ...
๋ก ๋๋ฐฐ๋์ด ์๋ ๋ถ๋ถ๋ค์ ๋ง์ด ์์จ ์ ์๊ณ , ์ปค๋ฅ์
๊ณผ ๊ด๋ จํด์ ์ ๊ฒฝ์ ๋ ์ธ ์ ์๊ฒ ํด์ค๋ค. ๊ทธ ๋๋ถ์ ์ฝ๋ ์์์ ๋ก์ง์ด ๋ถ๋ช
ํ๊ฒ ๋ณด์ด๊ฒ ๋๋ค.
์ต๊ทผ์๋ ์ค๋ฌด์์ ์ฌ์ฉํ๋ ๊ณณ์ด ์๋ค๊ณ ํ๋ค.
JPA
JPA๋ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์์ ์ค ๋ฟ ์๋๋ผ, ๊ทธ๋ฅ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ง ์๊ณ ์๋ฐ ์ฝ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์ ์๊ฒ ๋์์ค๋ค. ๋ํ ๊ฐ๋ฐ์ ์์ด์ ๊ด์ ์ ๋ณํ๋ฅผ ๊ฐ์ ธ์ค๋๋ฐ, SQL๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ค์ฌ์ผ๋ก ์ค๊ณํ๊ณ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ์ฒด๋ฅผ ์ค์ฌ์ผ๋ก ์ค๊ณํ๊ณ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์์ค๋ค.
SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ง ์๊ณ ์ ์ฒด ํ๋ก์ ํธ๋ฅผ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์ค์ง ์๋ฐ ์ฝ๋๋ก ์์ฑํ ์ ์๊ฒ ๋๋ ์์ฐ์ฑ์ด ํฌ๊ฒ ๋์์ง๋ค.
JDBC ๋ฅ์ ๋ค๋ฅด๊ฒ Entity๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํ๋๋ฐ, ๋ณธ ๊ฐ์์์๋ ์ผ๋จ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๋๋ฉ์ธ ๊ฐ์ฒด์ @Entity
์ด๋
ธํ
์ด์
์ ๋ถ์ฌ์ ๊ฐ๋จํ ๊ตฌํํ์๋ค. Entity๋ ๊ฐ๋จํ ์ค๋ช
ํ์๋ฉด ์ค์ DB์ ํ
์ด๋ธ์ ๋งค์นญ์ด ๋๋ ํด๋์ค๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. Entity ํด๋์ค ๋ด๋ถ์ ํ๋๋ค์ด DB ํ
์ด๋ธ์ Column์ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ JPA๋ฅผ ํตํ ๋ชจ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํธ๋์ญ์
์์์ ์คํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์, JPA๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ Service ํด๋์ค์ @Transactional
์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ์ฌ ๊ฐ ๋ฉ์๋๊ฐ ์คํ๋ ๋๋ง๋ค ํธ๋์ญ์
์ ์์ํ๊ฒ ํด์ฃผ์ด์ผ ํ๋ค.
Spring Data JPA
๊ฐ์ธ์ ์ผ๋ก ์ด๋ ํ ๋ฐฉ๋ฒ(๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ ๋ฑ)์ ํตํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์๋ง ์๋ค๋ฉด, ๋ด๋ถ ๊ตฌํ์๋ ํฌ๊ฒ ์ ๊ฒฝ์ฐ์ง ์๊ณ ์ผ๋จ ์ฌ์ฉํ๋ ํธ์ธ๋ฐ, ์ด Spring Data JPA๋ ์ ๋ง ๊ณต๋ถ๋ฅผ ํด์ ๋์ ์๋ฆฌ์ ๋ํด ์กฐ๊ธ์ด๋ผ๋ ๊นจ๋ซ์ง ๋ชปํ๋ค๋ฉด ์ฐ๊ธฐ๊ฐ ๋๋ ค์ธ ์ ๋๋ก ๋๋ฌด ๊ฐํธํ๊ฒ ๋์ด์๋ค.
Repository์ ๊ตฌํ ํด๋์ค๊ฐ ์์ด ๊ทธ๋ฅ ์ธํฐํ์ด์ค๋ง ๋ฃ์ด๋๋ฉด ๊ฐ๋ฐ์ด ๋๋๋ค. ์ด๊ฒ ๋ง๋๊ฑด์ง ์๋ฌธ์ด ๋ค ์ ๋์ ํธ์์ฑ์ด๋ค. ์ธ์ด์ ํ๋ ์์ํฌ๋ฅผ ๋ง๋ก ํ๊ณ DB๋ฅผ ๋ฐฑ์๋์ ๋ฌผ๋ฆด ๋ ํ์์ ์ผ๋ก ์์ฑํ๊ฒ ๋๋ CRUD ์ฝ๋๋ ๊ทธ๋ฅ Spring Data JPA๊ฐ ์์์ ๋ค ์ง์ค๋ค๋ ์๋ฏธ์ด๋ค.
์ค๋ฌด์์๋ JPA์ Spring Data JPA๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๊ณ , ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํ ๋์ ์ฟผ๋ฆฌ๋ Querydsl์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ์ด๋ ๊ฒ ํด๋ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ์ฟผ๋ฆฌ๋ JPA๊ฐ ์ ๊ณตํ๋ ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, JdbcTemplate๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค๊ณ ํ๋ค.
Spring Data JPA์ ์์ ์ฝ๋๋ฅผ ๋ณด๊ณ , ์ด๋ฒ Spring Boot ์คํฐ๋๋ฅผ ํ๊ณ ๋์๋ ๋ฌด์กฐ๊ฑด JPA ๊ฐ์๋ ์๊ฐํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ๊ฐ์ง๊ฒ ๋์๋ค.
๋ค์์
๋ค์์ผ๋ก AOP์ ๋ํด์ ์ ๋ฆฌํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ง๋ง, ์์ง ์ ๋ฆฌํ๊ธฐ์๋ ๋๋ฌด ์๋ฟ์ง ์์์ ์กฐ๊ธ ๋ ๊ฐ๋ ์ ์ผ๋ก ์ดํดํ ํ์ ๋ณ๋๋ก ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค. ์ด์ ์คํ๋ง ํต์ฌ ์๋ฆฌ ๊ฐ์๋ฅผ ๊ณต๋ถํด์ผ๊ฒ ๋ค.
๋.