JPA

JPA ํ๋ก์ ๊ฐ์ฒด์ ์ง์ฐ๋ก๋ฉ
๋์ ์ ๋ง ์ค๋๋ง์ JPA์ ๊ด๋ จ๋ ๊ธ์ ์์ฑํ๋ ๋ฏํ๋ค. ์ฝ 2์ฃผ์ ๋๋ ๊ฐ์์ค๋ฝ๊ฒ ์์ด ์คํผํน ์ํ์ ๋ณด๊ณ ์ถ๋ค๋ ํ๊ณ๋ก JPA์ ๋ํ ๊ธ์ ์ ์ ๋ฏธ๋ฃจ๊ณ ์ด์ฌํ ์์ด์ ๋งค์งํ์๋ค. ๊ฒฐ๊ณผ๋ ๋งํ์ง๋ง. ์ด๋ฒ์ ์ฐ๋ฆฌ๋ JPA์ ํ๋ก์ ๊ฐ์ฒด์ ์ง์ฐ๋ก๋ฉ์ ๋ํ์ฌ ์์๋ณด๋ ค๊ณ ํ๋ค. ํ๋ก์ ๊ฐ์ฒด? Proxy๋ ๋ฒ์ญํ๋ฉด ๋๋ฆฌ๋ผ๊ณ ํ ์ ์๋ค. ๋จ์ ๋์ ํ๋ ๋ฌด์์ธ๊ฐ๋ฅผ ํ๋ก์๋ผ๊ณ ํ๋ค. ํ๋ก์ ๊ฐ์ฒด๋ ๋ง ๊ทธ๋๋ก ๊ฐ์ฒด๋ฅผ ๋์ ํ๋ค๋ ์๋ฏธ๋ฅผ ํฌํจํ๊ณ ์๋ค. ๊ฐ์ฒด๋ฅผ ๋์ ํ๋ค๋ ๋ง์ด ๋ฌด์์ ์๋ฏธํ ๊น. DB์ ์๋ ๊ฐ์ ์์์ฑ์ปจํ ์คํธ๋ก ๊ด๋ฆฌํ๋ ค๋ฉด find()๋ฅผ ์ฌ์ฉํ๋ค. find๋ฅผ ๋ถ๋ฅด๊ฒ ๋๋ฉด ์์์ฑ ์ปจํ ์คํธ์ ๊ฐ์ด ์๋์ง ํ์ธํ๊ณ ์๋ค๋ฉด DB๋ก ์ฟผ๋ฆฌ๊ฐ ๋ ๋ผ๊ฐ์ ๊ฐ์ ๊ฐ์ ธ์ฌ ๊ฒ์ด๋ค. find๊ฐ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก DB์ ์๋ ๊ฐ..

JPA ์์๊ด๊ณ ๋งคํํ๊ธฐ(+ @MappedSuperclass)
๋์ ์ง๋ ์๊ฐ์ JPA๋ฅผ ํ์ฉํด ๊ฐ์ฒด์ ์ฐ๊ด๊ด๊ณ ๋งคํ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์๋ค. ์ด๋ฒ ์๊ฐ์๋ JPA๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ฒด์ ์์๊ด๊ณ๋ฅผ ํ ์ด๋ธ๋ก ํํํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ ์์๋ณด๊ณ , ์์๊ด๊ณ์๋ ๋ค๋ฅด์ง๋ง ๋น์ทํด์ ํผ๋ํ๊ธฐ ์ฌ์ด ๊ฐ๋ ์ธ @MappedSuperclass๋ฅผ ์์๋ณด๋๋ก ํ๊ฒ ๋ค. ์์๊ด๊ณ ๋งคํ ๊ฐ์ฒด์งํฅ์ธ์ด์์๋ ์ค๋ณต๋๋ ์ ๋ณด๋ฅผ ์์๊ด๊ณ๋ฅผ ์ฌ์ฉํด ๋ฌถ์ด์ค ์์๋ค. ์๋ฅผ๋ค์ด ์ฌ๋๊ณผ ๊ฐ์์ง ๊ณ ์์ด๋ ๋ชจ๋ ์ด๋ฆ๊ณผ ๋์ด ๊ทธ๋ฆฌ๊ณ ๊ตฌ๋ถ์ง์ด์ค ID๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ฌํ ํน์ง์ '๋๋ฌผ'๋ก ๋ฌถ์ด์ ์์ํด์ค ์ ์๋ค. ๊ฐ์ฒด์์๋ ์ด๋ ๊ฒ ์์์ ํ์ฉํด์ฃผ์ง๋ง, ํ ์ด๋ธ์์๋ ์ด๋ ๊ฒ ์์์ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์์์ ์ํด์๋ ์ ๋ต์ ์ฌ์ฉํด์ผํ๋ค. ์์์ ์ ๋ต์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ @Inheritance annotation์ ์ด์ฉํ..

