: ORM์ ํ๋ก๊ทธ๋จ ์์ ๊ฐ์ฒด์ DB์ ํ ์ด๋ธ(Relation)์ด ์ผ๋์ผ ๋์ํ๋ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ์ ์๋งํ๋ค! ORM์ ์ด์ฉํ๋ฉด query๊ฐ ์๋ ๋ฉ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ์ ์๋ค๋ ๊ฒ์ด ์ฅ์ ์ด๋ค! (SQL๋ฌธ์ ์์ฑํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํตํ ์ ์๋ค.)
์)
If I use MySQL: SELECT * FROM user;
If I use ORM: user.findAll();
: ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํด์ง๋ฉด ORM์ผ๋ก ํํํ๋ ๋ฐ ํ๊ณ๊ฐ ์๊ธด๋ค.
: raw query์ ๋นํด ๋๋ฆฌ๋ค.
๋ค์ํ ORM ํ๋ ์์ํฌ๊ฐ ์กด์ฌํ๋ค.
์) Sequelize, Djanggo ORM, TypeORM, JPA/Hibernate ๋ฑ
: Node.js์ ๋ํ์ ์ธ ORMํ๋ ์์ํฌ, Promise๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ค.
: Sequelize-cli๋ sequelize๋ฅผ ์ข ๋ ํจ์จ์ ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ชจ๋.
: Sequelize-cli๋ ๋ง์ด๊ทธ๋ ์ด์
์ ํ ์ ์๋๋ก ๋๋ ํด์ด๋ค.
: ๋ชจ๋ธ์ ์์ฑํด์ฃผ๊ฑฐ๋ ์คํค๋ง๋ฅผ ์ ์ฉํ ์ ์๋๋ก ๋๋๋ค!
: ๋ง์ด๊ทธ๋ ์ด์ ์ ์์ธ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ์ฎ๊ฒจ์ฃผ๊ฑฐ๋, ์ ์๋ฅผ ๊ฐ๊ณ ์๋ ์๋ก์ด ํ ์ด๋ธ์ ๋ง๋๋ ๊ฒ ์์ฒด์ ๊ทธ ๊ธฐ๋ก์ ๋งํ๋ค!
: ํด๋์ค๋ฅผ ๋ฉ์๋์ ์์ฑ์ด ํฌํจ๋ ํ๋กํ ํ์
์ด๋ผ๊ณ ํ๋ค๋ฉด, ๋ชจ๋ธ์ ๋ฉ์๋์ ์์ฑ, ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์ ์ํฐํฐ(์คํค๋ง)๊ฐ ํฌํจ๋ ๊ฐ๋
์ด๋ผ ํ ์ ์๋ค.
: ์ํผ ์ค์ํ ๊ฒ์ ๋ชจ๋ธ์๋ ์ํฐํฐ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ค๋ ์ !
Migration์ ์คํค๋ง๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค ๊ฒ์ธ์ง ์ค์ ํ๋ ํ์ผ์ด๋ค.
Model์ ํฌ๋ฆฌ์์ดํธ, ์
๋ฐ์ดํธ, ๋์คํธ๋ก์ด ๋ฑ์ ๋ฉ์๋, ์ฆ ๋ชจ๋ธ์ ์๋ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ๋ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
์คํ๋ฆฐํธ ์์์์ ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ๋ํดํธ๊ฐ์ ์ค์ ํ๋ฉด, ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ฒด?์ ํ
์ด๋ธ์ ํ์ฑํ ๋ ๋ํดํธ๊ฐ์ด ์ ์ฉ๋๋ ๊ฒ์ด๊ณ ,
๋ชจ๋ธ ํ์ผ์ ๋ํดํธ๊ฐ์ ์ค์ ํ๋ฉด, ๋ฉ์๋๋ฅผ ํตํด ๊ฐ์ ์ฃผ๊ณ ๋ฐ์ ๋ ๋ํดํธ๊ฐ์ด ํ์ฑ๋๋ ๊ฒ์ด๋ค.
(๋ฌผ๋ก ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ ๊ตฐ๋ฐ์ ๋์ผํ๊ฒ ์ค์ ํด์ฃผ์ด์ผ ํ ๋ฏ ์ถ๋ค.)
npx sequelize-cli init
์ด ๋ช
๋ น์ด๋ฅผ ํตํด ํ๋ก์ ํธ๋ฅผ ์์ํ๋๋ฐ!
์
๋ ฅํ๋ฉด ์๊ธฐ๋ ์ฌ๋ฌ ํด๋๋ค์ด ์๋ค!
๊ฐ๊ฐ์ ํดํฐ๊ฐ ํ๋ ์ญํ ์ ์๋์ ๊ฐ๋ค.
// Create a new user
const jane = await User.create({ firstName: "Jane", lastName: "Doe" });
console.log("Jane's auto-generated ID:", jane.id);
// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
Post.findAll({
where: {
authorId: 2
}
});
// SELECT * FROM post WHERE authorId = 2
// Change everyone without a last name to "Doe"
await User.update({ lastName: "Doe" }, {
where: {
lastName: null
}
});
// Delete everyone named "Jane"
await User.destroy({
where: {
firstName: "Jane"
}
});
const captains = await Captain.bulkCreate([
{ name: 'Jack Sparrow' },
{ name: 'Davy Jones' }
]);
console.log(captains.length); // 2
console.log(captains[0] instanceof Captain); // true
console.log(captains[0].name); // 'Jack Sparrow'
console.log(captains[0].id); // 1 // (or another auto-generated value)