๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ญ์์ "ํธ๋ฆฌ๊ฑฐ"๋ผ๋ ์ฉ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ํน์ ํ ์ด๋ธ ๋๋ ๋ทฐ์ ํน์ ์ด๋ฒคํธ์ ๋ํ ์๋ต์ผ๋ก ์๋์ผ๋ก ์คํ๋๋ ์ ์ฐจ ์ฝ๋์ ๊ด๋ จ์ด ์์ต๋๋ค. ํธ๋ฆฌ๊ฑฐ๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ณ ๋น์ฆ๋์ค ๊ท์น์ ์ ์ฉํ๋ฉฐ ์์คํ ์ ๋ ผ๋ฆฌ์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฅํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ํ์ ๊ตฌ์กฐ์ ๋๋ค.
ํธ๋ฆฌ๊ฑฐ ์ ํ
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)์ ํธ๋ฆฌ๊ฑฐ๊ฐ ์ต์ ์ผ๋ก ๊ด๋ฆฌ๋๋๋ก ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ํธ๋ฆฌ๊ฑฐ๋ ๋น์ฆ๋์ค ์๊ตฌ ์ฌํญ๊ณผ ์ผ์นํด์ผ ํ๋ฉฐ ํธ๋ฆฌ๊ฑฐ ์ฌ์ฉ์ ์์คํ ๋ด์์ ์ ๋ฌธ์ํ๋์ด์ผ ํฉ๋๋ค. ์๋ํ์ง ์์ ๋ถ์์ฉ์ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก ์ต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ๋ฏผ์ฒฉ์ฑ, ํ์ฅ์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ์ด๋ผ๋ ์ค์ํ ๋ชฉํ๋ฅผ ์ง์ํ๋ ๊ตฌํ ๋ฐ ์ง์์ ์ธ ๊ด๋ฆฌ์ ๋ํ ์ ๊ตฌ์กฐํ๋ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํฉ๋๋ค.