๋ฐฑ์๋ ๊ฐ๋ฐ์๋ผ๋ฉด ๋ฐ๋์ ์์์ผํ๋
์คํ๋ง ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ Part.2
๐ฃ ํ์ธํด์ฃผ์ธ์!
๋ณธ ๊ฐ์๋ ์๋ฐ ์คํ๋ง ์์ ์ ๋ณต ์๋ฆฌ์ฆ์ 7๋ฒ์งธ ๊ฐ์์
๋๋ค. ์ฐ์ํํ์ ๋ค ์ต์ฐ์ ๊ธฐ์ ์ด์ฌ ๊น์ํ์ ์คํ๋ง ์์ ์ ๋ณต ๋ก๋๋งต์ ๋จผ์ ํ์ธํด์ฃผ์ธ์.
โข ๋ก๋๋งต ๋งํฌ: https://www.inflearn.com/roadmaps/373 (ํด๋ฆญํ๋ฉด ๋ฐ๋ก๊ฐ๊ธฐ)
๊น์ํ์ ์คํ๋ง DB
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์์ฑํ๊ธฐ
๋ฐฑ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋๋ก ๊ฐ๋ฐํ๋ ค๋ฉด HTTP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ MVC์ DB๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ด๋ผ๋ 2๊ฐ์ง ํฐ ์ถ์ ์์ฑํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์์ ๊ฐ์๋ฅผ ํตํด HTTP์ ์คํ๋ง MVC๋ฅผ ์์ฑํ์ผ๋, ์ด์ ๋จ์ ํ๋์ ์ถ์ธ ์คํ๋ง DB ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ์์ฑํด์ผ ํฉ๋๋ค.
โ
์ ์ ์ง์์ ํ์ธํด์ฃผ์ธ์.
์ง๋ ๊ฐ์์ธ <์คํ๋ง DB 1ํธ> ๋ฅผ ํตํด ์คํ๋ง DB์ ์๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋์ง ํ์ธํด ์ฃผ์ธ์.
1. ์คํ๋ง ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ๊ธฐ๋ณธ ์๋ฆฌ ์ดํด
2. ์ค๋ฌด์์ ํ์ฉ๋๋ ์ฝ๋๋ก ์ง์ ๊ฐ๋ฐ
์คํ๋ง DB 1ํธ ๊ฐ์๋ฅผ ํตํด DB ์ ๊ทผ ๊ธฐ์ ์ ํต์ฌ ์๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ์ต๋๋ค. ์ด๋ฒ ์คํ๋ง DB 2ํธ์์๋ 1ํธ์ ๊ธฐ๋ฐ ์์ ์ค๋ฌด์ ๊ผญ ํ์ํ ๋ค์ํ ํ์ฉ ๊ธฐ์ ๋ค์ ํ์ตํฉ๋๋ค. 2ํธ์ ํฌ๊ฒ 3๋ถ๋ถ์ผ๋ก ๋๋์ด ์์ต๋๋ค.
1) ๋ค์ํ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ดํด
JdbcTemplate, MyBatis, JPA, Spring Data JPA, Querydsl ๊ฐ์ ์ค๋ฌด์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ค์ํ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ๋ค์ ์ค์ ์์ ๋ฅผ ํตํด ์ ์ง์ ์ผ๋ก ๋ฐ์ ์ํค๋ฉด์ ํ์ตํฉ๋๋ค. ์ด ๊ณผ์ ์ ํตํด ๊ฐ๊ฐ์ ๊ธฐ์ ๋ค์ด ์ ํ์ํ์ง, ๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ธฐ์ ๋ค์ ์ฅ๋จ์ ์ ์ฝ๋๋ก ๊ฐ๋ฐํ๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
2) ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ๊ณผ ํ
์คํธ
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ๊ฒฐ๊ตญ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ด ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ฅํ๊ณ ์กฐํํ ์ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๊ฐ์์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๋ํ๋ ์ํฉ์์ ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ํ๋ ๊ฒ์ด ์ข์์ง ๋จ๊ณ์ ์ผ๋ก ์ค๋ช
ํฉ๋๋ค.
3) ์คํ๋ง ํธ๋์ญ์
์ ๊น์ ์ดํด
์คํ๋ง DB 1ํธ์์๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ํธ๋์ญ์
๊ธฐ๋ฅ์ด ์ ํ์ํ๊ณ , ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ด๋ถ ์๋ฆฌ๋ฅผ ์์๋ณด์์ต๋๋ค. ์ด๋ฒ ์๊ฐ์๋ ์คํ๋ง ํธ๋์ญ์
์ ๋งค์ฐ ๊น์ด ์๊ฒ ํ์ตํ๊ณ , ์ค๋ฌด ํ์ฉ ๋ฐฉ์์ ์์๋ด
๋๋ค.
- ํธ๋์ญ์
AOP ์ฌ์ฉ ์ ์ค๋ฌด ์ฃผ์์ฌํญ
- ์คํ๋ง ํธ๋์ญ์
์ ๋ค์ํ ์ต์
- ์์ธ ์ฒ๋ฆฌ์ ์คํ๋ง ํธ๋์ญ์
์ด ์ปค๋ฐ๋๊ณ ๋กค๋ฐฑ๋๋ ๋ด๋ถ ์๋ฆฌ
- ํธ๋์ญ์
์ ํ ์ต์
๊ณผ ๋ด๋ถ ๋์ ๋ฐฉ์
๊ฐ์ ๋ชฉํ
- ๋ชฉํ: ์ค๋ฌด ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋ ํ์ํ ๋ฐฉ๋ํ DB ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ์์ฑํ๋ ๊ฒ์ด ์ด ๊ฐ์์ ๋ชฉํ์
๋๋ค.
- ๊ธฐ์ด๋ถํฐ ์ค๋ฌด๊น์ง: ์ค๋ฌด ๊ฐ๋ฐ์ ์ํ ๋ด์ฉ์ด ๋ง์ง๋ง, ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ๊ฒฝํ์ด ์๋ ๊ฐ๋ฐ์๋ ์ ์ํ ์ ์๊ฒ ๋จ๊ณ์ ์ผ๋ก ๊ตฌ์ฑํ์์ต๋๋ค. ์ฐธ๊ณ ๋ก ์คํ๋ง DB 1ํธ์ ๋จผ์ ๋ฃ๊ณ ์คํ๋ง DB 2ํธ์ ํ์ตํด์ผ ํฉ๋๋ค.
- ์ค๋ฌด ์์ ์ค์ฌ: ์ค๋ฌด์์ ์คํ๋ง์ผ๋ก ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋ ํ์ํ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ์์ ๋ฅผ ํตํด ์์ฐ์ค๋ฝ๊ฒ ํ์ตํ๋ฉฐ, ์ค๋ฌด์์์ Best Practice๋ฅผ ์ ์ํด ๋๋ฆฝ๋๋ค.
- ๊ฐ๊ฒฐํจ: ์ค๋ฌด์์ ์ฌ์ฉํ์ง ์๋ ์ค๋๋ ๊ธฐ๋ฅ์ ๊ณผ๊ฐํ๊ฒ ์ ์ธํ์ต๋๋ค. ์ต์ ์ค๋ฌด์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ด์ฉ์ ์์ฃผ๋ก ์ค๋ช
ํฉ๋๋ค.
๊ฐ์ ๋ด์ฉ
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - JdbcTemplate
SQL์ ์ง์ ์ฌ์ฉํ ๋ ์คํ๋ง์ด ์ ๊ณตํ๋ JdbcTemplate์ ์ข์ ์ ํ์
๋๋ค. ์ด ๊ธฐ์ ์ JDBC๋ฅผ ๋งค์ฐ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ JDBC๋ฅผ ์ง์ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ๋๋ถ๋ถ์ ๋ฐ๋ณต ์์
์ ๋์ ์ฒ๋ฆฌํด ์ค๋๋ค.
* ๊ฐ๋ฐ์๋ SQL์ ์์ฑํ๊ณ , ์ ๋ฌํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ํ๊ณ , ์๋ต ๊ฐ์ ๋งคํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
* ์ค์ ๋์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ JdbcTemplate์ ์ ์ฉํ๋ฉด์ ํด๋น ๊ธฐ์ ์ ์ฅ๋จ์ ์ ์ดํดํฉ๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - MyBatis
MyBatis๋ ์์ ์ค๋ช
ํ JdbcTemplate๋ณด๋ค ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. JdbcTemplate๊ณผ ๋น๊ตํด์ MyBatis์ ๊ฐ์ฅ ๋งค๋ ฅ์ ์ธ ์ ์ SQL์ XML์ ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์๊ณ ๋ ๋์ ์ฟผ๋ฆฌ๋ฅผ ๋งค์ฐ ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์๋ค๋ ์ ์
๋๋ค. ๊ฐ์์์๋ ์ค์ ๋์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ MyBatis๋ฅผ ์ง์ ์ฝ๋๋ก ์ ์ฉํ๋ฉด์ ํด๋น ๊ธฐ์ ์ ์ฅ๋จ์ ์ ์ดํดํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - JPA
์คํ๋ง๊ณผ JPA๋ ์๋ฐ ์ํฐํ๋ผ์ด์ฆ(๊ธฐ์
) ์์ฅ์ ์ฃผ๋ ฅ ๊ธฐ์ ์
๋๋ค. ์คํ๋ง์ด DI ์ปจํ
์ด๋๋ฅผ ํฌํจํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๋ฉด, JPA๋ ORM ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค. JPA๋ ์คํ๋ง ๋งํผ์ด๋ ๋ฐฉ๋ํ๊ณ , ํ์ตํด์ผํ ๋ถ๋๋ ๋ง์ง๋ง, ํ๋ฒ ๋ฐฐ์๋๋ฉด ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์์ ๋งค์ฐ ํฐ ์์ฐ์ฑ์ ํฅ์์ ์ป์ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ํด๋น ๊ธฐ์ ๋ค์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๊ณผ, ํด๋น ๊ธฐ์ ์ ์ ์ฌ์ฉํด์ผ ํ๋์ง ๊ฐ๊ฐ์ ์ฅ๋จ์ ๊ณผ ์ ์ฒด ํฐ ๊ทธ๋ฆผ์ ์์๋ด
๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - ์คํ๋ง ๋ฐ์ดํฐ JPA
์คํ๋ง ๋ฐ์ดํฐ JPA๋ JPA๋ฅผ ๋์ฑ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋๋ก ๋์์ฃผ๋ ๊ธฐ์ ์
๋๋ค. ์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ๊ธฐ๋ณธ์ ์ธ CRUD ๊ธฐ๋ฅ๋ค์ ๋ชจ๋ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์์ฑํด์ผ ํ๋ ๊ฐ๋ฐ ์ฝ๋๋ฅผ ํ์ ์ ์ผ๋ก ์ค์ผ ์ ์์ต๋๋ค. ๊ฐ์์์๋ ์ค์ ๋์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ์ง์ ์ฝ๋๋ก ์ ์ฉํ๋ฉด์ ํด๋น ๊ธฐ์ ์ ์ฅ๋จ์ ์ ์ดํดํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - Querydsl
JPA๋ ๋ณต์กํ ์ฟผ๋ฆฌ๋, ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ต์ต๋๋ค. Querydsl์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋งค์ฐ ํธ๋ฆฌํ๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๊ผญ ์ฌ์ฉํด์ผ ํ๋ ์ถ์ฒ ๊ธฐ์ ์
๋๋ค. ๊ฐ์์์๋ ์ค์ ๋์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ Querydsl๋ฅผ ์ง์ ์ฝ๋๋ก ์ ์ฉํ๋ฉด์ ํด๋น ๊ธฐ์ ์ ์ฅ๋จ์ ์ ์ดํดํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - ํ
์คํธ
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ๊ฒฐ๊ตญ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ด ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ฅํ๊ณ ์กฐํํ ์ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๊ฐ์์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๋ํ๋ ์ํฉ์์ ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ํ๋ ๊ฒ์ด ์ข์์ง ๋จ๊ณ์ ์ผ๋ก ์ค๋ช
ํฉ๋๋ค. ์๋ฅผ ๋ค์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ๋ ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ๋์ง ์ค๋ช
ํ๊ณ , @Transactional, ์๋ฒ ๋๋ ๋ชจ๋ DB๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ฝ๋๋ก ์์๋ด
๋๋ค.
์คํ๋ง ํธ๋์ญ์
์ดํด
DB 1ํธ์์๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ํธ๋์ญ์
๊ธฐ๋ฅ์ด ์ ํ์ํ๊ณ , ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ด๋ถ ์๋ฆฌ๋ฅผ ์์๋ณด์์ต๋๋ค. ์ด๋ฒ ์๊ฐ์๋ ์คํ๋ง ํธ๋์ญ์
AOP ์ฌ์ฉ ์ ์ค๋ฌด ์ฃผ์์ฌํญ, ์คํ๋ง ํธ๋์ญ์
์ ๋ค์ํ ์ต์
, ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ์คํ๋ง ํธ๋์ญ์
์ด ์ปค๋ฐ๋๊ณ ๋กค๋ฐฑ๋๋ ๋ด๋ถ ์๋ฆฌ์ ๊ฐ์ด ์คํ๋ง ํธ๋์ญ์
์ด ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ๊น์ด ์๊ฒ ์์ธํ ์์๋ด
๋๋ค.
์คํ๋ง ํธ๋์ญ์
์ ํ
์คํ๋ง์ ํธ๋์ญ์
์ ํ๋ฅผ ๋งค์ฐ ๊น์ด ์๊ฒ ๋ค๋ฃน๋๋ค. ํธ๋์ญ์
์ ํ๊ฐ ์ ํ์ํ์ง ์ดํดํ๊ณ , ๋ค์ํ ํธ๋์ญ์
์ ํ ์ต์
, ์ ํ ์ต์
์ ๋ฐ๋ฅธ ์์ธ ์ฒ๋ฆฌ, ์ค๋ฌด์์ ํธ๋์ญ์
์ ํ ์ต์
์ ์ฌ์ฉํ ๋์ ์ฃผ์์ ์ ๋ค๋ฃน๋๋ค.
์ง์๊ณต์ ์
๊น์ํ๋์ ํ๋ง๋
๋ฐฑ์๋ ๊ฐ๋ฐ์๋ MVC์ DB ์ ๊ทผ ๊ธฐ์ ์ด๋ผ๋ 2๊ฐ์ง ํฐ ์ถ์ ๊ผญ ์์ฑํด์ผ ํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ด ๋ ๊ฐ์ง ์ถ์ ์์ฑํ๊ณ , ๋จ๋จํ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ์ ์๋๋ก ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
๊ฐ์ ์์
์ฐ๊ด ๋ก๋๋งต