[Spring] OOP์™€ DB

strongmhkยท2023๋…„ 7์›” 13์ผ
0

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
17/25
post-thumbnail

๐Ÿ“Œํฌ์ŠคํŒ…์— ์•ž์„œ..

ํ•„์ž๊ฐ€ ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•จ์— ์˜์˜๋ฅผ ๋’€์œผ๋‹ˆ ๋น„์œ ์ ์ธ ํ‘œํ˜„์ด ๋งŽ๊ณ  ๊ฐœ๋…์„ ์ •์˜ํ•จ์— ์žˆ์–ด์„œ ์ •์„์ ์ธ ์ •์˜๊ฐ€ ์•„๋‹˜์„ ์ธ์‹ํ•ด์ฃผ์—ˆ์œผ๋ฉดํ•œ๋‹ค.
ํ”ผ๋“œ๋ฐฑ ์ ˆ๋Œ€ํ™˜์˜!!!







๐Ÿ“ŒOOP์™€ DB์˜ ๋ถˆ์ผ์น˜์„ฑ์„ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” JPA


์•ž์˜ ํฌ์ŠคํŒ…์—์„œ ๋งํ–ˆ๋“ฏ์ด ์ž๋ฐ”ํ”„๋กœ๊ทธ๋žจ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ DB์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋‹ค๋ฅด๋‹ค.
๊ทธ๋ž˜์„œ JPA๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
JPA๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์ œ๊ณตํ•œ๋‹ค.

  • JPA๋Š” DB์™€ OOP์˜ ๋ถˆ์ผ์น˜์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋ก ์„ ์ œ๊ณตํ•œ๋‹ค.(DB๋Š” ๊ฐ์ฒด ์ €์žฅ ๋ถˆ๊ฐ€๋Šฅ)
  • JPA๋Š” OOP์˜ ๊ด€์ ์—์„œ ๋ชจ๋ธ๋ง์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  • JPA๋Š” ๋ฐฉ์–ธ์ฒ˜๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜์—ฌ Migrationํ•˜๊ธฐ ์ข‹๋‹ค. ์œ ์ง€๋ณด์ˆ˜์—๋„ ์ข‹๋‹ค.






๐Ÿ“ŒJPA๋Š” DB์™€ OOP์˜ ๋ถˆ์ผ์น˜์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋ก ์„ ์ œ๊ณตํ•œ๋‹ค.(DB๋Š” ๊ฐ์ฒด ์ €์žฅ ๋ถˆ๊ฐ€๋Šฅ)


Team table

IDNameYear
1๋งจ์ฒด์Šคํ„ฐ ์œ ๋‚˜์ดํ‹ฐ๋“œ1878
2๋ฐ”๋ฅด์…€๋กœ๋‚˜1899

Player table

IDNameteamId(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์„ ์ด์šฉํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.







๐Ÿ“ŒJPA๋Š” OOP์˜ ๊ด€์ ์—์„œ ๋ชจ๋ธ๋ง์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค


IDNamecolorengineId(FK)
1BMWwhite2
2Sonateblack1

IDpower
12000
24000

์—”์ง„์ด ์ž๋™์ฐจ์˜ ๋ถ€๋ชจ๊ฐ€ ๋˜๋Š”๊ฑด ๋ญ”๊ฐ€ ์ด์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ์†์˜ ๊ฐœ๋…์ด ์•„๋‹Œ 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;
}






๐Ÿ“ŒJPA๋Š” ๋ฐฉ์–ธ์ฒ˜๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜์—ฌ Migrationํ•˜๊ธฐ ์ข‹๊ณ , ์œ ์ง€๋ณด์ˆ˜์—๋„ ์ข‹๋‹ค


๋ฐฉ์–ธ์ฒ˜๋ฆฌ(dialect)๊ฐ€ ๋ญ๋ƒ๋ฉด ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ DB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ด๋‹ค.
์›๋ž˜ DB์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฉด, ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ ธ ์Šคํ”„๋ง์˜ ์ฝ”๋“œ๋„ ๋ฐ”๋€Œ์–ด์•ผํ•˜๋Š”๋ฐ ์Šคํ”„๋ง์ด ์ถ”์ƒํ™” ๊ฐ์ฒด(์—ญํ• ์—๋งŒ ์˜์กด)๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  JPA๋ฅผ ์ด์šฉํ•˜๋ฉด DB๋ฅผ ๊ฐˆ์•„๋ผ์šธ ์ˆ˜ ์žˆ๋‹ค.
๋งˆ์น˜ ์šฐ๋ฆฌ๊ฐ€ ์†์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์šฐ๋ฆฌ ์†์— ๋‹ค์–‘ํ•œ ๋ฌผ๊ฑด์„ ๊ฐˆ์•„๋ผ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

profile
์ € ์ปค์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ ๋ž˜์š”!

0๊ฐœ์˜ ๋Œ“๊ธ€