[DB] ์ž์—ฐํ‚ค์™€ ์ธ์กฐํ‚ค ์ค‘ ์–ด๋–ค๊ฑธ ๊ธฐ๋ณธํ‚ค๋กœ ๋‘ฌ์•ผ ํ• ๊นŒ?

1. ๊ฐœ์š”

๊น€์˜ํ•œ ๊ฐ•์‚ฌ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ์›น ๊ฐœ๋ฐœ์„ ๊ณต๋ถ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ์ดํ›„, ๊ธฐ๋ณธ ํ‚ค ์ „๋žต์„ ์„ค์ •ํ•  ๋•Œ ํ•ญ์ƒ ์ธ์กฐํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์™”๋‹ค.

ํŠน๋ณ„ํžˆ ์ด์œ ๋ฅผ ๊ณ ๋ฏผํ•ด๋ณด์ง€ ์•Š๊ณ  ์Šต๊ด€์ ์œผ๋กœ ์ธ์กฐํ‚ค๋ฅผ ์„ ํƒํ•ด์™”๋Š”๋ฐ, ์ตœ๊ทผ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ค‘์— "์ด๋ฏธ ๊ณ ์œ ํ•œ ๊ฐ’์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์™œ ๊ตณ์ด ๋ณ„๋„์˜ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•ด ์ธ์กฐํ‚ค๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š๋ƒ"๋Š” ์งˆ๋ฌธ์„ ๋ฐ›๊ฒŒ ๋˜์—ˆ๋‹ค.

 

ํ•œ ๋ฒˆ๋„ ๊นŠ์ด ์ƒ๊ฐํ•ด๋ณธ ์  ์—†๋Š” ๋ถ€๋ถ„์ด์—ˆ๊ธฐ์—, ์ด๋ฒˆ ๊ธฐํšŒ์— ์ž์—ฐํ‚ค์™€ ์ธ์กฐํ‚ค์˜ ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•ด๋ณด๊ณ , ์–ด๋–ค ํ‚ค๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€์ง€ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.

 

 

 

 

 

 

 

 

 

 

2. ์ž์—ฐํ‚ค? ์ธ์กฐํ‚ค?

์ž์—ฐํ‚ค๋ž€ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ์—์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‚˜์˜ค๋Š” ์†์„ฑ์ด๋‹ค.

ํšŒ์› ๋ฐ์ดํ„ฐ๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด, ํšŒ์› ID๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์ด๋ฉฐ ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์˜ ๊ฑฐ์˜ ์—†๋‹ค. ๋˜ํ•œ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ๋„ ๊ณ ์œ ํ•œ ๊ฐ’์œผ๋กœ ์ž์—ฐํ‚ค์˜ ํ•œ ์˜ˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. 

 

์ธ์กฐํ‚ค๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ๊ณผ ๋‹ฌ๋ฆฌ ์˜ค๋กœ์ง€ uniqueํ•จ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ธ์กฐ์ ์œผ๋กœ ๋งŒ๋“  ์†์„ฑ์ด๋‹ค. 

์˜ˆ๋ฅผ ๋“ค๋ฉด UUID, Auto Increment๊ฐ€ ์ด์— ํ•ด๋‹นํ•œ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

3. ์ž์—ฐํ‚ค๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ฌธ์ œ์ 

์ž์—ฐํ‚ค๋ฅผ ๊ธฐ๋ณธํ‚ค(PK)๋กœ ๋‘์—ˆ์„ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

 

1. ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์„ ๋ฐฐ์ œํ•  ์ˆ˜ ์—†๋‹ค.

๊ณผ๊ฑฐ์—๋Š” ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ๋ฅผ ๊ธฐ๋ณธ ํ‚ค๋กœ ๋‘๋Š” ๊ธฐ์—…์ด ๋งŽ์•˜๋‹ค. ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฐ˜๋“œ์‹œ ๋ถ€์—ฌ๋˜๋ฉฐ(NOT NULL), ์œ ์ผํ•˜๊ณ (UNIQUE), ์ ˆ๋Œ€ ๋ณ€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ ํ•ฉํ•ด ๋ณด์˜€๋‹ค. 

 

ํ•˜์ง€๋งŒ, ์ •๋ถ€ ์ •์ฑ…์ด ๋ณ€๊ฒฝ๋˜๋ฉด์„œ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ๋ฅผ ๋ฒ•์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋งŽ์€ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ๋ฅผ PK๋กœ ์‚ฌ์šฉํ•˜๋˜ ๋งŽ์€ ๊ธฐ์—…๋“ค์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•ด์•ผ๋งŒ ํ–ˆ๋‹ค. 

 

์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์€ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋‹จ์ˆœํžˆ ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์ด ๋  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์—๋„ ์•…์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋œ๋‹ค. MySQL๊ณผ ๊ฐ™์ด ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์  ์ €์žฅ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„  ๊ทธ ์˜ํ–ฅ์ด ๋”์šฑ ํฌ๋‹ค. 

 

