๐ฃORM
- Object-Relational Mapping
- ORM์ ์ด์ฉํ์ฌ ๊ฐ์ฒด์ ํํ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด๋ฅผ ์ฝ์
, ์์ ๋ฑ์ด ๊ฐ๋ฅํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ
์ด๋ธ์ ํํ๋ ์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ORM์ ์ด์ฉํ์ฌ
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด์ ํํ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃฐ ์ ์๋ค.ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ด ๊ฐ๋ฅํ๋ค.
- ์๋ฅผ๋ค์ด class๋ก Schema๋ฅผ ๋งคํํ๊ณ Method๋ก Query๋ฅผ ์์ฑํ๋ฉด ๊ฐ์ฒด๋ก ์ด๋ค์ง ํ
์ด๋ธ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ORM์ ์ฅ์ ์ ๋ณ๋์ SQL์ ์ฌ์ฉํ์ง ์๊ณ OOP์ธ์ด ๊ทธ๋๋ก๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ์๋์ผ๋ก ์์ฑ๋๋ ์ฟผ๋ฆฌ ๋๋ฌธ์ ์ง์ SQL์ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค ๋ณต์กํ ์๋ ์๋ค.
๐ฅORM Framework
Sequelize
- Sequelize๋ ORM์ค ํ๋๋ก Node.js์์ ๊ฐ์ฅ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ ORM์ด๋ฉฐ MySQL, PostgreSQL, MariaDB, SQLite, MSSQL์ ์ง์ํ๋ค.
- Sequelize์ ๊ฐ์ฅ ํฐ ํน์ง์ Promise(๋น๋๊ธฐ์์
์ ์ด๋ฐฉ์)๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ง์ ํด์ค๋ค๋ ์ ์ด๋ค.
const { sequelize } = require('./models/index.js');
const driver = () => {
sequelize.sync().then(() => {
console.log('์ด๊ธฐํ ์๋ฃ.');
}).catch((err) => {
console.error('์ด๊ธฐํ ์คํจ');
console.error(err);
});
};
driver();
- sequelize.sync()๋ Sequelize๊ฐ ์ด๊ธฐํ ๋ ๋ DB์ ํ์ํ ํ
์ด๋ธ์ ์์ฑํ๋ ํจ์์ด๋ค. ์๋ฅผ ๋ค๋ฉด quiz๋ผ๋ ๋ชจ๋ธ์ด ์๋ค๋ฉด CREATE TABLE IF NOT EXISTS
Quizzes
๋ก ์์ํ๋ SQL์ ์คํํ์ฌ ๋ชจ๋ธ๋ก ์ ์๋ ํ
์ด๋ธ์ ์์ฑํ๋ค.
- ์์์ ์ค๋ช
ํ Sequelize์ ํน์ง์ฒ๋ผ sync() ํจ์๋ Promise ํจํด์ผ๋ก ๊ตฌํ๋์ด ์๋ค. ๋ฐ๋ผ์ async์ await๋ฅผ ์ด์ฉํด ์๋์ ๊ฐ์ด ์ด๊ธฐํ ํ ์๋ ์๋ค.
const { sequelize } = require('./models/index.js');
const driver = async () => {
try {
await sequelize.sync();
} catch (err) {
console.error('์ด๊ธฐํ ์คํจ');
console.error(err);
return;
}
console.log('์ด๊ธฐํ ์๋ฃ.');
};
driver();
Prisma
- Prisma์ ํน์ง์ GraphQL์คํค๋ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก DB๋ฅผ ์๋์์ฑ ํด์ค๋ค.
- GraphQL์ด๋ facebook์์ ๋ง๋ Graph Query Language๋ก ์ดํ๋ฆฌ์ผ์ด์
์ฟผ๋ฆฌ ์ธ์ด๋ก์จ ๊ธฐ์กด์ REST API์ ํ๊ณ์ ์ ๊ทน๋ณตํ๊ณ ์ ๋์จ ํต์ ๊ท์ฝ์ผ๋ก REST API๋ฅผ ๋์ฒดํ ์ ์๋ค.
- ์ฌ์ค Prisma๋ ์ถํํ์ง ์ผ๋ง ๋์ง ์์ ๊ฒ ๊ฐ์ ์์ํ์ง๋ง ๊ด์ฌ์๋ GraphQL๊ณผ ์กฐํฉ์ด ์ข์ ๊ฒ ๊ฐ์์ ๋ ๊ณต๋ถํด๋ด์ผํ ํ์์ฑ์ด ์๋ ๊ฒ ๊ฐ๋ค.!
์ฐธ๊ณ
ORM์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ฅ์ ์, ๊ฐ์ฒด์งํฅ์ Domain Layer๊น์ง ๋ น์ฌ๋ผ ์ ์๋ค๋ ์ ์ด ์๋๊น ์ถ์ด์!
๋ค๋ง ๋จ์ ์ผ๋ก๋, RDBMS์ OOP๊ฐ ์์ ๋งค์นญ์ด ๋์ง ์๋ค๋ณด๋ ์ฌ๋ฌ ํ๊ณ์ ์ด ์กด์ฌํ์ฃ ใ ใ .
๋ง์ฐฌ๊ฐ์ง๋ก, ์ฟผ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๋ ์๊ฐ๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์๊ธฐ์ํด ๊ณต๋ถ๋ฅผ ํด์ผํ๋ ์ง์ ์ฅ๋ฒฝ๋ํ ๋ฌธ์ ๊ตฌ์.
๋, ์์ฆ์ ๋์ค๋ ์๊ธด๋ฐ ORM์ ๊ณต๋ถํ๋ SQL์ ์ํํ ์ฌ๋๋ค์ด ๋ง๋๋ผ... ๋ผ๋ ์์ข์ ์์ ๋ํ ์กด์ฌํด์!