์ค๋ฌด์์๋ ์์ ์๊ฒ ์ฐ๋ JPA!
๋จ๋ค๋ฅธ JPA ๊ธฐ์ด์ ์ฒซ๊ฑธ์์ ๋ผ์ด๋ณด์ธ์.
๐ฉ ๋ณธ ๊ฐ์๋ ๋ก๋๋งต ๊ณผ์ ์
๋๋ค.
- ๋ณธ ๊ฐ์๋ ์๋ฐ ๋ฐฑ์๋ ๊ฐ๋ฐ ์ค์ ์ฝ์ค๋ฅผ ์์ํ๋ ์ฒซ ๋ฒ์งธ ๊ฐ์์
๋๋ค. ์ฝ์ค ์ ์ฒด ๊ตฌ์ฑ์ด ๊ถ๊ธํ์๋ค๋ฉด, ์คํ๋ง ๋ถํธ์ JPA ์ค๋ฌด ์์ ์ ๋ณต ๋ก๋๋งต์ ๋จผ์ ํ์ธํด์ฃผ์ธ์. (๋งํฌ)
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ
๊ฐ์ฒด๋ฅผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ค๋ฉด ๊ฐ๋ฐ์๋ ๋ง์ ์ฝ๋์ SQL์ ์์ฑํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ์ฒด๋ฅผ SQL๋ก ๋ณํํ๋ ๋จ์ํ ์ผ๋ถํฐ, ๊ฐ์ฒด์ ์์ ๊ตฌ์กฐ๋ฅผ ํ
์ด๋ธ์ ์ ์ฅํ๋ ๋ณต์กํ ์ผ๊น์ง, ๊ฐ๋ฐ์๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์์ ๋ฌด์ํ ๋งคํ ์ฝ๋์ SQL์ ์ง์ ์์ฑํด์ผ ํฉ๋๋ค.
์๋ฐ ORM ํ์ค์ธ JPA๋ SQL ์์ฑ ์์ด ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ ์ฅํ ์ ์๊ฒ ๋์์ฃผ๊ณ , ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐจ์ด๋ ์ค๊ฐ์์ ํด๊ฒฐํฉ๋๋ค.
์๋ฐ ORM ํ์ค JPA๊ฐ ๋ฌด์์ผ๊น์?
JPA
- Java Persistence API
- ์๋ฐ ์ง์์ ORM ํ์ค ๊ธฐ์
ORM
- Object-relational mapping(๊ฐ์ฒด ๊ด๊ณ ๋งคํ)
- ๊ฐ์ฒด๋ ๊ฐ์ฒด๋๋ก, ๊ด๊ณํ DB๋ ๊ด๊ณํ DB๋๋ก ์ค๊ณ
- ORM ํ๋ ์์ํฌ๊ฐ ์ค๊ฐ์์ ๋งคํ
- ๊ฐ์ฒด๋ฅผ ORM ํ๋ ์์ํฌ์ ์ ์ฅํ๋ฉด, ORM ํ๋ ์์ํฌ๊ฐ SQL์ ์์ฑํด์ ๊ฐ์ฒด๋ฅผ DB์ ๊ด๋ฆฌ
- ๋์ค์ ์ธ ์ธ์ด์๋ ๋๋ถ๋ถ ORM ๊ธฐ์ ์ด ์กด์ฌ
JPA๋ฅผ ์ฌ์ฉํ๋ ์ด์
- SQL ์ค์ฌ์ ๊ฐ๋ฐ์์ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ
- ๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์
- ์ ์ง๋ณด์ ํธ์
- ํจ๋ฌ๋ค์์ ๋ถ์ผ์น ํด๊ฒฐ
- ์ฑ๋ฅ ํฅ์
- ๋ฐ์ดํฐ ์ ๊ทผ ์ถ์ํ์ ๋ฒค๋ ๋
๋ฆฝ์ฑ
- ์๋ฐ ORM ํ์ค ๊ธฐ์
์จ๋ผ์ธ ๊ฐ์๋ฅผ
์์ํ ์ด์
์ ๋ ์ง๊ธ๊น์ง ๋ค์ํ ์ค๋ฌด ํ๋ก์ ํธ์ JPA๋ฅผ ๋์
ํ์ต๋๋ค. ์๊ฒ๋ ๋จ์ํ ์น ์๋น์ค๋ถํฐ ํฌ๊ฒ๋ ์กฐ ๋จ์์ ๊ฑฐ๋ ๊ธ์ก์ ์ฒ๋ฆฌํ๋ ์ฃผ๋ฌธ - ๊ฒฐ์ - ์ ์ฐ ์์คํ
๊น์ง JPA๋ก ์ง์ ์ค๊ณํ๊ณ ๊ฐ๋ฐํ์ต๋๋ค. JPA๋ฅผ ์ฒ์ ์ค๋ฌด์ ๋์
ํ ๋๋ ์ข์ถฉ์ฐ๋ ํ๊ธฐ๋ ํ์ง๋ง ๊ฐ๋ฐ ์์ฐ์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ํ์ฐํ ์ข์์ก๊ณ , ๋จ๋ ์๊ฐ์ ์ฝ๋ ํ์ง๊ณผ ํ
์คํธ์ ๋ ๋ง์ ์๊ฐ์ ์์ ์ ์์์ต๋๋ค. ๋ฌด์๋ณด๋ค JPA๋ฅผ ์ฌ์ฉํด๋ณธ ๋๋ฃ๋ค์ ์ด์ ์ผ๋ก ๋์๊ฐ๊ณ ์ถ์ดํ์ง ์์์ต๋๋ค.
ํ์ง๋ง JPA์ ๊ดํ ๊ตญ๋ด ์๋ฃ๊ฐ ๋ถ์กฑํ๊ณ , ๋๋ถ๋ถ์ด ์์์ฌ์ ์ด๋ ค์ด ์ ์ด ๋ง์์ต๋๋ค. ๊ทธ๋์ 2015๋
์ ์ง์ ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ ์ฑ
์ ์ฐ๊ณ , ๊ทธ๋ก๋ถํฐ 4๋
์ด ํ๋ ์ต๋๋ค.
๊ทธ๋์ ๋ค์ด๋ฒ, ์นด์นด์ค ๊ฐ์ ์ธํฐ๋ท ๋น์ฆ๋์ค ํ์ฌ๋ถํฐ ์ฐ์ํํ์ ๋ค, 11๋ฒ๊ฐ ๊ฐ์ e์ปค๋จธ์ค ํ์ฌ๊น์ง, JPA๋ฅผ ์ด๋ฏธ ์ฌ์ฉ์ค์ด๊ฑฐ๋ ๋์
ํ๋ ค๋ ๋ง์ ํ์ฌ์ ๊ฐ์ฐ์ ํ์ต๋๋ค. ๊ฐ์ฐ์ ํตํด ์ฑ
์ผ๋ก๋ ์ดํด๊ฐ ์ด๋ ค์ ๋ ๋ถ๋ถ์ด ์ง์ ๊ฐ์๋ก ๋ค์ผ๋ ์ฝ๊ฒ ์ดํด๋๋ค๋ ๊ฐ๋ฐ์ ๋ถ๋ค์ด ๋ง์์ต๋๋ค. ๊ทธ๋์ ์จ๋ผ์ธ ๊ฐ์๋ฅผ ๋ง๋ค๊ฒ ๋์์ต๋๋ค.
๊ธฐ์ด๊ฐ ํํํ
JPA ๊ธฐ๋ณธํธ
์์ผ๋ก ์งํํ JPA ๊ฐ์๋ ํฌ๊ฒ ๊ธฐ๋ณธํธ๊ณผ ํ์ฉํธ์ผ๋ก ๋๋์ด์ ธ ์์ต๋๋ค. ์ด ๊ฐ์๋ ๊ธฐ๋ณธํธ์
๋๋ค.
๊ฐ์ ๋ชฉํ
JPA์ ๋ด๋ถ ๋์ ๋ฐฉ์์ ์ดํดํ์ง ๋ชปํ๊ณ , ๋จ์ํ ํธ๋ฆฌํ๋ค๋ ์ด์ ๋ก JPA๋ฅผ ๋์
ํ๋ ๋ถ๋ค์ ์ข
์ข
๋ณด์์ต๋๋ค. ์ค๋ฌด์์๋ ์ ๋ง ๋ค์ํ๊ณ ๋ณต์กํ ์ด์๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ ๊ทผ๋ณธ ์๋ฆฌ๋ฅผ ๋ชจ๋ฅด๋ฉด ๋ง์ ์๊ฐ๊ณผ ๋น์ฉ์ ๋ญ๋นํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ JPA๋ก ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค๊ณํ๊ณ ๋งคํํ ๋, ์ด๋ค ๋ฐฉ๋ฒ์ด ์ข์ ๋ฐฉ๋ฒ์ธ์ง ๋ชจ๋ฅด๋ฉด ์กฐ๊ธ๋ง ๋ณต์กํด์ ธ๋ ๋ฐฉํฉํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ JPA๋ฅผ ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ๋ ๊ฐ์ง๋ฅผ ๊น์ด์๊ฒ ์ดํดํด์ผ ํฉ๋๋ค.
- JPA์ ๋ด๋ถ ๋์ ๋ฐฉ์
- ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋งคํํ๋ ๋ฐฉ๋ฒ
๊ธฐ๋ณธํธ์ ์ด ๋ ๊ฐ์ง์ ์ด์ ์ ๋ง์ถ์์ต๋๋ค. ๊ธฐ์ด๋ฅผ ํํํ๊ฒ ํด์ ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋๋ ค์ ์์ด ์ฌ์ฉํ ์ ์๊ฒ ํด๋๋ฆฌ๋ ๊ฒ์ด ์ด ๊ฐ์์ ๋ชฉํ์
๋๋ค.
ํ์ฉํธ
์ค์ ! Querydsl
Querydsl์ ํตํด ๋ณต์กํ ์ฟผ๋ฆฌ์ ๋์ ์ฟผ๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
์ฐธ๊ณ ๋์
์ฑ
์ ๋ ๊น์ ๋ด์ฉ์ ๊ณต๋ถํ๊ณ ์ถ์ ๋ถ๋ค์ ์ํ
์ฐธ๊ณ ์๋ก ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
(์ฑ
์ด ์์ด๋ ๊ฐ์๋ฅผ ์ํ ๋ณ๋์ ์๋ฃ๊ฐ ์ ๊ณต๋ฉ๋๋ค.)