๋ฉ‹์‚ฌ Backend Plus 21์ผ์ฐจ ๐Ÿฆ

์‹ ์žฌ์›ยท2023๋…„ 11์›” 20์ผ

์˜ค๋Š˜์€ ํŒ€ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ERD (์—ฐ๊ด€๊ด€๊ณ„) ์ž‘์„ฑ๊ณผ API ๋ช…์„ธ์„œ, ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„์„œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฐฐ์šด์ ์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์‹๋ณ„ ? ๋น„์‹๋ณ„ ?

๋จผ์ € ERD๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ํ…Œ์ด๋ธ”๊ฐ„์˜ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์„ค์ •ํ• ๋•Œ ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ด€๊ณ„๊ฐ€ ์‹๋ณ„ ํ˜น์€ ๋น„์‹๋ณ„ ์ธ์ง€ ์ •์˜๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

๋‚˜๋Š” ์‹๋ณ„, ๋น„์‹๋ณ„์ด๋ž€ ํ‚ค์›Œ๋“œ๋ฅผ ์ฒ˜์Œ ๋“ค์–ด๋ด์„œ ์ •๋ฆฌ๋ฅผ ํ•˜๋ฉฐ ๋ฆฌ๋งˆ์ธ๋“œ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
๊ทธ๋ž˜์„œ ์‹๋ณ„ ๋น„์‹๋ณ„์ด ๋ญ˜๊นŒ ?


์œ ์ € ํ…Œ์ด๋ธ”๊ณผ ๊ฒŒ์‹œํŒ ํ…Œ์ด๋ธ”์˜ ๊ด€๊ณ„๊ฐ€ 1 : N (์ผ ๋Œ€ ๋‹ค) ๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž, ์ด์œ ๋Š” ํ•œ๋ช…์˜ ์œ ์ €๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๊ฒŒ์‹œํŒ์— ๊ธ€์„ ์ž‘์„ฑํ• ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ด€๊ณ„๋ฅผ ์‹๋ณ„ ๊ด€๊ณ„ ํ˜น์€ ๋น„์‹๋ณ„ ๊ด€๊ณ„๋กœ ์ •์˜ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹๋ณ„

  • ์‹๋ณ„ ๊ด€๊ณ„๋ž€ ๋ถ€๋ชจ์˜ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค (PK)๋ฅผ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค (PK)๋กœ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ์•„๋ž˜์˜ ์‚ฌ์ง„์—์„œ ์œ ์ € ํ…Œ์ด๋ธ”์ด ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์ด๋˜๊ณ , ๊ฒŒ์‹œํŒ ํ…Œ์ด๋ธ”์ด ์ž์‹ ํ…Œ์ด๋ธ”์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์‹ค์„ ์œผ๋กœ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋น„์‹๋ณ„

  • ๋น„์‹๋ณ„ ๊ด€๊ณ„๋ž€ ๋ถ€๋ชจ์˜ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค (PK)๋ฅผ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ํ‚ค (FK)๋กœ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ์ ์„ ์œผ๋กœ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์‹๋ณ„, ๋น„์‹๋ณ„ ์ •๋ฆฌ

  • ์‹๋ณ„ ๊ด€๊ณ„์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ ์ฐธ์กฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌ ํ•ด์•ผ๋งŒ ์ž์‹ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โžก ์˜ˆ๋ฅผ ๋“ค๋ฉด ์œ ์ €๊ฐ€ ์—†์œผ๋ฉด ๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌ ํ• ์ˆ˜ ์—†๋‹ค.

  • ๋น„์‹๋ณ„ ๊ด€๊ณ„์—์„œ๋Š” ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ ์ฐธ์กฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„๋„ ์ž์‹ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โžก ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ถ•๊ตฌ์„ ์ˆ˜์™€ ์ถ•๊ตฌํ™” ์ผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
(๊ผญ ์ถ•๊ตฌํ™”๋ฅผ ์‹ ์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋А๋‚Œ ์ธ๊ฒƒ ๊ฐ™๋‹ค.)

์‹๋ณ„๊ด€๊ณ„๋Š” ๊ตฌ์กฐ๋ณ€๊ฒฝ์˜ ์–ด๋ ค์›€์ด ์žˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค, ๋น„์‹๋ณ„ ๊ด€๊ณ„๋Š” ๊ตฌ์กฐ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์žฅ๋‹จ์ ์„ ํ†ตํ•ด ํ•„์š”์— ๋”ฐ๋ผ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ด์•ผ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ค‘

@SuperBuilder

  • ๊ธฐ์กด์˜ @Builder ์–ด๋…ธํ…Œ์ด์…˜์˜ ๋ฌธ์ œ์ ์ธ ์ƒ์†๋ฐ›์€ ํ•„๋“œ๋ฅผ ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ ์ œ์•ˆ ์‚ฌํ•ญ์„ ๋ณด์•ˆํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฐœ๋… ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • @SuperBuilder ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ƒ์†๋ฐ›์€ ํ•„๋”๋„ ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ž์‹ Entity (Product) ์™€ ๋ถ€๋ชจ Entity (BaseEntity) ์–‘์ชฝ์— @SuperBuilder ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ฐ๊ฐ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ ํ›„ ํ‰์†Œ์— ์‚ฌ์šฉํ•˜๋˜ @Builder ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Git ์ฒด๋ฆฌํ”ฝ

  • ์ฒ˜์Œ ๋“ค์–ด๋ณด๋Š” Git ์˜ ๊ธฐ๋Šฅ ์ด์˜€๋‹ค.

์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ์žˆ๋Š” ์ปค๋ฐ‹์„ ์„ ํƒํ•˜์—ฌ ๋‚˜์˜ ๋ธŒ๋žœ์น˜์— ์ ์šฉ์‹œํ‚ฌ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด (๊ธฐ๋Šฅ) ์ž…๋‹ˆ๋‹ค.

  • ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ๋‚ด์—ญ์ด ๋‚˜์˜ ๋ธŒ๋žœ์น˜๋กœ ์˜จ์ „ํžˆ ๋„˜์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • 1 : ๋ธŒ๋žœ์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    2: ์ฒด๋ฆฌํ”ฝ ํ•  ์ปค๋ฐ‹์„ ๊ธฐ์ค€์œผ๋กœ ์ฒด๋ฆฌํ”ฝ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

  • ์ถ”๊ฐ€๋กœ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ, ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋“ฑ์„ ์ •๋ฆฌํ•  ์˜ˆ์ •์ด๋‹ค.
  • EndPoint (์—”๋“œํฌ์ธํŠธ)๋„ ์ •๋ฆฌํ•  ์˜ˆ์ •์ด๋‹ค.

REFERENCE

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