์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ ๋ฐ์ ๋น ๋ฅด๊ฒ ํ์ตํ ์ ์์ต๋๋ค.
์คํ๋ง DB 2ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ํ์ฉ ๊ธฐ์ ์คํ ์์ ์์!
์๋
ํ์ธ์. ์ฌ๋ฌ๋ถ^^!
๋๋์ด ์คํ๋ง DB 2ํธ ๊ฐ์๊ฐ ์คํ ์ค๋น์ ๋์
ํ์ต๋๋ค. ์ค๋๊ธฐ๊ฐ ๊ธฐ๋ค๋ ค์ฃผ์๊ณ ์์ํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
์ถ์ ์์ ์ผ์ ๋ค์์ฃผ 5์ 30์ผ(์) ~ 6์ 3(๊ธ) ์ฌ์ด์ DB 2ํธ์ด ์ถ์๋ ์์ ์ ๋๋ค^^!
- ๊ฐ์๋ช
: ์คํ๋ง DB 2ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ํ์ฉ ๊ธฐ์
- ๊ฐ์ ์: 85๊ฐ
- ๊ฐ์ ์๋ฃ PDF: 250์ฅ
- ๊ฐ์ ์๋ฃ PPT: 173์ฅ
์์ธํ ๊ฐ์ ์๊ฐ๋ ๋ค์ ๋ด์ฉ์ ์ฐธ๊ณ ํด์ฃผ์ธ์.
๋ฐฑ์๋ DB ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ์์ฑ
๋ฐฑ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋๋ก ๊ฐ๋ฐํ๋ ค๋ฉด HTTP๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ MVC์ DB๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ด๋ผ๋ 2๊ฐ์ง ํฐ ์ถ์ ์์ฑํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์์ ๊ฐ์๋ฅผ ํตํด HTTP์ ์คํ๋ง MVC๋ฅผ ์์ฑํ๊ณ , ์ด์ ๋จ์ ํ๋์ ์ถ์ธ ์คํ๋ง DB ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ์์ฑํด์ผ ํฉ๋๋ค.
์คํ๋ง DB1ํธ ๊ฐ์๋ฅผ ํตํด DB ์ ๊ทผ ๊ธฐ์ ์ ํต์ฌ ์๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ์ต๋๋ค. ์ด๋ฒ ์คํ๋ง DB 2ํธ์์๋ 1ํธ์ ๊ธฐ๋ฐ ์์ ์ค๋ฌด์ ๊ผญ ํ์ํ ๋ค์ํ ํ์ฉ ๊ธฐ์ ๋ค์ ํ์ตํฉ๋๋ค. 2ํธ์ ํฌ๊ฒ 3๋ถ๋ถ์ผ๋ก ๋๋์ด ์์ต๋๋ค.
๋ค์ํ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ดํด
JdbcTemplate, MyBatis, JPA, Spring Data JPA, Querydsl ๊ฐ์ ์ค๋ฌด์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ค์ํ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ๋ค์ ์ค์ ์์ ๋ฅผ ํตํด ์ ์ง์ ์ผ๋ก ๋ฐ์ ์ํค๋ฉด์ ํ์ตํฉ๋๋ค. ์ด ๊ณผ์ ์ ํตํด ๊ฐ๊ฐ์ ๊ธฐ์ ๋ค์ด ์ ํ์ํ์ง, ๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ธฐ์ ๋ค์ ์ฅ๋จ์ ์ ์ฝ๋๋ก ๊ฐ๋ฐํ๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ๊ณผ ํ
์คํธ
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ๊ฒฐ๊ตญ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ด ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ฅํ๊ณ ์กฐํํ ์ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๊ฐ์์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๋ํ๋ ์ํฉ์์ ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ํ๋ ๊ฒ์ด ์ข์์ง ๋จ๊ณ์ ์ผ๋ก ์ค๋ช
ํฉ๋๋ค.
์คํ๋ง ํธ๋์ญ์
์ ๊น์ ์ดํด
์คํ๋ง DB1ํธ์์๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ํธ๋์ญ์
๊ธฐ๋ฅ์ด ์ ํ์ํ๊ณ , ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ด๋ถ ์๋ฆฌ๋ฅผ ์์๋ณด์์ต๋๋ค.
์ด๋ฒ ์๊ฐ์๋ ์คํ๋ง ํธ๋์ญ์
์ ๋งค์ฐ ๊น์ด์๊ฒ ํ์ตํ๊ณ , ์ค๋ฌด ํ์ฉ ๋ฐฉ์์ ์์๋ด
๋๋ค.
* ํธ๋์ญ์
AOP ์ฌ์ฉ์ ์ค๋ฌด ์ฃผ์์ฌํญ
* ์คํ๋ง ํธ๋์ญ์
์ ๋ค์ํ ์ต์
* ์์ธ ์ฒ๋ฆฌ์ ์คํ๋ง ํธ๋์ญ์
์ด ์ปค๋ฐ๋๊ณ ๋กค๋ฐฑ๋๋ ๋ด๋ถ ์๋ฆฌ
* ํธ๋์ญ์
์ ํ ์ต์
๊ณผ ๋ด๋ถ ๋์ ๋ฐฉ์
- ๋ชฉํ: ์ค๋ฌด ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋ ํ์ํ ๋ฐฉ๋ํ DB ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ์์ฑํ๋ ๊ฒ์ด ์ด ๊ฐ์์ ๋ชฉํ์
๋๋ค
- ๊ธฐ์ด๋ถํฐ ์ค๋ฌด๊น์ง: ์ค๋ฌด ๊ฐ๋ฐ์ ์ํ ๋ด์ฉ์ด ๋ง์ง๋ง, ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ๊ฒฝํ์ด ์๋ ๊ฐ๋ฐ์๋ ์ ์ํ ์ ์๊ฒ ๋จ๊ณ์ ์ผ๋ก ๊ตฌ์ฑํ์์ต๋๋ค. ์ฐธ๊ณ ๋ก ์คํ๋ง DB 1ํธ์ ๋จผ์ ๋ฃ๊ณ ์คํ๋ง DB 2ํธ์ ํ์ตํด์ผ ํฉ๋๋ค.
- ๊ฐ๋
๋ถํฐ ํ์ฉ๊น์ง: ๋จ์ํ ๊ธฐ์ ์ ์ฌ์ฉ๋ฒ์ ์ค๋ช
ํ๋ ๊ฒ์ด ์๋๋ผ, ์ด ๊ธฐ์ ์ด ์ ํ์ํ๊ณ , ์ด๋ป๊ฒ ๋์๋์ง ํต์ฌ ์๋ฆฌ์ ํ์ฉ ๋ฐฉ์์ ํจ๊ป ์ค๋ช
ํฉ๋๋ค.
- ์ค๋ฌด ์์ ์ค์ฌ: ์ค๋ฌด์์ ์คํ๋ง์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋ ํ์ํ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ์์ ๋ฅผ ํตํด ์์ฐ์ค๋ฝ๊ฒ ํ์ตํ๋ฉฐ, ์ค๋ฌด ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ์ ์ํด๋๋ฆฝ๋๋ค.
- ๊ฐ๊ฒฐํจ: ์ค๋ฌด์์ ์ฌ์ฉํ์ง ์๋ ์ค๋๋ ๊ธฐ๋ฅ์ ๊ณผ๊ฐํ๊ฒ ์ ์ธํ์ต๋๋ค. ์ต์ ์ค๋ฌด์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ด์ฉ ์ค์ฌ์ผ๋ก ์ค๋ช
ํฉ๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - JdbcTemplate
SQL์ ์ง์ ์ฌ์ฉํ ๋ ์คํ๋ง์ด ์ ๊ณตํ๋ JdbcTemplate์ ์ข์ ์ ํ์
๋๋ค. ์ด ๊ธฐ์ ์ JDBC๋ฅผ ๋งค์ฐ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ JDBC๋ฅผ ์ง์ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ๋๋ถ๋ถ์ ๋ฐ๋ณต ์์
์ ๋์ ์ฒ๋ฆฌํด์ค๋๋ค.
* ๊ฐ๋ฐ์๋ SQL์ ์์ฑํ๊ณ , ์ ๋ฌํ ํ๋ฆฌ๋ฏธํฐ๋ฅผ ์ ์ํ๊ณ , ์๋ต ๊ฐ์ ๋งคํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
* ์ฐ๋ฆฌ๊ฐ ์๊ฐํ ์ ์๋ ๋๋ถ๋ถ์ ๋ฐ๋ณต ์์
์ ๋์ ์ฒ๋ฆฌํด์ค๋๋ค.
๊ฐ์์์๋ ์ค์ ๋์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ JdbcTemplate์ ์ง์ ์ฝ๋๋ก ์ ์ฉํ๋ฉด์ ํด๋น ๊ธฐ์ ์ ์ฅ๋จ์ ์ ์ดํดํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - MyBatis
MyBatis๋ ์์ ์ค๋ช
ํ JdbcTemplate๋ณด๋ค ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
JdbcTemplate๊ณผ ๋น๊ตํด์ MyBatis์ ๊ฐ์ฅ ๋งค๋ ฅ์ ์ธ ์ ์ SQL์ XML์ ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์๊ณ ๋ ๋์ ์ฟผ๋ฆฌ๋ฅผ ๋งค์ฐ ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์๋ค๋ ์ ์
๋๋ค.
๊ฐ์์์๋ ์ค์ ๋์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ MyBatis๋ฅผ ์ง์ ์ฝ๋๋ก ์ ์ฉํ๋ฉด์ ํด๋น ๊ธฐ์ ์ ์ฅ๋จ์ ์ ์ดํดํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - JPA
์คํ๋ง๊ณผ JPA๋ ์๋ฐ ์ํฐํ๋ผ์ด์ฆ(๊ธฐ์
) ์์ฅ์ ์ฃผ๋ ฅ ๊ธฐ์ ์
๋๋ค.
์คํ๋ง์ด DI ์ปจํ
์ด๋๋ฅผ ํฌํจํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๋ฉด, JPA๋ ORM ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค.
JPA๋ ์คํ๋ง ๋งํผ์ด๋ ๋ฐฉ๋ํ๊ณ , ํ์ตํด์ผํ ๋ถ๋๋ ๋ง์ต๋๋ค. ํ์ง๋ง ํ๋ฒ ๋ฐฐ์๋๋ฉด ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์์ ๋งค์ฐ ํฐ ์์ฐ์ฑ์ ํฅ์์ ์ป์ ์ ์์ต๋๋ค. ๋ํ์ ์ผ๋ก JdbcTemplate์ด๋ MyBatis ๊ฐ์ SQL ๋งคํผ ๊ธฐ์ ์ SQL์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํด์ผ ํ์ง๋ง, JPA๋ฅผ ์ฌ์ฉํ๋ฉด SQL๋ ๋ง์ ๋ถ๋ถ JPA๊ฐ ๋์ ์์ฑํ๊ณ ์ฒ๋ฆฌํด์ค๋๋ค.
์ค๋ฌด์์๋ JPA๋ฅผ ๋์ฑ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด ์คํ๋ง ๋ฐ์ดํฐ JPA์ Querydsl์ด๋ผ๋ ๊ธฐ์ ์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
JPA, ์คํ๋ง ๋ฐ์ดํฐ JPA, Querydsl์ ๊ฐ๊ฐ ๋ณ๋์ ๊ฐ์๋ก ๋ค๋ฃฐ ์ ๋๋ก ๋งค์ฐ ๋ฐฉ๋ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํด๋น ๊ธฐ์ ๋ค์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๊ณผ, ํด๋น ๊ธฐ์ ์ ์ ์ฌ์ฉํด์ผ ํ๋์ง ๊ฐ๊ฐ์ ์ฅ๋จ์ ๊ณผ ์ ์ฒด ํฐ ๊ทธ๋ฆผ์ ์์๋ด
๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - ์คํ๋ง ๋ฐ์ดํฐ JPA
์คํ๋ง ๋ฐ์ดํฐ JPA๋ JPA๋ฅผ ๋์ฑ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋๋ก ๋์์ฃผ๋ ๊ธฐ์ ์
๋๋ค.
์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ๊ธฐ๋ณธ์ ์ธ CRUD ๊ธฐ๋ฅ๋ค์ ๋ชจ๋ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์์ฑํด์ผ ํ๋ ๊ฐ๋ฐ ์ฝ๋๋ฅผ ํ์ ์ ์ผ๋ก ์ค์ผ ์ ์์ต๋๋ค.
๊ฐ์์์๋ ์ค์ ๋์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ์ง์ ์ฝ๋๋ก ์ ์ฉํ๋ฉด์ ํด๋น ๊ธฐ์ ์ ์ฅ๋จ์ ์ ์ดํดํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - Querydsl
JPA๋ ๋ณต์กํ ์ฟผ๋ฆฌ๋, ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ต์ต๋๋ค. Querydsl์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋งค์ฐ ํธ๋ฆฌํ๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๊ผญ ์ฌ์ฉํด์ผ ํ๋ ์ถ์ฒ ๊ธฐ์ ์
๋๋ค.
๊ฐ์์์๋ ์ค์ ๋์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ Querydsl๋ฅผ ์ง์ ์ฝ๋๋ก ์ ์ฉํ๋ฉด์ ํด๋น ๊ธฐ์ ์ ์ฅ๋จ์ ์ ์ดํดํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ - ํ
์คํธ
๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ๊ฒฐ๊ตญ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ด ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ฅํ๊ณ ์กฐํํ ์ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
๊ฐ์์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๋ํ๋ ์ํฉ์์ ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ํ๋ ๊ฒ์ด ์ข์์ง ๋จ๊ณ์ ์ผ๋ก ์ค๋ช
ํฉ๋๋ค. ์๋ฅผ ๋ค์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ๋ ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ๋์ง ์ค๋ช
ํ๊ณ , ํ
์คํธ์์ ์ฌ์ฉ๋๋ @Transactional, ์๋ฒ ๋๋ ๋ชจ๋ DB๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ฝ๋๋ก ์์๋ด
๋๋ค.
์คํ๋ง ํธ๋์ญ์
์ดํด
DB1ํธ์์๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ํธ๋์ญ์
๊ธฐ๋ฅ์ด ์ ํ์ํ๊ณ , ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ด๋ถ ์๋ฆฌ๋ฅผ ์์๋ณด์์ต๋๋ค. ์ด๋ฒ ์๊ฐ์๋ ์คํ๋ง ํธ๋์ญ์
AOP ์ฌ์ฉ์ ์ค๋ฌด ์ฃผ์์ฌํญ, ์คํ๋ง ํธ๋์ญ์
์ ๋ค์ํ ์ต์
, ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ์คํ๋ง ํธ๋์ญ์
์ด ์ปค๋ฐ๋๊ณ ๋กค๋ฐฑ๋๋ ๋ด๋ถ ์๋ฆฌ์ ๊ฐ์ด ์คํ๋ง ํธ๋์ญ์
์ด ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ๊น์ด์๊ฒ ์์ธํ ์์๋ด
๋๋ค.
์คํ๋ง ํธ๋์ญ์
์ ํ
์คํ๋ง์ ํธ๋์ญ์
์ ํ๋ฅผ ๋งค์ฐ ๊น์ด์๊ฒ ๋ค๋ฃน๋๋ค. ํธ๋์ญ์
์ ํ๊ฐ ์ ํ์ํ์ง ์ดํดํ๊ณ , ๋ค์ํ ํธ๋์ญ์
์ ํ ์ต์
, ์ ํ ์ต์
์ ๋ฐ๋ฅธ ์์ธ ์ฒ๋ฆฌ, ์ค๋ฌด์์ ํธ๋์ญ์
์ ํ ์ต์
์ ์ฌ์ฉํ ๋์ ์ฃผ์์ ์ ๋ค๋ฃน๋๋ค.
๋ฌด๋ฃ