JPA ์ฐ๊ด๊ด๊ณ ๋งคํํ๊ธฐ
๋์ ์ด๋ฒ ์๊ฐ์๋ JPA์์ ์ํฐํฐ๋ฅผ ๊ฐ์ฒด์ ์ผ๋ก ๋ฌถ์ด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๋ ค๊ณ ํ๋ค. DB์ฒ๋ผ ๊ตฌํ์ ํ๊ฒ ๋ ๊ฒฝ์ฐ ์ฐ๊ด์ด ๋์ด์๋ ํด๋์ค์๋ ๋ค๋ฅธ ์ํฐํฐ์ key๊ฐ์ ๋ฃ์ด์ฃผ๊ฒ ๋๋๋ฐ, ๊ทธ๋ฌ๋ฉด ๋ค์ ๊ทธ ํค๊ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ฐพ์์ฃผ์ด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊ธด๋ค. ๋ฐ๋ผ์ ์ด๋ฒ์๊ฐ์๋ ๊ฐ์ฒด ์์ฒด๋ฅผ ๋ฐ์ ์ ์๋ ์ฐ๊ด๊ด๊ณ ๋งคํ์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค. *์ง๋ ์๊ฐ์๋ ๊ธฐ๋ณธํค๋ฅผ ๋งคํํ๋ ๋ฐฉ๋ฒ๊ณผ ํค๊ฐ์ ์๋์ผ๋ก ์ฃผ์ ์ํค๋ ์ ๋ต์ ์์๋ณด์๋ค. 2022.01.12 - [Tech-Stack & Language/JPA] - JPA ๊ธฐ๋ณธ ํค ๋งคํํ๊ธฐ JPA ๊ธฐ๋ณธ ํค ๋งคํํ๊ธฐ ๋์ ์ง๋ ์๊ฐ์๋ ํ๋์ ์นผ๋ผ์ ๋งคํํ์ฌ ๋ณด์๋ค. ์ด๋ฒ์๋ ๋งคํ๋ ์นผ๋ผ์ค์์ Primary key๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค. Primary Key๋ ๊ธฐ๋ณธ..

JPA ๊ธฐ๋ณธ ํค ๋งคํํ๊ธฐ
๋์ ์ง๋ ์๊ฐ์๋ ํ๋์ ์นผ๋ผ์ ๋งคํํ์ฌ ๋ณด์๋ค. ์ด๋ฒ์๋ ๋งคํ๋ ์นผ๋ผ์ค์์ Primary key๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค. Primary Key๋ ๊ธฐ๋ณธํค๋ฅผ ์๋ฏธํ๋ค. ๊ธฐ๋ณธํค์ ์ฑ์ง์ ํ ์ด๋ธ ๋ด์์ ์ ์ผํ๊ณ null๊ฐ์ด ์์ด์ผํ๋ฉฐ ๋ณ๊ฒฝ๋๋ฉด ์๋๋ค. ๋ฐ๋ผ์ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ค์ ์ ์ผํ๊ฒ ๊ตฌ๋ถํ๋๋ฐ ์ฌ์ฉ์ด๋๋ค. ์ด๋ฒ ์๊ฐ์๋ ์ด๋ฌํ ๊ธฐ๋ณธ ํค๋ฅผ ๋งคํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ์. 2022.01.10 - [Tech-Stack & Language/JPA] - JPA๋ก ํ๋์ ์นผ๋ผ ๋งคํํ๋ annotation ์์๋ณด๊ธฐ JPA๋ก ํ๋์ ์นผ๋ผ ๋งคํํ๋ annotation ์์๋ณด๊ธฐ ๋์ ์ง๋ ์๊ฐ์๋ ๊ฐ์ฒด์ ์ํฐํฐ๋ฅผ ๋งคํํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ ์์๋ณด์๋ค. ๊ฐ์ฒด์ ์ํฐํฐ๋ฅผ ๋งคํํ์๋ค๋ฉด, ๋ค์์๋ ๊ฐ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ..

