JPA๋ Java Persistence(์์์ฑ) API์ด๋ค.
ex) ๋จ์ ํ๋ฐ์ฑ. ์ด ๋ฐ์ดํฐ๋ฅผ ํ๋๋์คํฌ์ ๊ธฐ๋กํ๋ฉด ๋นํ๋ฐ์ฑ์ด๋ฏ๋ก ์๊ตฌ์ ์ฅ๋จ.
์๊ตฌํ ๊ธฐ๋ก๋๋๊ฒ Persistence. ์๋ฐ๋ ๋ฐ์ดํฐ ์ ์ฅ์ DBMS๋ก ๊ด๋ฆฌํ๋ค.
JPA๋ ์๋ฐ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌํ ๊ธฐ๋กํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ API
API๋?
Application -> ํ๋ก๊ทธ๋จ
Programming ->ํ๋ก๊ทธ๋๋ฐ์ ํตํด์ ํ๋ก๊ทธ๋จ ๋ง๋ฌ
Interface ->์ด๊ฑธ ํตํด์ ํ๋ก๊ทธ๋๋ฐ
์ฝ์(ํ๋กํ ์ฝ vs ์ธํฐํ์ด์ค)
ํ๋กํ ์ฝ: ์ฝ์ - A,B,C์ ๊ถ๋ฆฌ๊ฐ ๋๋ฑํ๋ค. B๊ฐ ๊ฐ์ํ ์ ์๋ค. ์๋ก๊ฐ ๋ชจ๋ ๋์ ํ ์ ์๋ ๊ฒ
vs
์ธํฐํ์ด์ค: ์ฝ์ - B๊ฐ ํ์ด ์ . B๊ฐ ๋ง๋ ๊ท์น์ A์ C๊ฐ ๋ฌด์กฐ๊ฑด ๋ฐ๋ผ์ผ ํ๋ค. ์ฆ, B๊ฐ ๊ท์น์ ์ ํ ๋ ๊ฐ๋ ฅํ ์ ํ์ ๋
์ํ๊ด๊ณ๊ฐ ์กด์ฌํ๋ ์ฝ์
์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง๊ณ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด ์ด๊ฒ์ด API.
์ ๋ฆฌํด๋ณด์
JPA(Java Persistence Application Programming Interface) : Java ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์ ํ์ํ ์ธํฐํ์ด์ค
JPA๋ ORM ๊ธฐ์ ์ด๋ค.
ORM(Object Relational Mapping) - ์ค๋ธ์ ํธ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ: ๋์ ํ์ธ!
ORM์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ ์๋ฐ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์ ๋ฐ์ดํฐ ๋ณํ๊ณผ ์ํธ ์์ฉ์ ๊ฐํธํ๊ฒ ๋ง๋ค๊ธฐ ์ํ ๊ธฐ์ ์ ๋๋ค.
ORM์ ์๋ฐ ํด๋์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๊ฐ์ ๋งคํ์ ์ํํฉ๋๋ค. ์ฆ, ์๋ฐ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ชจ๋ธ๋งํ๊ณ , ์ด ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ๊ฒ์, ์์ ๋ฐ ์ญ์ ํ ์ ์๋๋ก ํด์ค๋๋ค.
์ค๊ณ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฑด๋ฌผ์ ์ง์ผ๋ฉด "๋ชจ๋ธ๋ง: ์ถ์์ ์ธ ๊ฐ๋ ์ ํ์ค์ธ๊ณ๋ก ๋ฝ๋๊ฒ"
์๋ฐ Input(Delete,Update,Insert) -> ๋ฐ์ดํฐ๋ฒ ์ด์ค
<- Output(Select)
์ด๋, ์๋ฐ์ DB์ ๋ฐ์ดํฐํ์ ์ด ๋ค๋ฅด๋ค. ๊ทธ๋ ๊ธฐ์ ํด๋์ค๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ชจ๋ธ๋งํด์ผํ๋ค.
DB๋ฐ์ดํฐ๋ฅผ ์๋ฐ์ ๋ชจ๋ธ๋ง!
Class Team{
int id;
String name;
String year;
}
๋ฅผ ๋ง๋ค๊ณ , ์ด๊ฑธ ํตํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋์์ฑ
์ด๋ ํ์ํ๊ฒ JPA
์ด ๊ธฐ๋ฒ์ ORM์ด๋ผ๊ณ ํ๋ค.
JPA๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ ์์ฉ์ ์ถ์ํํ๊ณ , ๊ฐ์ฒด ์งํฅ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ์ง ์์๋ ๋ฉ๋๋ค. ์ด๊ฒ์ ๊ฐ๋ฐ ์์ฐ์ฑ์ ํฅ์์ํค๊ณ ์ ์ง ๋ณด์๋ฅผ ์ฝ๊ฒ ๋ง๋๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์์ฝํ๋ฉด, JPA๋ ORM ๊ธฐ์ ์ค ํ๋๋ก ์๋ฐ ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ํธ ์์ฉ์ ๊ฐํธํ๊ฒ ๋ง๋ค์ด์ฃผ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํตํฉ์ ๋ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋๋ ์ค์ํ ๊ธฐ์ ์ ๋๋ค.
JPA๋ ๋ฐ๋ณต์ ์ธ CRUD (Create, Read, Update, Delete) ์์ ์ ์๋ตํ๊ฒ ํด์ค๋ค.
Select(R), Selecet All(R),Delte(D),Update(U),Insert(C)๋ฅผ ํ๋ ค๋ฉด, ์๋ฐ์์ DB์ ์ปค๋ฅ์ ์ ์์ฒญํ๋ค.
DB๊ฐ ์ ๋ถ์ ํ์ธํ๊ณ ์ธ์ ์ ์คํํ๊ฒ๋๊ณ , ์๋ฐ๋ Connection์ ๊ฐ์ง๊ฒ ๋จ.
๊ทธ ํ ์๋ฐ์์ DB๋ก ์ฟผ๋ฆฌ๋ฅผ ์ ์กํ ์ ์๋ค. DB๋ ์ฟผ๋ฆฌ๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ด๋๋ฐ, ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์๋ฐ์ ์๋ตํ๋๋ฐ
์๋ฐํ์ ๊ณผ DBํ์ ์ด ๋ค๋ฅด๋ฏ๋ก, ์๋ฐ๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์๋ฐ ์ค๋ธ์ ํธ๋ก ๋ณ๊ฒฝํด์ผํ๋ค.
์ฆ, ์๋ฐ๊ฐ ๋ฐ์ดํฐ ์์ฒญ์ ์ฟผ๋ฆฌ๋ก ์ ์กํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋๋ ค ๋ณด๋ด๋๋ฐ, ์ด ๋ฐ์ดํฐ ํ์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ ์ด๊ธฐ์
์๋ฐ๋ ์ดํดํ์ง ๋ชปํ๊ณ , ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์๋ฐ๊ฐ ์ดํดํ ์ ์๋๋ก ์๋ฐ ์ค๋ธ์ ํธ๋ก ๋ณ๊ฒฝํ๋ ์ผ์ ํด์ผํ๋ค.
์ด๋ ๋จ์ํ ๋ฐ๋ณต ๋ก์ง์ด๊ณ , ์ด ๋ฐ๋ณต์ ์ค์ด๋๊ฒ์ด JPA์ด๋ค.
JPA๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๋ชจ๋ ์์ ์ ํจ์ ํ๋๋ก ์ ๊ณตํด์ค๋ค.
JPA๋ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์์์ฑ: ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ
์๋ฐ์์๋ DB์ ์ ์ฅํ๋ค.
์ปจํ ์คํธ: ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ
์์์ฑ์ปจํ ์คํธ:์๋ฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ๋๋ ๋ชจ๋ ๊ฒ์ ์๊ณ ์๋ ๊ฒ
์์์ฑ์ปจํ ์คํธ์์ ์ผ์ด๋๋ ๋ชจ๋ ์ผ๋ค์ ์๋์ผ๋ก ์งํ
์์ฝํ๋ฉด, ์์์ฑ ์ปจํ ์คํธ๋ JPA์ ํต์ฌ ๊ฐ๋ ์ผ๋ก, ์ํฐํฐ ๊ด๋ฆฌ, ์บ์ฑ, ๋ํฐ ์ฒดํน ๋ฑ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ ์์ฉ์ ๊ด๋ฆฌํ๊ณ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ ์์ฉ์ ์ถ์ํํ์ฌ ๋ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋๋ ์ญํ ์ ํฉ๋๋ค.
JPA๋ DB์ OOP์ ๋ถ์ผ์น์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ก ์ ์ ๊ณตํ๋ค. (DB๋ ๊ฐ์ฒด์ ์ฅ ๋ถ๊ฐ๋ฅ)
DB์ Team,Player ๋ฐ์ดํฐ ํ ์ด๋ธ์ด ์๋ค๊ณ ํ์.
ID | Name | Year |
1 | ๋กฏ๋ฐ | 1990 |
2 | NC | 2005 |
ID | Name | TeamID: FK(์ฐธ์กฐํค) |
1 | ์ด๋ํธ | 1 |
2 | ํ๊ธธ๋ | 2 |
๊ฐ๊ฐ์ ์ปฌ๋ผ๋ค์ ๊ฐ์ง ์ ์๋ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ณธ์๋ฃํ์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ๋ชป๊ฐ์ง๋ค.
์ด๋ํธ๋ 1์ด๋ผ๋ Int ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋๊ฑฐ์ง, {1,๋กฏ๋ฐ,1990)}์ด๋ฐ ํต์ผ๋ก ๋ค๊ณ ์๋ ์ค๋ธ์ ํธ๋ฅผ ๋ชป๊ฐ์ง๋ค.
Class Team{
int id;
String name;
String year;
}
Class Player{
int id;
String name;
int teamId;
}
๊ทธ๋ฐ๋ฐ ์๋ฐ๋ ์ค๋ธ์ ํธ๋ฅผ ์ ์ฅํ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฌ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ง๋ ๊ฒ๊ณผ ์๋ฐ๋ก ๋ง๋ ๊ฒ์ด ๋ชจ์์ด๋๋ค.
ORM์ ํ๊ฒ ๋๋ฉด ๋ชจ๋ธ์ ๋ง๋ค ๋ ์๋ฐ๊ฐ ์ฃผ๋๊ถ์ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ธ์ ๋ง๋ค ์ ์๋ค.
Class Player{
int id;
String name;
Team team;
}
ORM์ ํตํด์ DB์ OOP์ ๋ถ์ผ์น์ฑ์ ํด๊ฒฐ ํ ์ ์๋ค.
DB๋ ๊ฐ์ฒด์ ์ฅ์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, ์๋ฐ๋ ๊ฐ๋ฅํ๋ค. ์๋ฐ์์ ํ๋ก๊ทธ๋๋ฐํ ๋๋ ๊ฐ์ฒด์ ์ ์ฅํ๊ณ , ์ด๊ฑธ DB์ ๋ฃ์๋๋
JPA๊ฐ ์๋์ผ๋ก foreign key๋ฅผ ์ง์ด๋ฃ์ด์ค๋ค.
์ฆ, ORM์ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด ์งํฅ ๋ชจ๋ธ์ ์ ์งํ๋ฉด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ ์์ฉ์ ๊ฐํธํ๊ฒ ๋ง๋ค์ด์ค๋๋ค.
JPA๋ OOP์ ๊ด์ ์์ ๋ชจ๋ธ๋ง์ ํ ์ ์๊ฒ ํด์ค๋ค.(์์, ์ฝคํฌ์ง์ , ์ฐ๊ด๊ด๊ณ)
์ฐจ์ ์์ง์ ์ฐ๊ด์ด ์์ง๋ง ์์๊ด๊ณ๋ ์๋๋ค. ์ด๋, ๊ฒฐํฉ(์ฝคํฌ์ง์ ) ํด์ผ ํ๋ค.
1
Class Car{
int id;(PK)
String name;
String color;
Engine engine;
}
Class Engine{
int id;
int power;
}
JPA๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ํด๋์ค๋ฅผ ํ ๋๋ก ์๋ ์์ฑํด์ DB๋ฅผ ๋ง๋ ๋ค.
2Car
id | name | color | enginId |
1 | BMW | white | 2 |
2 | sonata | black | 1 |
2Engine
id | power |
1 | 2000 |
2 | 4000 |
1์ ํตํด์ 2๊ฐ ์๋์์ฑ๋๋ค.
์ถ๊ฐ๋ก
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;
}
์์ํ๋ฉด, ๋ฐ์ ํ๋๊ฐ ๋ ์๊ธด๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ
id | name | color | enginId | createDate | updateDate |
1 | BMW | white | 2 | ||
2 | sonata | black | 1 |
๋ฐฉ์ธ ์ฒ๋ฆฌ๊ฐ ์ฉ์ดํ์ง๋ง Migration ํ๊ธฐ ์ข์. ์ ์ง๋ณด์์๋ ์ข์.
์คํ๋ง - JPA - DB
JPA๋ ์๋ง์ ๋ฐฉ์ธ๋ค์ ์ง์ํด์ค(MySQL,์ค๋ผํด,MSSQL ๋ฑ๋ฑ)
์ด๊ฑธ ์ ํด๋๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด์๋, JPA์ ์ถ์ํ ๊ฐ์ฒด๋ฅผ ๋๊ณ , ์ถ์ํ๊ฐ์ฒด๊ฐ DB์ ๋ฌ๋ผ๋ถ์ด์๋ค.
์ถ์ํ๊ฐ์ฒด์ ์ค๋ผํด์ ๋ง๋ค์ด์ ์ฐ๊ฒฐํ๋ฉด ์ถ์ํ๊ฐ์ฒด๊ฐ ์ค๋ผํด์ด๋์ด, ์ค๋ผํด๋ก ์ฐ๊ฒฐ๋๋ค.
JPA๋ ์ฝ์ง๋ง ์ด๋ ต๋ค.
'๐ผ๋ฐฑ์ค๋ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
@ControllerAdvicem, @RestControllerAdvice (0) | 2023.12.20 |
---|---|
์์กด๊ด๊ณ ์๋ ์ฃผ์ (0) | 2023.12.19 |
์๋ธ๋ฆฟ๊ณผ ๋ฉํฐ ์ฐ๋ ๋ (0) | 2023.12.19 |
SpringBoot ๋์ ์๋ฆฌ (0) | 2023.09.02 |
์คํ๋ง ๊ฐ๋ ์ก๊ธฐ (0) | 2023.09.01 |