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

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

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

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

  • CASCADE: ์ƒ์œ„ ํ…Œ์ด๋ธ”์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ•˜์œ„ ํ…Œ์ด๋ธ”์˜ ๊ด€๋ จ ๋ ˆ์ฝ”๋“œ์— ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค. ์ƒ์œ„ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋˜๋ฉด ๊ด€๋ จ๋œ ๋ชจ๋“  ํ•˜์œ„ ๋ ˆ์ฝ”๋“œ๋„ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.
  • SET NULL: ์ƒ์œ„ ํ…Œ์ด๋ธ”์˜ ์ฐธ์กฐ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋  ๋•Œ ๊ด€๋ จ ํ•˜์œ„ ๋ ˆ์ฝ”๋“œ์˜ ์™ธ๋ž˜ ํ‚ค ๊ฐ’์„ NULL๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ํ•˜์œ„ ๋ ˆ์ฝ”๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•ด์•ผ ํ•˜์ง€๋งŒ ์ƒ์œ„ ๋ ˆ์ฝ”๋“œ์™€ ํ•˜์œ„ ๋ ˆ์ฝ”๋“œ ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๋Š์–ด์ง„ ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • SET DEFAULT: ์ƒ์œ„ ํ…Œ์ด๋ธ”์˜ ์ฐธ์กฐ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋  ๋•Œ ๊ด€๋ จ ํ•˜์œ„ ๋ ˆ์ฝ”๋“œ์˜ ์™ธ๋ž˜ ํ‚ค ๊ฐ’์„ ํ•ด๋‹น ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์™ธ๋ž˜ ํ‚ค ํ•„๋“œ์˜ ๊ธฐ๋ณธ๊ฐ’์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์—์„œ ํŠน์ • ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • NO ACTION: ์ƒ์œ„ ํ…Œ์ด๋ธ”์˜ ์ฐธ์กฐ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋  ๋•Œ ๊ด€๋ จ ํ•˜์œ„ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ์กฐ์น˜๋„ ์ทจํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„๋ฐ˜ํ•˜๋Š” ์ž‘์—…์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

๊ณ„๋‹จ์‹ ์ž‘์—… ์™ธ์—๋„ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๊ฑฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(์˜ˆ: PL/SQL, T-SQL ๋˜๋Š” PL/pgSQL)๋กœ ์ž‘์„ฑ๋œ ์ ˆ์ฐจ์  ์ฝ”๋“œ ๋ธ”๋ก์œผ๋กœ, INSERT, UPDATE, DELETE ๋“ฑ๊ณผ ๊ฐ™์€ ํŠน์ • ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ž๋™์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TRUNCATE ์ž‘์—…. ์‚ฌ์ „ ์ •์˜๋œ ์ œ์•ฝ ์กฐ๊ฑด๊ณผ ๊ณ„๋‹จ์‹ ์ž‘์—…์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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