JPA๋ก ํ๋์ ์นผ๋ผ ๋งคํํ๋ annotation ์์๋ณด๊ธฐ
๋์ ์ง๋ ์๊ฐ์๋ ๊ฐ์ฒด์ ์ํฐํฐ๋ฅผ ๋งคํํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ ์์๋ณด์๋ค. ๊ฐ์ฒด์ ์ํฐํฐ๋ฅผ ๋งคํํ์๋ค๋ฉด, ๋ค์์๋ ๊ฐ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ์์ฑ(ํ๋)์ ์ํฐํฐ์ ์นผ๋ผ์ ๋งคํํด์ฃผ์ด์ผ ํ๋ค. ์ด๋ฒ ์๊ฐ์๋ ์นผ๋ผ๊ณผ ํ๋๋ฅผ ๋งคํํ๋ ๊ณผ์ ์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค. 2022.01.07 - [Tech-Stack & Language/JPA] - JPA๋ก ๊ฐ์ฒด์ ํ ์ด๋ธ ๋งคํํ๊ธฐ JPA๋ก ๊ฐ์ฒด์ ํ ์ด๋ธ ๋งคํํ๊ธฐ ๋์ ์ง๋ ์๊ฐ์๋ JPA์ ์์์ฑ ์ปจํ ์คํธ์ ๋ํ์ฌ ์์๋ณด์๋ค. ์์์ฑ ์ปจํ ์คํธ๋ JPA์ ๋์์ ์ดํดํ๊ธฐ ์ํด ๋ฐ๋์ ์์์ผํ ๋ถ๋ถ์ผ๋ก ๋งค์ฐ ์ค์ํ ๋ด์ฉ์ด์๋ค. ์ด๋ฒ ์๊ฐ๋ JPA๋ฅผ ๊ณต๋ถํ cnu-jinseop.tistory.com ์นผ๋ผ๊ณผ ํ๋๋ฅผ ๋งคํํ๋ ๋ฐฉ๋ฒ ์นผ๋ผ๊ณผ ํ๋๋ฅผ ๋งคํํ๋ ๊ฒฝ์ฐ๋ ๋์ผํ๊ฒ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ..

