14์ฅ: Spring Data
์คํ๋ง ๋ฐ์ดํฐ๋ ์ ํ์ํ๊ฐ? ์คํ๋ง ์ฑ ๋ก์ง์์ ์์์ฑ ๊ณ์ธต๊ณผ ์ฐ๊ฒฐ๋ ๋, jdbc๋ก ๊ด๊ณํ dbms์ ์ฐ๊ฒฐํ ์๋ ์๊ณ nosql ๊ตฌํ์ฒด์ ์ฐ๊ฒฐํ๊ธฐ ์ํด์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํด์ผ ํ ์๋ ์๋ค. ๊ทธ๋ฌ๋ ์คํ๋ง๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๋ชจ๋ ๊ฒ์ ๋ฐฐ์์ผ ํ ํ์๊ฐ ์๋ค.
spring data๋ Consistency layer์ ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ด ๋จ์ํ ํ๋ค.
๋ค์ํ ์์์ฑ ๊ธฐ์ ์ ๋ํด ๊ณตํต๋ ์ถ์ํ ์งํฉ์ ์ ๊ณตํ๋ค.
์ฌ์ฉ์๊ฐ ์ถ์ํ๋ง์ผ๋ก ์์์ฑ ์์ ์ ๊ตฌํํ ์ ์๋๋ก ์ง์ํ๋ค. ์์ฑํ ์ฝ๋๊ฐ ์ค์ด๋ค๊ณ ์ฑ ๊ธฐ๋ฅ์ ๋ ๋น ๋ฅด๊ฒ ๊ตฌํํ ์ ์๋ค.
์คํ๋ง ๋ฐ์ดํฐ๋ ๊ฐ๊ฐ์ ๊ธฐ์ ์ ๋ง๋ ๋ค์ํ ๋ชจ๋์ ์ ๊ณตํ๊ณ ์์กด์ฑ์ผ๋ก ์ถ๊ฐํ ์ ์๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉํ๋ ์์์ฑ ๊ธฐ์ ์ ๊ด๊ณ์์ด, Spring Data๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์์ฑ ๊ธฐ๋ฅ์ ์ ์ํ๊ธฐ ์ํด ํ์ฅํ ์ ์๋ ๊ณตํต ์ธํฐํ์ด์ค(๊ณ์ฝ)๋ฅผ ์ ๊ณตํ๋ค. ex) Repository -> CrudRepository -> PagingAndSortingRepository
์ ๋ชจ๋ ์์ ์ ํฌํจํ๋ ํ๋์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ง ์๋ ๊ฑธ๊น? ์ฌ๋ฌ ๊ฐ์ ๊ณ์ฝ์ ๊ตฌํํ๋๋ก ํ๊ณ , ํ๋์ "๋๊บผ์ด(fat)" ๊ณ์ฝ์ ์ ๊ณตํ๋ ๋์ , Spring Data๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ํ ์์ ๋ง ๊ตฌํํ ์ ์๋๋ก ํ๋ค. ์ด๋ฅผ **์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(Interface Segregation Principle)**์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ผ๋ถ Spring Data ๋ชจ๋์ ์์ ์ด ๋ํํ๋ ๊ธฐ์ ์ ํนํ๋ ๊ณ์ฝ์ ์ ๊ณตํ๋ค. ์๋ฅผ ๋ค์ด, Spring Data JPA๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, JpaRepository ์ธํฐํ์ด์ค๋ฅผ ์ง์ ํ์ฅํ ์ ์๋ค.
์คํ๋ง ๋ฐ์ดํฐ ๋ชจ๋ ์ ์ฒด ๋ชฉ๋ก์ https://spring.io/projects/spring-data๋ฅผ ๋ณด์
๋ชจ๋ธ์์ Primary key์์ @ID ์ฃผ์์ ๋ฃ๋๋ค. ์ธํฐํ์ด์ค์ ํจ์๋ฅผ ์ ์ํ๊ณ ์์ @Query ์ฃผ์์ผ๋ก SQL๋ฌธ์ ์์ฑํ๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์๋ผ๋ฉด @Modifiying์ ์ถ๊ฐํด์ค๋ค.
์ด๋ ๊ฒ ์์ฑํ ์ธํฐํ์ด์ค๋ฅผ DIํ๋ ค๋ฉด ๋น์ผ๋ก ๋ง๋ค์ด์ผ ํ๋ค. ํ์ง๋ง ์คํ๋ง์ด ์๋์ผ๋ก ๋์ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค์ด์ ์ปจํ ์คํธ์ ๋น์ผ๋ก ๋ฃ์ด์ค๋ค.
Last updated