๐ ๊ฐ์๋งํฌ : https://www.inflearn.com/course/์คํ๋ง๋ถํธ-๊ฐ๋ ์ ๋ฆฌ/dashboard
JPA๋ผ๋ ๊ฒ์ Java Persistence Application Programming interface๋ก ์๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ํ ๋, ์๊ตฌ์ ์ผ๋ก ํ์ํ ์ธํฐํ์ด์ค
๋ฐ์ดํฐ๋ฅผ ์์ฑํ ํ๋ก๊ทธ๋จ์ ์คํ์ด ์ข ๋ฃ๋๋๋ผ๋ ์ฌ๋ผ์ง์ง ์๋ ๋ฐ์ดํฐ์ ํน์ฑ์ ์๋ฏธํ๋ฉฐ, ์์์ฑ์ ํ์ผ ์์คํ , ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํน์ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ ํ์ฉํ์ฌ ๊ตฌํํ๋ค.
์์์ฑ์ ์์๋ก ๋ค์๋ฉด RAM์ ๊ฒฝ์ฐ ํ๋ฐ์ฑ์ด๋ผ ์ปดํจํฐ๊ฐ ๊บผ์ง๊ฒ ๋๋ฉด ์ฌ๋ผ์ง๊ฒ ๋๋๋ฐ RAM์ ๋ํ ๋ฐ์ดํฐ๋ค์ ํ๋๋์คํฌ์ ์ ์ฅํ๊ฒ ๋๋ฉด ํ๋๋์คํฌ๋ ๋นํ๋ฐ์ฑ์ด๋ผ์ ์ฌ๋ผ์ง์ง ์๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ด๋ฆฌํ ์ ์๋๋ก DBMS๋ก ๊ด๋ฆฌํ๋ค.
์ฆ, JPA๋.. ์๋ฐ์์ ์๊ตฌํ ๊ธฐ๋กํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ API๋ฅผ ๋งํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ (A) โ ํ๋ก๊ทธ๋จ
- ํ๋ก๊ทธ๋๋ฐ(P) โ ํ๋ก๊ทธ๋๋ฐ
- ์ธํฐํ์ด์ค(I) โ ์ธํฐํ์ด์ค
์ธํฐํ์ด์ค๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ ๊ทธ๊ฑธ๋ก ํ๋ก๊ทธ๋จ์ด ๋ง๋ค์ด์ง๋ ๊ฒ์ ๋ปํ๋ค.
- ํ๋กํ ์ฝ๊ณผ ์ธํฐํ์ด์ค์ ๊ณตํต์
๋ ๋ค ์ฝ์์ ๋ปํ๋ค.
- ์ฐจ์ด์
-
์ธํฐํ์ด์ค
์ํ ๊ด๊ณ๊ฐ ์กด์ฌํ๋ ์ฝ์
- ์์๋ก ๋ค์๋ฉด ์ฅ๋ณด๊ณ ๊ฐ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์๋ค. ๊ทผ๋ฐ ํ๋ก๊ทธ๋จ์ด ์ข์์ ๊ณต์ ๋ฅผ ํ๊ณ ์ถ๋ค. ๊ทธ๋์ ํ๊ธธ๋ํํ
๊ณต์ ๋ฅผ ํ๋๋ฐ **โA๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐค 12์๋ถํฐ ์๋ฒฝ 6์๊น์ง ์ฌ์ฉํด๋ผโ**๊ณ ์์์์ด ๋งํ๋ค. ์ด๊ฒ์ด ๋ฐ๋ก
์ธํฐํ์ด์ค - ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ฉด ๊ทธ๊ฒ์ด ๋ฐ๋ก
API
- ์์๋ก ๋ค์๋ฉด ์ฅ๋ณด๊ณ ๊ฐ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์๋ค. ๊ทผ๋ฐ ํ๋ก๊ทธ๋จ์ด ์ข์์ ๊ณต์ ๋ฅผ ํ๊ณ ์ถ๋ค. ๊ทธ๋์ ํ๊ธธ๋ํํ
๊ณต์ ๋ฅผ ํ๋๋ฐ **โA๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐค 12์๋ถํฐ ์๋ฒฝ 6์๊น์ง ์ฌ์ฉํด๋ผโ**๊ณ ์์์์ด ๋งํ๋ค. ์ด๊ฒ์ด ๋ฐ๋ก
-
ํ๋กํ ์ฝ
๋๋ฑํ ๊ด๊ณ์ ์ฝ์
- ์ ๋ง์ ํ๋กํ ์ฝ๋ค์ด ๋ชจ์ฌ์ ๋ง๋ค์ด์ง ๊ฒ์ด ์ธํฐ
๊ฑด๋ฌผ์ ์ง๋ ์ค๊ณ๋๋ก ๊ฑด๋ฌผ์ ์ฌ๋ฆฌ๊ฒ ๋๋ฉด 3D๋ก ๋์ค๊ฒ ๋๋ ๊ฒ์ ๋ชจ๋ธ๋ง์ด๋ผ๊ณ ํ๋ค.
๋ชจ๋ธ๋ง ํ๋ค๋ ๊ฒ์ ์ถ์ํ์ ์ธ ๊ฐ๋ ์ ํ์ค์ธ๊ณ์ ๊ตฌ์ฒดํํ๋ ๊ฒ์ ๋งํ๋ค.
์๋ฐ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ ํ์
๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ ํ์
์ ๋ค๋ฅด๋ค. class๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ํ
์ด๋ธ์ ๋ชจ๋ธ๋งํด์ผ ํ๋ค.
์๋๋๋ก๋ผ๋ฉด, ์ฒซ ๋ฒ์งธ๋ก๋ DB ํ ์ด๋ธ์ ๋ง๋ค๊ณ 2๋ฒ์งธ๋ก ์๋ฐ์ธ์์ ๋ชจ๋ธ๋งํ๋ค. โ TRM(Table Relational Mapping)
class Team{
int id;
String name;
String year;
}ํ์ง๋ง,
JPA๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ๋ก ์๋ฐ์์ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒ์ธ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ๋ ๋ฒ์งธ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑ ์ ์๋ค. ์ด๋ ํ์ํ ๊ฒ์ด ์ธํฐํ์ด์ค์ด๋ค.
Select๋ Select All, Delete, Update, Insert ๋ฑ์ ์์ฃผ ์ผ์ด๋ ์ ์๋ ๊ฒ๋ค์ด๋ค.
java์ ๊ฒฝ์ฐ DB์๊ฒ Connect ์์ฒญ์ ํ๋ค. DB๊ฐ ๊ถํ์ ํ์ธํ๊ณ Session์ ์คํํ๊ฒ ํด์ค๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด java๋ Conncection์ ๊ฐ์ง๋ฉฐ, ๋ ๋ฒ์งธ์๋ ์ฟผ๋ฆฌ๋ฅผ DB์ ์ ์กํ ์ ์๋ค. DB๋ ๊ทธ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก Data๋ฅผ java์ ์๋ตํ๊ฒ ๋๋๋ฐ ์ด๋, ์๋ฐ๊ฐ ๊ฐ์ง ๋ฐ์ดํฐ ํ์
๊ณผ DB๊ฐ ๊ฐ์ง ๋ฐ์ดํฐ ํ์
์ ๋ค๋ฅด๋ค.
์ฆ, ์๋ฐ Object๋ก ๋ณํ์ ํด์ผ ํ๋๋ฐ ์ด๊ฒ์ ๋จ์ํ ๋ฐ๋ณต๋ก์ง์ด๋ค. ์ด๋ฌํ ๊ณผ์ ๋ค์ connction์ ์ฐ๊ฒฐํ๊ณ ๋ณํํ๊ณ ๋ฑ๋ฑ์ JPA๊ฐ ํ๋์ ํจ์๋ก ์ ๊ณตํด์ค๋ค.
๋ฐ์ดํฐ โ ์๊ตฌ์ ์ ์ฅ(ํ์ผ์์คํ X, DB O)
Context๋ ๋์์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ
๊ฐ๋ฐ์์ ์ปจํ ์คํธ ๊ฐ๋ ์ ์กฐ๊ธ ์ ๋งคํ๋ค. ์ด๋ ๊ฒ ์ดํดํ๋ฉด ์ข๋ค๊ณ ํ๋ค. ๊ธธ๋์ด๊ฐ ์์์ด์๊ฒ ๋ ์์์ด ๋์ ๋ชจ๋ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์์ด = ์์์ด์ ๋ชจ๋ ๊ฒ์ ์๊ณ ์๋ค.
Context๋ฅผ ๋๊ฒจ์ค๋ค. = ๋ณด๊ณ ๊ฐ ๊ธธ๋์ด์๊ฒ ์์์ด์ Context(๋ชจ๋ ์ ๋ณด)๋ฅผ ๋๊ฒจ
์๋ฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ฅํด์ผ ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ ๊ฒ์ด ์์์ฑ ์ปจํ ์คํธ
์๋ฐ์ ์๋ ๋๋ฌผ ๋ฐ์ดํฐ๋ฅผ ์์์ฑ ์ปจํ
์คํธ์ ๋ฃ๊ณ ๋์ DB์๋ ์ ์ฅ ํ ์์์ฑ ์ปจํ
์คํธ์์ ์ญ์ ๋ฅผ ํ๋ฉด ๋๊ธฐํ๊ฐ ๋์ด ์๊ธฐ์ DB์์๋ ์ญ์ ๊ฐ ๋๋ค.
์์์ฑ ์ปจํ ์คํธ์๋ ์๊ณ DB์๋ง ๊ณผ์ผ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด..
์ผ๋จ ์๋ฐ๋ 1. ์์์ฑ ์ปจํ
์คํธ์ ๋จผ์ ์์ฒญ์ ํ๋ค. 2. ์์์ฑ ์ปจํ
์คํธ์ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ์ DB์ ์์ฒญ ํ๋ค. 3. DB์์ ๊ฐ์ ธ์ ์๋ฐ object๋ก ์์์ฑ์ปจํ
์คํธ์ ์ ์ฅํ๋ค. 4. ์๋ฐ์ ๊ณผ์ผ๋ฐ์ดํฐ๋ฅผ ์ค๋ค.
๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์๋ ๋ฐ์ดํฐ๋ฅผ selectํด์ ๊ฐ์ ธ์ค๊ณ updateํ๋ ๋ฑ ์ผ๋ จ์ ๋ชจ๋ ์ ๋ณด๋ฅผ
์์์ฑ ์ปจํ ์คํธ๋ฅผ ํตํด ํ์ธ ํ ์ ์๋ค.
์๋ฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํด์ผ ํ๋ ๋ชจ๋ ๋ฉํ ๋ฐ์ดํฐ ์ ๋ณด๋ค์ ์์์ฑ ์ปจํ ์คํธ๊ฐ ๊ฐ์ง๊ณ ์๋ค.
java์์ ๊ณผ์ผ ๋ฐ์ดํฐ๋ฅผ ๋ธ๊ธฐ๋ก ๋ฐ๊พธ๋ฉด..
- ์์์ฑ ์ปจํ ์คํธ์ ๊ณผ์ผ๋ฐ์ดํฐ๋ ๋ธ๊ธฐ๋ก ๋ฐ๋๊ณ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ commitํด์ ๋ฐ์ด๋ฃ์ผ๋ฉด ์๋ ์
์ ๊ฐ์ ๋ฐ์ดํฐ ์ธ๋ฐ 3๋ฒ์ ์ฌ๊ณผ๋ก ๋์ด ์์ด ๋ธ๊ธฐ๋ก ๋ฐ๊พธ๊ธฐ์ํด
update๊ฐ ์๋์ผ๋ก ์ผ์ด๋๋ค.
5. JPA๋ DB์ OOP์ ๋ถ์ผ์น์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ก ์ ์ ๊ณตํ๋ค.(DB๋ ๊ฐ์ฒด์ ์ฅ ๋ถ๊ฐ)
- DB๋ ๊ธฐ๋ณธ์๋ฃํ์ผ๋ก Object๋ฅผ ๊ฐ์ง์ง ๋ชปํจ
- teamId์ ๊ฒฝ์ฐ 1์ด๋ผ๋ ์ซ์๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋์ ๊ทธ๋ฆผ ์ฒ๋ผ object์ฑ๋ก ๊ฐ์ง๊ณ ์์ง ๋ชปํ๋ค.
- ์๋ฐ ๊ด์ : ์ผ๋ฐ ์ฌ์ฉ์๋ ์ ์ ์๊ธฐ์ join์ ํ๊ฑฐ๋ ๋ ๋ฒ์ select๊ฐ ํ์
class Team{
int id;
String name;
String year;
}
class Player{
int id; //=2
String name; //=๊ณตํ์ฑ
int teamId; //=1
}๊ทธ๋ ์ง๋ง.. ์๋ฐ๋ Object๋ฅผ ์ ์ฅํ ์ ์๊ธฐ์ ์๋์ ๊ฐ์ด ๋ง๋ค ์ ์๋ค.
class Player{
int id; //=2
String name; //=๊ณตํ์ฑ
Team team; //=team object
}์ฆ, OOP๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋๋ค. ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ORM์ ํ๊ฒ ๋๋ฉด ์๋ฐ๊ฐ ์ฃผ๋๊ถ์ ๊ฐ์ง ์ฆ, ์์ ๊ฐ์ ํํ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
๋ํ.. JPA๊ฐ ์์์ Mapping ํด์ select, insert๋ฑ์ ํด์ฃผ๊ฒ ๋๋ค.
์ฆ, JPA๋ DB์ OOP์ ๋ถ์ผ์น์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ก ์ ์ ๊ณตํ๋ค๋ ๊ฒ์ ๋จผ์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฃผ๋๊ถ์ ์ก๊ณ ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ Object๋ฅผ ์ ์ฅํ ์ ์๊ธฐ์ OOP์ ๋ถ์ผ์นํ๊ฒ ๋์ง๋ง JPA๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด
OOP๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋๋ค. ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณORM์ ํ๊ฒ ๋๋ฉด ์๋ฐ๊ฐ ์ฃผ๋๊ถ์ ๊ฐ์ง ์ฆ, ์์ ๊ฐ์ ํํ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
6. JPA๋ OOP ๊ด์ ์์ ๋ชจ๋ธ๋ง์ ํ ์ ์๊ฒ ํด์ค๋ค.(์์, ์ฝคํฌ์ง์ , ์ฐ๊ด๊ด๊ณ)
class Car{
int id; //pk
String name;
String color;
Engine engine;
}
class Engine{
int id;
int power;
}โ ์์์ผ๋ก ๋์ง๋ ์๊ณ ์ฝคํฌ์ง์
(๊ฒฐํฉ)ํด์ผ ํ๋ค.
jpa์ ๊ฒฝ์ฐ class๋ฅผ ๋ง๋ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋์์ฑํด์ค๋ค. 1๋ฒ์ด ์์ฑ ํ 2๋ฒ์ด ์๋์์ฑ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด
OOP ๊ด์ (๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ)์์ ํ ์ด๋ธ์ด ๋ง๋ค์ด์ง๊ฒ ๋๋ค.
Engine๊ณผ Car ํด๋์ค์ ๋ชจ๋ ๋ค TimeStamp createDate;์ TimeStamp updateDate;๋ฅผ ๋ฃ๊ณ ์ถ๋ค๋ฉด
๊ทธ ๋ถ๋ถ์ ๋ฐ๋ณต๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ ํด๋์ค์ ๋ฃ๋ ๊ฒ์ด ์๋ ๋ฐ๋ณต๋ ๊ฒ์ ๋ค๋ฅธ ํด๋์ค๋ก ๋ง๋ค์ด์ค๋ค.
class EntityDate{
TimeStamp createDate;
TimeStamp updateDate;
}ํ์ ๊ทธ ํด๋์ค๋ฅผ ์์๋ฐ์ผ๋ฉด ๋๋ค.
class Car extends EntityDate{
int id; //pk
String name;
String color;
Engine engine;
}
class Engine extends EntityDate{
int id;
int power;
}์์์ ๋ฐ๊ฒ ๋๋ฉด ์์ ํ๋๊ฐ ๋ ์๊ธด๋ค.
์ฐ๊ด๊ด๊ณ์ ๊ฒฝ์ฐ ๋ ๊ฐ์ฒด(์ํฐํฐ) ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ
- ์ผ๋์ผ(One-to-One): ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์(User)์ ํ๋กํ(Profile)์ด๋ผ๋ ์ํฐํฐ๊ฐ ์์ ๋, ํ ์ฌ์ฉ์๋ ํ๋์ ํ๋กํ์ ๊ฐ์ง๊ณ , ํ ํ๋กํ์ ํ๋์ ์ฌ์ฉ์์ ์ํ ์ ์๋ค.
- ์ผ๋๋ค(One-to-Many): ์๋ฅผ ๋ค์ด, ๋ถ์(Department)์ ์ฌ์(Employee)์ด๋ผ๋ ์ํฐํฐ๊ฐ ์์ ๋, ํ๋์ ๋ถ์๋ ์ฌ๋ฌ ์ฌ์์ ๊ฐ์ง ์ ์๋ค.
- ๋ค๋์ผ(Many-to-One): ์ผ๋๋ค์ ๋ฐ๋๋ก ์ฌ๋ฌ ์ํฐํฐ๊ฐ ํ๋์ ์ํฐํฐ์ ์ํ๋ ๊ด๊ณ
- ๋ค๋๋ค(Many-to-Many): ์๋ฅผ ๋ค์ด, ํ์(Student)๊ณผ ๊ณผ๋ชฉ(Subject)์ด๋ผ๋ ์ํฐํฐ๊ฐ ์์ ๋, ํ ํ์์ ์ฌ๋ฌ ๊ณผ๋ชฉ์ ์๊ฐํ๊ณ , ํ ๊ณผ๋ชฉ์ ์ฌ๋ฌ ํ์์๊ฒ ์๊ฐ๋ ์ ์๋ค.
@OneToOne, @OneToMany, @ManyToOne, @ManyToMany ๋ฑ์ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งคํํ ์ ์๋ค.
์ฐ๊ด๊ด๊ณ๋ฅผ ์ค์ ํ๋ฉด ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์งํ๋ฉด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ ์ ํ ๊ณ๊ฐ ๋งบ์ด์ง๊ฒ ๋๋ค.
jpa๋ clialect์ ๋ํ ๊ฒ๋ค์ ๋ง์ด ๊ฐ์ง๊ณ ์๋ค.(oracle, maria, mssql, mysql, postgam)
๋ํ DB๋ ์ถ์ํ๊ฐ์ฒด๊ฐ ์ค๊ฐ์ ์์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์๋ ์ฉ์ดํ๋ค. ๋ด๊ฐ ๋ง์ฝ ์ค๋ผํด์ ์ฐ๋ค MYSQL๋ก ๋ฐ๊พธ๊ณ ์ถ์ด๋ ์ค๊ฐ์ ์ถ์ํ ๊ฐ์ฒด๊ฐ ์๊ธฐ์ ๋ฌด๋ฆฌ์์ด ๋ฐ๊ฟ ์ ์๋ค.
์ฆ, ๋ฐฉ์ธ ์ฒ๋ฆฌ๊ฐ ์ฉ์ดํ๊ธฐ ์ข๋ค๊ณ ํ๋ค.
์ถ์ํ ๊ฐ์ฒด๋
์ํฐํฐ(Entity)๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด๋ก ์ด ๊ฐ์ฒด๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ ๋งคํ๋์ด ์์ด์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉ๋๋ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๊ฐ์ ๋งคํ์ ํธ๋ฆฌํ๊ฒ ํ ์ ์๋๋ก ๋์์ค๋ค.
- @Entity: ํด๋์ค๋ฅผ ์ํฐํฐ๋ก ์ง์ ํ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก ํด๋น ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ์ฝ๋์ ๋งคํ
- @Id: ์ํฐํฐ์
์ฃผ ์๋ณ์(Primary Key)๋ฅผ ์ง์ ํ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ฃผํค๋ ํด๋น ์ํฐํฐ๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๋๋ฐ ์ฌ์ฉ - @GeneratedValue: ์ฃผ ํค์ ๊ฐ์ ์๋์ผ๋ก ์์ฑํ๋๋ก ์ง์ ํ๋ ์ด๋ ธํ ์ด์
- @Column: ์ํฐํฐ์ ํ๋๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปฌ๋ผ๊ณผ ๋งคํํ ๋ ์ฌ์ฉ๋๋ ์ด๋ ธํ ์ด์
- @ManyToOne, @OneToMany, @OneToOne, @ManyToMany: ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์์ ๋ค์ํ ๊ด๊ณ๋ฅผ ํํํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋ณ๊ฒฝ์ ๊ด๋ฆฌํ๋ ํ๋ก์ธ์ค๋ฅผ ์๋ฏธํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ์ฌํญ์ด๋ ์ ๋ฐ์ดํธ๋ก ์ธํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ ๋, ๋ง์ด๊ทธ๋ ์ด์ ์ ํตํด ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋ก์ด ๊ตฌ์กฐ๋ก ์ ๋ฐ์ดํธํ ์ ์๋ค.
JPA์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์
๋ฐ์ดํธํ๋ ๋๊ตฌ๋ก Hibernate์ ๊ฐ์ ORM ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ค. ์ด ๋๊ตฌ๋ค์ ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์์ฑํ๊ฑฐ๋ ์
๋ฐ์ดํธํ ์ ์์ด์ ๊ฐ๋ฐ์๊ฐ ์ง์ SQL ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ง ์์๋ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ฒด ์งํฅ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๊ฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ฉด์๋ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ์ ์๋ค.
์๋ฐ ์ธ์ด๋ฅผ ์ํ ORM(Object-Relational Mapping)ํ๋ ์์ํฌ ์ค ํ๋๋ก, ORM์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๋๊ตฌ์ด๋ค. Hibernate๋ ์ด๋ฌํ ๋งคํ์ ํตํด ๊ฐ๋ฐ์๊ฐ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ ์ ์๋๋ก ๋์์ค๋ค.
Hibernate์ ์ฃผ์ ํน์ง๊ณผ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ฐ์ฒด-๊ด๊ณ ๋งคํ: Hibernate๋ ์๋ฐ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๊ฐ์ ๋งคํ์ ์ง์ํ๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ ์๋ฐ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฆฝ์ฑ: Hibernate๋ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ข ์์ฑ์ ๋ฎ์ถฐ์ค๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋ ์ฝ๋ ๋ณ๊ฒฝ์ด ์ต์ํ
- ์๋ ํ ์ด๋ธ ์์ฑ ๋ฐ ์ ๋ฐ์ดํธ: Hibernate๋ ๊ฐ์ฒด ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ์ ์๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์ง์ SQL์ ์์ฑํ์ง ์์๋ ๋๊ฒ ํด์ค๋ค.
- ์บ์ฑ: Hibernate๋ ์ฑ๋ฅ ํฅ์์ ์ํด ์บ์ฑ์ ์ง์ํ๋ค. ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ ๊ฐ์ฒด ์ํ๋ฅผ ์บ์ํ์ฌ ๋ฐ๋ณต์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค๋ฅผ ์ต์ํํ ์ ์๋ค.
- ํธ๋์ญ์ ๊ด๋ฆฌ: Hibernate๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๋๋ฐ ๋์์ ์ค๋ค. ACID ์์ฑ์ ์ ์งํ๋ฉด์ ํธ๋์ญ์ ์ ์ ์ดํ ์ ์๋ค.
- ์ฟผ๋ฆฌ ์ธ์ด ์ง์: Hibernate๋ HQL(Hibernate Query Language)๋ผ๋ ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ ๊ณตํ์ฌ SQL์ ์ข ์๋์ง ์๊ณ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์ ์๋ค.
Hibernate๋ ์๋ฐ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ๋งค์ฐ ์ธ๊ธฐ ์๋ ORM ํ๋ ์์ํฌ ์ค ํ๋๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ ์์ฉ์ ๊ฐ์ํํ๊ณ ์์ฐ์ฑ์ ํฅ์์ํฌ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ค.