JPA๋ก ๊ฐ์ฒด์ ํ ์ด๋ธ ๋งคํํ๊ธฐ
๋์ ์ง๋ ์๊ฐ์๋ JPA์ ์์์ฑ ์ปจํ ์คํธ์ ๋ํ์ฌ ์์๋ณด์๋ค. ์์์ฑ ์ปจํ ์คํธ๋ JPA์ ๋์์ ์ดํดํ๊ธฐ ์ํด ๋ฐ๋์ ์์์ผํ ๋ถ๋ถ์ผ๋ก ๋งค์ฐ ์ค์ํ ๋ด์ฉ์ด์๋ค. ์ด๋ฒ ์๊ฐ๋ JPA๋ฅผ ๊ณต๋ถํ ๋ ๋งค์ฐ ์ค์ํ ๋ถ๋ถ์ ์์๋ณด๋ ค๊ณ ํ๋ค. ORM์ ๊ฐ์ฒด๋ก RDB๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๊ณ ํ์๋ค. JPA๊ฐ ORM์ผ๋ก ๋์ํ๊ธฐ ์ํด์ ๊ฐ์ฒด์ ํ ์ด๋ธ์ ๋งคํํด์ฃผ์ด์ผ ํ๋ค. ์ด๋ฒ ์๊ฐ์๋ JPA๋ก ์ด๋ป๊ฒ ๊ฐ์ฒด๋ก ํ ์ด๋ธ์ ๋งคํํ๋์ง ์์๋ณด๋๋ก ํ๊ฒ ๋ค. ํ ์ด๋ธ - ๊ฐ์ฒด ์ฐ๊ฒฐ Annotation์ ์ด์ฉํ์. ๊ฐ์ฒด์ ํ ์ด๋ธ์ ๋งคํํ๊ธฐ ์ํด์๋ 2๊ฐ์ Annotation๋ง ์ฌ์ฉํ๋ฉด ๋๋ค. ํด๋์ค ํ๋๋น ํ๋์ ํ ์ด๋ธ๋ก ๋งคํ์ ์์ผ์ฃผ์ด์ผ ํ๋ฏ๋ก ํด๋์ค์ @Entity๋ฅผ ๋ถ์ฌ ์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฐ์ด ํค ๊ฐ์ธ์ง ์์๋ด๊ธฐ..

JPA๋ก CRUDํ๊ธฐ
๋์ ์ง๋ ์๊ฐ์ JPA ํ๋ก์ ํธ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ ์์๋ณด์์ต๋๋ค. ์ด๋ฒ์๊ฐ์๋ JPA๋ก CRUD๋ฅผ ํ๋ ๊ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. CRUD๋ Create, Read, Update, Delete์ ์ฝ์๋ก ์์ฑ, ์ฝ๊ธฐ, ๊ฐฑ์ , ์ญ์ ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ DB์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ , ์กฐํํ๊ณ , ์์ ํ๊ณ , ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์์ ์ ์ JPA? ๊ฐ์ฒด์งํฅ์ ์ธ ์ธ์ด์ RDB๋ ๊ตฌํํ ๋ ๊ต์ฅํ ๋ชจ์์ ์ธ ๋ถ๋ถ์ด ๋ง์ต๋๋ค. ๊ฐ์ฒด๋ค์ด ํ๋ ฅํ๋ฉฐ ๋ง๋ค์ด๋ธ ๊ฒฐ๊ณผ๋ฌผ๋ค์ DB์ ์ ์ฅ์ ํ ๋๋ ๊ฐ์ฒด๊ฐ ์๋ ํ ์ด๋ธ์ ์ ์ฅ์ด ๋๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ๋ก ๊ฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ์ด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค. ์ด๋ก์จ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ์ฌ๋ RDB์ ์ฐ๋์์ผ์ฃผ๋ ๊ณผ์ ์์ ๊ต์ฅํ ์ ์ ์์ฐ์ฑ์ ๋ณด์ฌ์ฃผ์..

JPA ํ๋ก์ ํธ ์ค์ (Maven, H2 DB)
H2 DataBase JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํฉ๋๋ค. ์ค์ต์ ํ์ฉํ๊ธฐ ์ข์ DB์ธ H2๋ฅผ ์ฌ์ฉํ๋๋ก ํ๊ฒ ์ต๋๋ค. H2 DB์ ์ฅ์ ์ ๊ต์ฅํ ๊ฐ๋ณ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ MySQL์ด๋ Oracle DB ์๋ฎฌ๋ ์ด์ ๋ ๊ฐ๋ฅํฉ๋๋ค. H2 DB๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ค์น ๋ฐฉ๋ฒ H2 DB๋ฅผ ์ค์นํ๊ธฐ ์ํด์๋ ํด๋น ์นํ์ด์ง๋ฅผ ๋ค์ด๊ฐ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. H2 DB ์นํ์ด์ง ๋ฐ๋ก๊ฐ๊ธฐ H2 Database Engine (redirect) H2 Database Engine Welcome to H2, the free SQL database. The main feature of H2 are: It is free to use for everybody, source code is included Wr..