ํ์๊ฐ ๋ฐฐ์ด ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์ ํจ์ ์์๋ฅผ ๋์ผ๋ ๋น์ ์ ์ธ ํํ์ด ๋ง๊ณ ๊ฐ๋
์ ์ ์ํจ์ ์์ด์ ์ ์์ ์ธ ์ ์๊ฐ ์๋์ ์ธ์ํด์ฃผ์์ผ๋ฉดํ๋ค.
ํผ๋๋ฐฑ ์ ๋ํ์!!!
์์ ํฌ์คํ
์์ ๋งํ๋ฏ์ด ์๋ฐํ๋ก๊ทธ๋จ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ DB์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ ํ์
์ด ๋ค๋ฅด๋ค.
๊ทธ๋์ JPA๋ฅผ ์ฌ์ฉํ๋ค.
JPA๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ ๊ณตํ๋ค.
- JPA๋ DB์ OOP์ ๋ถ์ผ์น์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ก ์ ์ ๊ณตํ๋ค.(DB๋ ๊ฐ์ฒด ์ ์ฅ ๋ถ๊ฐ๋ฅ)
- JPA๋ OOP์ ๊ด์ ์์ ๋ชจ๋ธ๋ง์ ํ ์ ์๊ฒ ํด์ค๋ค.
- JPA๋ ๋ฐฉ์ธ์ฒ๋ฆฌ๊ฐ ์ฉ์ดํ์ฌ Migrationํ๊ธฐ ์ข๋ค. ์ ์ง๋ณด์์๋ ์ข๋ค.
Team table
ID | Name | Year |
---|---|---|
1 | ๋งจ์ฒด์คํฐ ์ ๋์ดํฐ๋ | 1878 |
2 | ๋ฐ๋ฅด์ ๋ก๋ | 1899 |
Player table
ID | Name | teamId(FK) |
---|---|---|
1 | ๋ฐ์ง์ฑ | 1 |
2 | ๋ธ๋ฃจ๋ ธ ํ๋ฅด๋๋ฐ์ค | 1 |
3 | ๋ฆฌ์ค๋ฌ ๋ฉ์ | 2 |
4 | ๋ฆฌ์ฐ๋๋ก ๋ง๋ฅดํฐ๋ค์ค | 1 |
๋ค์๊ณผ ๊ฐ์ด DB์ Team table๊ณผ Player table์ ์์ฑํ๋ ค๊ณ ํ๋ค.
Player table์ teamId๋ ์ฐธ์กฐํค์ด๋ค.
๋จ์ํ DB์ ๊ด์ ์ผ๋ก ์๊ฐํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์๋ฐ ์ฝ๋๋ฅผ ์งค ๊ฒ์ด๋ค.
public class Team{
int id;
String name;
String year;
}
public class Player{
int id;
String name;
String teamId;
}
DB์ ๊ฐ column์ ์๋ฃํ์ String, int์ฒ๋ผ ๋จ์ ์๋ฃํ์ด๋ค.
๋ฐ๋ผ์ ๋ฐ์ง์ฑ์ teamId๋ผ๋ ์๋ฃํ์ด ๋งจ์ฒด์คํฐ ์ ๋์ดํฐ๋๋ผ๋ row์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด์ง ๋ชปํ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ด๋ผ๋ฉด ์นํ์ด์ง์ ๋จ์ํ teamId = 1์ด๋ผ๋ ์ ๋ณด๋ฅผ ๋ฟ๋ ค์ค์ผํ๋ค.
๊ทธ๋ฐ๋ฐ ์๋ฐ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์งค ์ ์๋ค.
public class Team{
int id;
String name;
String year;
}
public class Player{
int id;
String name;
Team team;
}
๋ค์๊ณผ ๊ฐ์ด ์ง๋ฉด, ์ฐ๋ฆฌ๊ฐ name์ด ๋ฐ์ง์ฑ์ธ ์ฌ๋์ selectํ๋ฉด, teamId๊ฐ์ด 1์์ ์ฐธ์กฐํด ํด๋น ํ์ ๋ํ ํ
์ด๋ธ ์ ๋ณด๋ฅผ ์ฐพ์์ฌ ์ ์๋ค.
์ด์ ๊ฐ์ด JPA๋ insert, select๋ฑ์ ์ฟผ๋ฆฌ๋ฌธ์ ์ฌ์ฉํ ๋ ORM์ ์ด์ฉํด ๋ค์๊ณผ ๊ฐ์ด ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ค๋ค.
ID | Name | color | engineId(FK) |
---|---|---|---|
1 | BMW | white | 2 |
2 | Sonate | black | 1 |
ID | power |
---|---|
1 | 2000 |
2 | 4000 |
์์ง์ด ์๋์ฐจ์ ๋ถ๋ชจ๊ฐ ๋๋๊ฑด ๋ญ๊ฐ ์ด์ํ๊ธฐ ๋๋ฌธ์, ์์์ ๊ฐ๋
์ด ์๋ compositon(๊ฒฐํฉ)์ ๊ฐ๋
์ ํตํด ํ
์ด๋ธ์ ๋ง๋ค์๋ค.
์์ ๊ฐ์ ํ
์ด๋ธ์ด ์๋ค๋ฉด ์๋์ ๊ฐ์ด ์๋ฐ ์ฝ๋๋ฅผ ์งค ๊ฒ์ด๋ค.
public class Car{
int id;
String name;
String color;
Engine engineId;
}
public class Engine{
int id;
int power;
}
๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ์๋์ฐจ๊ฐ ์์ฑ๋ ๋ ์ง๋ฅผ ํ ์ด๋ธ์ ๋ฃ๊ณ ์ถ์ด ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๋ค๋ฉด,
TimeStamp createDate;
TimeStamp updateDate;
์ด ํ๋๋ค์ Car์ Engine ํ ์ด๋ธ์ ์ค๋ณต์ผ๋ก ๋ฃ๋๊ฒ ์๋๋ผ, ๋ค์๊ณผ ๊ฐ์ด ํด๋์ค๋ฅผ ๋ง๋ ํ ๊ฐ ํ ์ด๋ธ์์ ์์๋ฐ์ ๋ ํจ์จ์ ์ผ๋ก DB ํ ์ด๋ธ์ ๋ชจ๋ธ๋งํ ์ ์๋ค.
public class Car extends EntityDate{
int id;
String name;
String color;
Engine engineId;
}
public class Engine extends EntityDate{
int id;
int power;
}
public class EntityDate{
TimeStamp createDate;
TimeStamp updateDate;
}
๋ฐฉ์ธ์ฒ๋ฆฌ(dialect)๊ฐ ๋ญ๋๋ฉด ๋ค์ํ ์ข
๋ฅ์ DB๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๋ง์ด๋ค.
์๋ DB์ ์ข
๋ฅ๊ฐ ๋ฌ๋ผ์ง๋ฉด, ์ฌ์ฉํ๋ ํจ์๊ฐ ๋ฌ๋ผ์ ธ ์คํ๋ง์ ์ฝ๋๋ ๋ฐ๋์ด์ผํ๋๋ฐ ์คํ๋ง์ด ์ถ์ํ ๊ฐ์ฒด(์ญํ ์๋ง ์์กด)๋ฅผ ๋ฐ๋ผ๋ณด๊ณ JPA๋ฅผ ์ด์ฉํ๋ฉด DB๋ฅผ ๊ฐ์๋ผ์ธ ์ ์๋ค.
๋ง์น ์ฐ๋ฆฌ๊ฐ ์์ ๊ฐ์ง๊ณ ์๊ณ ์ฐ๋ฆฌ ์์ ๋ค์ํ ๋ฌผ๊ฑด์ ๊ฐ์๋ผ์ธ ์ ์๋ ๊ฒ๊ณผ ๊ฐ๋ค.