[TIL] Spring Data JDBC ๊ตฌํ
๐ก Spring Data JDBC ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์์ธ์ค ๊ณ์ธต ์ฐ๋์ ์ํด ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ
: ๋ฐ์ดํฐ ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ ๋๋ฉ์ธ ์ํฐํฐ ํด๋์ค์ ์ค๊ณ
๐ DDD(Domain Driven Design) : ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ
: ๋๋ฉ์ธ ์์ฃผ์ ์ค๊ณ ๊ธฐ๋ฒ
๐ธ Domain : ๋๋ฉ์ธ
- ์ฃผ๋ก ๋น์ฆ๋์ค์ ์ธ ์ด๋ค ์ ๋ฌด ์์ญ = ํ์ค์ธ๊ณ์์ ์ ํ๋ ์ ๋ฌด์ ํ ์์ญ
- ๋๋ฉ์ธ ์ง์๋ค์ ์๋น์ค๊ณ์ธต์์ ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ๊ตฌํ
- ex) ๋ฐฐ๋ฌ์ฃผ๋ฌธ ์ฑ์ ๊ฐ๋ฐํ ๊ฒฝ์ฐ ๋๋ฉ์ธ : ํ์ / ์ฃผ๋ฌธ / ์์ / ๊ฒฐ์
๐ธ Aggregate : ์ ๊ทธ๋ฆฌ๊ฑฐํธ
- ๋น์ทํ ์ ๋ฌด ๋๋ฉ์ธ์ ๋ฌถ์
- ex) ํ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ : ํ์ ์ ๋ณด / ํ์ ํฌ์ธํธ
์ฃผ๋ฌธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ : ์ฃผ๋ฌธ ์ ๋ณด / ๋ฐฐ๋ฌ ์์ ์ ๋ณด / ๋ฐฐ๋ฌ ์ฃผ์ ์ ๋ณด / ๋ฐฐ๋ฌ ์ฃผ๋ฌธ์ ์ ๋ณด
๊ฒฐ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ : ๊ฒฐ์ ์ ๋ณด
์์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ : ์์ ์ ๋ณด
๐ธ Aggregate Root : ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ๋ํํ๋ ๋๋ฉ์ธ
- ์ด๋ค ํน์ ์ง๋จ์ด๋ ๊ทธ๋ฃน์ ๋ํ
- ๊ฐ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ด ๋๋ฉ์ธ ์ค ๋ค๋ฅธ ๋๋ฉ์ธ๊ณผ ์ง๊ฐ์ ์ ์ผ๋ก ์ฐ๊ด์๋ ๋๋ฉ์ธ์ผ๋ก ์ ์
- ํ ์ด๋ธ ๊ฐ ๊ด๊ณ์์๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ๊ฐ ๋ถ๋ชจ ํ ์ด๋ธ์ด ๋๊ณ ๋๋จธ์ง ๋๋ฉ์ธ๋ค์ด ์์ ํ ์ด๋ธ์ธ ์
- ์ ๊ฑฐ๋ฆฌ๋ฃจํธ๋ Spring Data JDBC ๊ธฐ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ ์ ์ํ๊ณ ์ฐพ์์ผ ํจ
๐ก ํ ์ด๋ธ์ ์ธ๋ํค(FK) vs ํด๋์ค์ ๊ฐ์ฒด ์ฐธ์กฐ ๋ฆฌ์คํธ(List)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๊ฐ ๊ด๊ณ๋ ์ธ๋ํค๋ฅผ ํตํด ๋งบ์ด์ง์ง๋ง ํด๋์ค๋ผ๋ฆฌ์ ๊ด๊ณ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ํตํด ๋งบ์ด์ง
→ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ฒฝ์ฐ ์ค๊ณํ ๋๋ก ํ ์ด๋ธ ์คํค๋ง๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๋ฉด ๋จ
BUT, ๋๋ฉ์ธ ์ํฐํฐ ํด๋์ค๋
→ ๋๋ฉ์ธ ์ํฐํฐ ํด๋์ค์ ๊ด๊ณ๋ฅผ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(DDD)์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋งคํ ๊ท์น์ ๋ง๊ฒ ๋ณ๊ฒฝํ ํ์๊ฐ ์์
๐์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ฐ์ฒด ๋งคํ ๊ท์น
โ ๋ชจ๋ ์ํฐํฐ ๊ฐ์ฒด์ ์ํ๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ๋ฅผ ํตํด์๋ง ๋ณ๊ฒฝ ๊ฐ๋ฅ
โก ํ๋์ ๋์ผํ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ด์์ ์ํฐํฐ ๊ฐ์ฒด ์ฐธ์กฐ
- ๋์ผํ ํ๋์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ด์์๋ ์ํฐํฐ ๊ฐ ๊ฐ์ฒด๋ก ์ฐธ์กฐํจ
- ์ธ๋ํค๊ฐ ์๋ !
โข ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ ๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ ๊ฐ ์ํฐํฐ ๊ฐ์ฒด ์ฐธ์กฐ
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ ๊ฐ ์ฐธ์กฐ๋ ๊ฐ์ฒด ์ฐธ์กฐ ๋์ ID๋ก ์ฐธ์กฐ
- 1:1 ๊ณผ 1:N ๊ด๊ณ์์๋ ํ ์ด๋ธ ๊ฐ ์ธ๋ํค ๋ฐฉ์๊ณผ ๋์ผ
- M:N ๊ด๊ณ์ผ๋๋ ์ธ๋ํค ๋ฐฉ์๊ณผ ๊ฐ์ฒด ์ฐธ์กฐ ๋ฐฉ์์ด ํจ๊ป ์ฌ์ฉ๋จ
๐ Repository : ๋ฆฌํฌ์งํ ๋ฆฌ
- ๋ฐ์ดํฐ ์์ธ์ค ๊ณ์ธต์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๋ ์ธํฐํ์ด์ค
- ๋๋ฉ์ธ ์ํฐํฐ๋ฅผ ํตํด ์๋น์ค ํด๋์ค์ ๋ฆฌํฌ์งํ ๋ฆฌ ํด๋์ค ๊ตฌํ
โช๏ธ Query Method : ์ฟผ๋ฆฌ ๋ฉ์๋
- SQL ์ฟผ๋ฆฌ ๋ฌธ์ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ํ ์ ์์
- ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ : find + By + WHERE์ ์ ์ปฌ๋ผ๋ช (์ํฐํฐ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๋ช ) + ์กฐ๊ฑด์ด ๋๋ ๋ฐ์ดํฐ
ex) findByEmail(String email)
findByEmailAndName(String email, String name)