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

ํŠธ๋ฆฌ๊ฑฐ ์œ ํ˜•

A. ํ–‰ ์ˆ˜์ค€ ํŠธ๋ฆฌ๊ฑฐ: INSERT, UPDATE ๋˜๋Š” DELETE ์ž‘์—…์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฐ ํ–‰์— ๋Œ€ํ•ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. B. ๋ฌธ ์ˆ˜์ค€ ํŠธ๋ฆฌ๊ฑฐ: ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํ–‰ ์ˆ˜์— ๊ด€๊ณ„์—†์ด ๊ฐ ํŠธ๋žœ์žญ์…˜ SQL ๋ฌธ์— ๋Œ€ํ•ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ์ด๋ฒคํŠธ

A. BEFORE Triggers: Triggering SQL ๋ฌธ ์ด์ „์— ์‹คํ–‰๋œ๋‹ค. B. AFTER Triggers: Triggering SQL ๋ฌธ ์ดํ›„์— ์‹คํ–‰๋œ๋‹ค. C. INSTEAD OF ํŠธ๋ฆฌ๊ฑฐ: ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณด๊ธฐ์™€ โ€‹โ€‹ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ฆฌ๊ฑฐ๋ง SQL ๋ฌธ ๋Œ€์‹  ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ๊ฑฐ์˜ ๊ธฐ๋Šฅ์  ๋ชฉ์ 

A. ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ: ํŠธ๋ฆฌ๊ฑฐ๋Š” ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ฝ ์กฐ๊ฑด๊ณผ ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. B. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ž๋™ํ™”: ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์ค‘์— ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. C. ๊ฐ์‚ฌ: ํŠธ๋ฆฌ๊ฑฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ถ”์ ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜์—ฌ ๋ณด์•ˆ๊ณผ ์ฑ…์ž„์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค. D. ๊ณ„๋‹จ์‹ ์ž‘์—…: ํŠธ๋ฆฌ๊ฑฐ๋Š” ๊ณ„๋‹จ์‹ ์—…๋ฐ์ดํŠธ ๋ฐ ์‚ญ์ œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

AppMaster ๋‚ด์˜ ํŠธ๋ฆฌ๊ฑฐ ์—ญํ•™

์ฝ”๋“œ๊ฐ€ ์—†๋Š” ๋„๊ตฌ์ธ AppMaster ํ”Œ๋žซํผ์€ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ํŠธ๋ฆฌ๊ฑฐ ๊ธฐ๋Šฅ์„ ๋”์šฑ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ์ด ๋ฐ์ดํ„ฐ ๋ชจ๋ธ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ) ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ์œผ๋กœ์จ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ธต์— ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  Postgresql ํ˜ธํ™˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Go๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ํŠธ๋ฆฌ๊ฑฐ์˜ ์„ฑ๋Šฅ ์˜ํ–ฅ์ด ๋งค์šฐ ์ตœ์ ํ™”๋ฉ๋‹ˆ๋‹ค.

์žฅ์ ๊ณผ ๋‹จ์ 

์ด์ :

A. ํšจ์œจ์„ฑ: ํŠธ๋ฆฌ๊ฑฐ๋Š” ๋ฐฐ์น˜ ์ž‘์—…์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. B. ์ผ๊ด€์„ฑ: ํŠน์ • ์ ˆ์ฐจ๋ฅผ ํ•ญ์ƒ ์ค€์ˆ˜ํ•˜๋„๋ก ํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

๋‹จ์ :

A. ๋ณต์žก์„ฑ: ํŠนํžˆ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋‹ค๋ฅธ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. B. ์„ฑ๋Šฅ ์˜ํ–ฅ: ๋น„ํšจ์œจ์ ์œผ๋กœ ์ž‘์„ฑ๋œ ํŠธ๋ฆฌ๊ฑฐ๋Š” ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ

A. ๊ฐ์‚ฌ ํŠธ๋ฆฌ๊ฑฐ: ๊ฐ์‚ฌ ๋ชฉ์ ์œผ๋กœ ํŠน์ • ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ์ž…๋‹ˆ๋‹ค.

์ƒ์„ฑ ํŠธ๋ฆฌ๊ฑฐ audit_trigger

์—…๋ฐ์ดํŠธ ํ›„ ์ง์›

๊ฐ ํ–‰์— ๋Œ€ํ•ด

์‹คํ–‰ ํ•จ์ˆ˜ log_employee_changes();

B. ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ํŠธ๋ฆฌ๊ฑฐ: ์‚ญ์ œ๋œ ์ƒ์œ„ ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ•˜์œ„ ๋ ˆ์ฝ”๋“œ๋กœ ์‚ญ์ œ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ ํŠธ๋ฆฌ๊ฑฐ reference_integrity_trigger

๋ถ€๋ชจ๋ฅผ ์‚ญ์ œํ•œ ํ›„

๊ฐ ํ–‰์— ๋Œ€ํ•ด

์‹คํ–‰ ํ•จ์ˆ˜ delete_children();

๊ฒฐ๋ก  ๋ฐ ๊ณ ๋ ค ์‚ฌํ•ญ

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

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

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