MySQL์—์„œ๋Š” PK๊ฐ€ ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ธ๋ฑ์Šค๋Š” PK์— ์˜์กดํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ์ธ๋ฑ์Šค๋ฅผ ํƒ€๊ณ  ๋“ค์–ด์™€์„œ PK๋ฅผ ํ†ตํ•ด ์ €์žฅ๋œ ์œ„์น˜์—์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

 

 

PK๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋Š” ์ธ๋ฑ์Šค๊นŒ์ง€ ์žฌ๊ตฌ์„ฑํ•˜๋„๋ก ์˜ํ–ฅ์„ ์ค€๋‹ค. ์ด๋Š” ์—„์ฒญ๋‚œ ๋””์Šคํฌ ์ž‘์—…์„ ํ•„์š”๋กœ ํ•œ๋‹ค. 

 

 

๋น„์ฆˆ๋‹ˆ์Šค ์˜์—ญ์—์„œ ์ ˆ๋Œ€์ ์œผ๋กœ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์—†๋‹ค

 

 

 

2. ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ์ด์–ด์ง„๋‹ค.

PK๋ฅผ ๋Œ€์ฒดํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ์ž๋™ ์ฆ๊ฐ€ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ž์—ฐํ‚ค๋ฅผ PK๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์‹ฌ์ง€์–ด ๋ณตํ•ฉํ‚ค๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ์ด๋Š” PK๋ฅผ ๋น„๋Œ€ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์„ฑ๋Šฅ์— ์ข‹์ง€ ๋ชปํ•˜๋‹ค.

 

๋น„์ฆˆ๋‹ˆ์Šค์™€ ๊ด€๋ จํžˆ๋Š” PK ๊ฐ’์€ ์ž๋™ ์ฆ๊ฐ€ํ•˜๋Š” ์ „๋žต์„ ๊ฐ–๋Š” ์ธ์กฐํ‚ค๋ฅผ PK๋กœ ๋‘์—ˆ์„ ๋•Œ ๋ณด๋‹ค ํ›จ์”ฌ ํฐ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๋‹จ์ˆœ ์ˆซ์ž๋ณด๋‹ค ํ›จ์”ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌ๋ฉฐ, ์‹ฌ์ง€์–ด ๋ณตํ•ฉํ‚ค๋กœ ๊ตฌ์„ฑ๋  ๊ฒฝ์šฐ PK์˜ ํฌ๊ธฐ๋Š” ํ›จ์”ฌ ๋น„๋Œ€ํ•ด์ง„๋‹ค. 

 

์ผ๋ฐ˜์ ์œผ๋กœ PK์˜ ํฌ๊ธฐ๋Š” ์ž‘์„์ˆ˜๋ก ์ข‹์œผ๋ฉฐ, ์›์‹œํƒ€์ž… ์ผ์ˆ˜๋ก ์ข‹๋‹ค. 

 

์•„๋ž˜ ๋‚ด์šฉ์€ RealMySQL์—์„œ 5๊ฐœ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ–๋Š” ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค(Primary Key) ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ์ธ๋ฑ์Šค ํฌ๊ธฐ ๋น„๊ต๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

๋ ˆ์ฝ”๋“œ ํ•œ ๊ฑด๋‹น ์•ฝ 50๋ฐ”์ดํŠธ์˜ ์ฐจ์ด๋Š” ๋ฏธ๋ฏธํ•ด ๋ณด์ด์ง€๋งŒ, ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๊ฐ€ 100๋งŒ ๊ฑด์ด ๋˜๋ฉด ์ธ๋ฑ์Šค ํฌ๊ธฐ๋Š” 190MB๋‚˜ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.

๋งŒ์•ฝ ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๊ฐ€ 1000๋งŒ ๊ฑด์ด ๋˜๋ฉด ๊ทธ ์ฐจ์ด๋Š” ๋ฌด๋ ค 1.9GB๊นŒ์ง€ ์ฆ๊ฐ€ํ•œ๋‹ค. ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋™์ผํ•œ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ํ‚ค์˜ ํฌ๊ธฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

 

3. ๋ณต์žกํ•œ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ์™€ ๊ฐœ๋ฐœ ๋‚œ์ด๋„ ์ƒ์Šน

์ž์—ฐํ‚ค๋ฅผ PK๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด 1๊ฐœ์˜ ์ปฌ๋Ÿผ๋งŒ์œผ๋กœ PK๋ฅผ ๊ตฌ์„ฑํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ณตํ•ฉํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค. 

