Atlas Triggers ๋ณํ
์ด ํ์ด์ง์ ๋ด์ฉ
์ฟผ๋ฆฌ ๋ณํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ SQL Atlas ํธ๋ฆฌ๊ฑฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ MongoDB Atlas Triggers ๋ก ๋ณํํ ์ ์์ต๋๋ค. ์ฟผ๋ฆฌ ๋ณํ๊ธฐ๋ Atlas Triggers๋ฅผ ๋ณํํ ๋ ํ๋ก์ ํธ์ ์ ์๋ SQL ์ฝ๋์ ๊ด๊ณํ ์คํค๋ง๋ฅผ ๊ณ ๋ คํฉ๋๋ค.
์ด ์์ ์ ๋ํ์ฌ
์ฟผ๋ฆฌ ๋ณํ๊ธฐ๋ ๊ธธ๊ฑฐ๋ ๋ณต์กํ ์ฟผ๋ฆฌ, ํธ๋ฆฌ๊ฑฐ ๋๋ ์ ์ฅ ํ๋ก์์ ๋ฅผ ๋ณํํ ์ ์๋ AI ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. ์ผ๋ถ ์ฟผ๋ฆฌ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณํ๋์ง ์์ ์ ์๊ณ , ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ ์ ํ ๋ณํ๋์ง ์์ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ ๋ณํ๊ธฐ๋ ํ์ฌ ํ๋ก์ ํธ์ ๊ด๊ณํ ์คํค๋ง, MongoDB ์คํค๋ง ๋ฐ ๋งคํ ๊ท์น์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํฉ๋๋ค. ์ฟผ๋ฆฌ๊ฐ ๊ด๊ณํ ์คํค๋ง์ ์๋ ํ ์ด๋ธ์ ์ฐธ๊ณ ํ๊ฑฐ๋ MongoDB collection์ ๋งคํ๋์ง ์์ ํ ์ด๋ธ์ ์ฐธ๊ณ ํ๋ ๊ฒฝ์ฐ ๋ณํ์ด ์คํจํ๊ฑฐ๋ ์ฌ๋ฐ๋ฅด์ง ์์ ์ ์์ต๋๋ค.
๋ณํ๋ ์ฟผ๋ฆฌ, ํธ๋ฆฌ๊ฑฐ, ๋ทฐ ๋ฐ ์ ์ฅ ํ๋ก์์ ๋ ํ๋ก์ ํธ์ ์ ์ฅ๋๋ฉฐ ํ๋ก์ ํธ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ํตํด ์ ์ง๋ฉ๋๋ค.
SQL ์ฟผ๋ฆฌ๋ 40 000 ํ ์คํธ ๋ฌธ์๋ก ์ ํ๋ฉ๋๋ค.
์ผ์ชฝ Query Converter ์ฐฝ์์ ์ด์ ์ ํ ๋ด์ญ์ ๋ณผ ์ ์์ต๋๋ค. ๊ฐ ๋ณํ์๋ ๋ณํ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ์์ด์ฝ์ด ์์ต๋๋ค. ๊ฐ์ฒด ์์ ์์ด์ฝ์ด ์์ผ๋ฉด ์์ง ๋ณํ์ด ์๋๋์ง ์์ ๊ฒ์ ๋๋ค.
Icon์ค๋ชSpinner์ด์ ๋ณํ์ด ์คํ ์ค์ ๋๋ค.๋ น์ ํ์ธ ํ์์ ํ์ ์ฑ๊ณตํ์ต๋๋ค.๋นจ๊ฐ์ ๋๋ํ๋ง์ง๋ง ์๋์์ ์ ํ์ด ์คํจํ์ต๋๋ค.
์์ํ๊ธฐ ์ ์
relational database์๋ ๋ณํํ trigger๊ฐ ํ๋ ์ด์ ์์ด์ผ ํฉ๋๋ค.
ํ๋ก๋์ ํ๊ฒฝ์ ๋ฐฐํฌํ๊ธฐ ์ ์ ํญ์ ์ฟผ๋ฆฌ ๋ณํ๊ธฐ์์ ์์ฑ๋ ์ฝ๋๋ฅผ ๊ฒํ ํ๊ณ ํ ์คํธํฉ๋๋ค.
๋จ๊ณ
Atlas Triggers ์ ํ
Import Database Objects ๋ชจ๋ฌ์์ ๋ค์์ ํด๋ฆญํฉ๋๋ค. Database ์์ ์๋ ์์ด์ฝ์ ํด๋ฆญํฉ๋๋ค.
๋ค์์ ํด๋ฆญํฉ๋๋ค. ์์ด์ฝ์ ํด๋ฆญํฉ๋๋ค.
๋ค์์ ํด๋ฆญํฉ๋๋ค. Triggers ์์ ์๋ ์์ด์ฝ์ ๋๋ค.
ํ
์ ํ trigger ๋ฅผ ํ ๊ธํ๋ ค๋ฉด ๋ค์์ ํด๋ฆญํฉ๋๋ค. trigger ์ด๋ฆ ์์ ์๋ ์์ด์ฝ์ ํด๋ฆญํฉ๋๋ค. ๋ชจ๋ ํธ๋ฆฌ๊ฑฐ๊ฐ ๊ธฐ๋ณธ๊ฐ ์ ํ๋์ด ์์ต๋๋ค.
Save๋ฅผ ํด๋ฆญํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๊ฐ trigger์ ๋ํ ์ฝ๋๋ฅผ ํ๋ก์ ํธ๋ก ๊ฐ์ ธ์ค๊ณ ์ผ์ชฝ Query Converter ์ฐฝ์ Triggers ์๋์ ํ์ํฉ๋๋ค.
SQL trigger ๋ณํ
์ผ์ชฝ ์ฐฝ Triggers ์๋์์ ํธ๋ฆฌ๊ฑฐ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
ํ
Filter ํ ์คํธ ์์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์ด๋ฆ๊ณผ SQL ๊ตฌ๋ฌธ์ ๊ธฐ์ค์ผ๋ก ์ฟผ๋ฆฌ, ์ ์ฅ ํ๋ก์์ , ํธ๋ฆฌ๊ฑฐ ๋ฐ ๋ทฐ๋ฅผ ํํฐ๋งํ ์ ์์ต๋๋ค.
SQL ํธ๋ฆฌ๊ฑฐ ์ฝ๋๊ฐ Imported Trigger ์ฐฝ์ ํ์๋ฉ๋๋ค.
Convert ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค. ์ฟผ๋ฆฌ ๋ณํ๊ธฐ๊ฐ ์ฝ๋๋ฅผ ๋ณํํ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
๋ณํ๋ MongoDB ์ฝ๋๊ฐ Converted MongoDB Query ์ฐฝ์ ํ์๋ฉ๋๋ค.
์ฟผ๋ฆฌ ๋ณํ๊ธฐ์ ์ค๋ฅ๊ฐ ์๋ ๊ฒฝ์ฐ Converted MongoDB Query ์ฐฝ์์ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
๋ค์์ ํด๋ฆญํฉ๋๋ค. Converted MongoDB Query ์ฐฝ์ ์์ด์ฝ์ ํด๋ฆญํ์ฌ MongoDB ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํฉ๋๋ค.
Atlas์์ trigger ๋ง๋ค๊ธฐ
Overview ํ๋ฉด์์ Triggers ์ ํด๋ฆญํฉ๋๋ค.
Add Trigger๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํ
๋ณํ๋ MongoDB ์ฝ๋์๋ Atlas์์ trigger๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ ํํด์ผ ํ๋ ๋ชจ๋ ๋ณ์์ ๋ํ ์ฃผ์ ์ค์ด ํฌํจ๋์ด ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// Collection Name: products // Operation Type: Insert Name ํ ์คํธ ํ๋์ trigger ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
Cluster Name, Database Name ๋ฐ Collection Name ๋ฅผ ์ ํํฉ๋๋ค.
Operation Type ์ Insert Document ์ผ๋ก ์ ํํฉ๋๋ค.
Document Preimage ๋ฐ Full Document ์ค์์น๋ฅผ ์ผ์ง์ผ๋ก ์ ํํฉ๋๋ค.
Function ํ ์คํธ ํ๋์ ๋ณํ๋ MongoDB ์ฝ๋๋ฅผ ์ ๋ ฅํฉ๋๋ค.
์ค์
์์ฑ๋ Atlas ์ฝ๋์์
clusterName
๋ฐdatabaseName
๋ฅผ cluster ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ๊ณผ ์ผ์นํ๋๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.Save ์ ํด๋ฆญํ์ฌ Realm ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
์์
MySQL trigger ๋ณํ
๋ค์ ์์ ๋ Atlas์ ๋ํ MySQL trigger ๋ณํ๊ธฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
CREATE TRIGGER TRIGGER_UPPER_PRODUCTS BEFORE INSERT ON MYDATABASE.PRODUCTS FOR EACH ROW SET NEW.FULL_NAME = UPPER(new.FULL_NAME)
// The relational database trigger has been converted to MongoDB Atlas Triggers format. // To create a trigger, open your Atlas project (https://cloud.mongodb.com) and choose Triggers // For more on Atlas triggers see the docs: https://www.mongodb.com/ko-kr/docs/atlas/triggers/ // Create your trigger using the following settings and paste the code into the Function section: // Watch Against: Collection // Cluster Name: Ensure clusterName matches selection in Atlas Trigger configuration // Database Name: Ensure databaseName matches selection in Atlas Trigger configuration // Collection Name: products // Operation Type: Insert // Full Document: On // Document Preimage: Off exports = async function(changeEvent) { const clusterName = "clusterName"; const databaseName = "databaseName"; const { fullDocument } = changeEvent; const db = context.services.get(clusterName).db(databaseName); const collection = db.collection('products'); if (fullDocument && fullDocument.fullName) { fullDocument.fullName = fullDocument.fullName.toUpperCase(); await collection.updateOne({ _id: fullDocument._id }, { $set: { fullName: fullDocument.fullName } }); } };