์ค๋์ JPA์ ๋ํด ๋ณธ๊ฒฉ์ ์ผ๋ก ํ์ตํ๋ค.
๊ทธ๋์ MyBatis๋ฅผ ๊ธฐ๋ฐ์ผ๋ก SQL์ ์ง์ ์์ฑํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ค์๋๋ฐ, ์ด๋ฒ์๋ ๊ฐ์ฒด์งํฅ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ดํ ์ ์๋ ORM ๊ธฐ์ ์ธ JPA๋ฅผ ์ฒ์๋ถํฐ ํ๋์ฉ ์ดํด๋ณด์๋ค.
๐ ์ค๋ ๋ฐฐ์ด ๋ด์ฉ ์ ๋ฆฌ
๐ท JPA๋ ๋ฌด์์ด๊ณ ์ ์ฐ๋๊ฐ
JPA๋ Java Persistence API์ ์ฝ์๋ก, ์๋ฐ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๋์ผ๋ก ๋งคํํด ์ฃผ๋ ORM ๊ธฐ์ ์ด๋ค. ๊ทธ๋์์ SQL์ ์ง์ ์์ฑํ๊ณ ๋งคํํ๋ ๋ฐ ๋ง์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ง๋ง, JPA๋ ์ด๋ฅผ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ์ถ์ํํด ์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ๋์์ค๋ค.
JPA๋ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ์ค์ง์ ์ธ ๋์์ Hibernate ๊ฐ์ ๊ตฌํ์ฒด๊ฐ ์ฒ๋ฆฌํ๊ณ , Spring์์๋ ์ด JPA๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก Spring Data JPA๋ผ๋ ๋ชจ๋๋ ์ ๊ณตํ๋ค๋ ๊ฒ๋ ์๋กญ๊ฒ ์๊ฒ ๋์๋ค.
๐ถ ๊ฐ์ฒด ์ค์ฌ ์ค๊ณ์ ์ฅ์ ๊ณผ ์ฃผ์์
MyBatis์์๋ ํ ์ด๋ธ ์ค์ฌ์ ์ค๊ณ๋ฅผ ํด์๋ค๋ฉด, JPA๋ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ์์คํ ์ ๋ฐ๋ผ๋ณธ๋ค. ์๋ฅผ ๋ค์ด Member๋ผ๋ ํด๋์ค๋ฅผ ์ํฐํฐ๋ก ์ ์ธํ๊ณ , @Entity, @Id, @Column ๊ฐ์ ์ด๋ ธํ ์ด์ ์ผ๋ก ๋งคํ ์ ๋ณด๋ฅผ ์ค์ ํ๋ฉด JPA๊ฐ ์์์ DB์ ํต์ ํ๋ค.
ํ์ง๋ง ๊ทธ๋งํผ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ ๋งคํ, ์์์ฑ ์ปจํ ์คํธ, ํธ๋์ญ์ ๋ฒ์ ๋ฑ์ ๋ํ ๊ฐ๋ ์ด ๋ถ์กฑํ๋ฉด ์คํ๋ ค ์๊ธฐ์น ๋ชปํ ๋ฒ๊ทธ๋ ์ฑ๋ฅ ์ ํ๊ฐ ์๊ธธ ์ ์๋ค๋ ์ ๋ ๋ช ํํ ๋๋ ์ ์์๋ค.
๐ธ Spring Data JPA์ ์ฌ์ฉ์ฑ
๊ธฐ๋ณธ์ ์ธ CRUD๋ JpaRepository๋ฅผ ์์๋ฐ์ผ๋ฉด ์๋์ผ๋ก ์ฒ๋ฆฌ๋๊ณ , ๋ฉ์๋ ๋ช ๋ง์ผ๋ก๋ ์ฟผ๋ฆฌ๊ฐ ์์ฑ๋๋ค.
์๋ฅผ ๋ค์ด findByEmail(String email) ๊ฐ์ ๋ฉ์๋๋ง ์ ์ธํด๋ JPA๊ฐ ์์์ SELECT * FROM member WHERE email = ? ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค์ด ์คํํด ์ค๋ค๋ ์ ์ด ๊ต์ฅํ ์ธ์ ๊น์๋ค.
๋ฌผ๋ก , ๋ณต์กํ ์ฟผ๋ฆฌ๋ ์ฌ์ ํ JPQL์ด๋ ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์จ์ผ ํ์ง๋ง, ๋จ์ํ ๊ธฐ๋ฅ ๊ตฌํ์์๋ ์๋์ ์ธ ์์ฐ์ฑ์ ๋ณด์ฌ์ค๋ค๋ ๊ฑธ ์ค์ต์ ํตํด ์ฒด๊ฐํ๋ค.
๐งก ๋๋ ์
์ค๋ JPA๋ฅผ ์ฒ์ ํ์ตํ๋ฉด์ ๊ฐ์ฅ ํฌ๊ฒ ๋๋ ๊ฑด, ‘๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฅด๊ฒ ๋ฐ๋ผ๋ณด๋ ์์ ’์ด์๋ค.
์ง๊ธ๊น์ง๋ DB์ ๋ง์ถฐ ์ฝ๋๋ฅผ ์ง์์ง๋ง, JPA๋ ์ฝ๋๊ฐ ์ค์ฌ์ด ๋๊ณ DB๋ ๊ทธ์ ๋ง์ถฐ ๋์ํ๋ค๋ ์ฒ ํ์ด ๋ถ๋ช ํ๋ค.
JPA๋ ํ์ตํ ๊ฐ๋ ๋ ๋ง๊ณ ์ค์ ๋ ๋ณต์กํ์ง๋ง, ๊ทธ๋งํผ ๋ ๋์ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํด ์ฃผ๋ ๋๊ตฌ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
ํนํ Spring Boot์์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ์ ์ด๋๋งํผ, ์ด์ ๋ ๋จ์ํ ์ฌ์ฉ๋ฒ์ด ์๋๋ผ ์๋ฆฌ๋ฅผ ์ดํดํ๋ฉฐ ์ค๊ณํ ์ ์๋๋ก ์ต์ํด์ ธ์ผ๊ฒ ๋ค๊ณ ๋๊ผ๋ค.
์์ง ์์์ฑ ์ปจํ ์คํธ๋ ์ฐ๊ด๊ด๊ณ ๋งคํ ๋ฑ์ ์์ ํ ์์ ์ต์ง ์์์ง๋ง, ์ค๋ ํ์ต์ ๊ณ๊ธฐ๋ก JPA์ ๋ํ ํฅ๋ฏธ๊ฐ ์๊ฒผ๊ณ , ์์ผ๋ก ๋ ๊น์ด ์๊ฒ ๊ณต๋ถํด๋ณด๊ณ ์ถ๋ค.