๋งŒ์•ฝ ๋ณตํ•ฉํ‚ค๋ฅผ ๊ฐ–๋Š” ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งบ์–ด์•ผ ํ•œ๋‹ค๋ฉด ๋ณตํ•ฉํ‚ค๋ฅผ ์ „๋ถ€ ์™ธ๋ž˜ํ‚ค๋กœ ๊ฐ–๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ณ  ์ด๋Š” ํ…Œ์ด๋ธ” ๊ตฌ์กฐ์™€ ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. 

 

๋ณตํ•ฉํ‚ค๋ฅผ PK๋กœ ๊ฐ–๋Š” ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ํ…Œ์ด๋ธ”์ด๋ผ๋ฉด ํ•ด๋‹น ๋ณตํ•ฉํ‚ค๋ฅผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด (์ƒ๋…„์›”์ผ, ์ด๋ฆ„, ์„ฑ๋ณ„)์„ PK๋กœ ๊ฐ–๋Š” ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด ํ•ด๋‹น ํ‚ค๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์ด๋ฏ€๋กœ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ฃผ๋ฌธ ๋‚ด์—ญ ํ…Œ์ด๋ธ”์—๋„ (์ƒ๋…„์›”์ผ, ์ด๋ฆ„, ์„ฑ๋ณ„) ์ปฌ๋Ÿผ์„ ๋™์ผํ•˜๊ฒŒ ๊ฐ€์ ธ์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

JPA์—์„œ ๋ณตํ•ฉํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  @Embeddable, @EmbeddedId๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, @IdClass๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

 

 

์•„๋ž˜ ์˜ˆ์‹œ ์ฝ”๋“œ๋Š” @Embeddable, @EmbeddedId ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณตํ•ฉํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ์Šต์ด๋‹ค. 

@Embeddable
public class CompositeKey implements Serializable {

    private String keyPart1;
    private Long keyPart2;

    // equals()์™€ hashCode() ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CompositeKey that = (CompositeKey) o;
        return Objects.equals(keyPart1, that.keyPart1) &&
               Objects.equals(keyPart2, that.keyPart2);
    }

    @Override
    public int hashCode() {
        return Objects.hash(keyPart1, keyPart2);
    }

 

 

@Entity
public class MyEntity {

    @EmbeddedId
    private CompositeKey id;

    private String someValue;
    }
}

 

 

 

๋งŒ์•ฝ MyEntity์™€ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์™ธ๋ž˜ํ‚ค๋ฅผ ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

import jakarta.persistence.*;

@Entity
public class ChildEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; 

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name = "parent_key_part1", referencedColumnName = "keyPart1"),
        @JoinColumn(name = "parent_key_part2", referencedColumnName = "keyPart2")
    })
    private MyEntity parent; // ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ณตํ•ฉํ‚ค ์ฐธ์กฐ

    private String childValue;

    public ChildEntity(MyEntity parent, String childValue) {
        this.parent = parent;
        this.childValue = childValue;
    }
}

 

 

 

 

 

4. ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ์˜ ์œ„ํ—˜

๋Œ€์ฒดํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ‚ค์˜ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์™„์ „ํžˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ„์ž„ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ˜๋ฉด์— ์ž์—ฐํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์™€ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ ๋“ฑ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, ์•„๋ฌด๋ž˜๋„ ์‚ฌ๋žŒ์ด ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์ด๋ฅผ ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ •์ ์ด๋‹ค.

 

์ธ์กฐํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ํ‚ค๋ฅผ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.  

 

 

 

 

 

 

 

 

 

 

 

 

 

4. ๊ฒฐ๋ก 

JPA๋Š” ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ํ•ญ์ƒ ์ธ์กฐ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. ๊ทธ ์™ธ์—๋„ PK๊ฐ€ ์ฃผ๋ฏผ๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๊ฐœ์ธ ์ •๋ณด๋ผ๋ฉด ์œ ์ถœ ์œ„ํ—˜ ๋“ฑ์˜ ๋ถ€์ˆ˜์ ์ธ ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ ๊ฐ€๊ธ‰์ ์ด๋ฉด ์ธ์กฐ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์š”์ฆ˜์˜ ์ถ”์„ธ์ด๋‹ค.

 

์ง€๊ธˆ๊นŒ์ง€๋Š” ์ธ์กฐํ‚ค๋ฅผ ๋‹น์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์™”์ง€๋งŒ, ์•Œ๊ณ  ์“ฐ๋Š” ๊ฒƒ๊ณผ ๋ชจ๋ฅด๊ณ  ์“ฐ๋Š” ๊ฒƒ์€ ์ฒœ์ง€์ฐจ์ด์ด๋‹ค. 

 

์™œ? ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ๋˜์ง€๋ฉฐ, ๋” ๊นŠ์ด ๊ณ ๋ฏผํ•˜๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•ด ๋‚˜๊ฐ€์•ผ๊ฒ ๋‹ค.