[Node.js] Sequelize๋? (feat. ORM)
์๋ ํ์ธ์ Foma ์ ๋๋ค!
ํ์์ SQL๋ฌธ์ ์์ฑํ๋๋ฐ ์ต์ํ์ง ์์ ๋ถํธํ ์ ์ด ๋ง์์๋๋ฐ์.
๊ฐ์ฒด ์งํฅ์ ์ธ ์ฝ๋๋ก SQL๋ฌธ ์์ฑ ๋์ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์กฐ์์ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Sequelize์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
ORM์ด๋?
๋จผ์ Sequelize๋ฅผ ์๊ธฐ ์ํด์ ORM์ ๊ฐ๋ ์ ์์์ผ ํ๋๋ฐ์.
๊ทธ ์ด์ ๋ ๋ฐ๋ก Sequelize๊ฐ Node.js์ ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ด์ฃ .
ORM์ Object Relational Mapping์ ์ค์๋ง๋ก ๊ฐ์ฒด์ ๊ด๊ณ๋ฅผ ๋งคํํด์ฃผ๋ ๊ฒ ์ ๋๋ค.
์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๊ฐ์ฒด์ ๊ด๊ณ๋ฅผ ๋งคํํด์ค๋ค๋ ๊ฒ ์ด๋ค ๊ฒ์ผ๊น์?
์๋ฅผ ๋ค๋ฉด ๊ฐ์ฒด ์งํฅ ์ธ์ด์์๋ ๋ชจ๋ธ์ ์ ์ํ ๋ Class๋ฅผ ์ฌ์ฉํ๊ณ , ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ Table์ ์ฌ์ฉํฉ๋๋ค.
๋ฐ๋ก ์ฌ๊ธฐ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ก ๋ Class๋ฅผ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ Table์ ์ฐ๊ฒฐ์์ผ ์ค๋ค๋ ๊ฒ์ด์ฃ .
์ด๊ฒ์ ์ง์ SQL๋ฌธ์ ์์ฑํ์ง ์๊ณ , ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ด์ฃ .
(ORM์ ๋ ๊น์ด ์๊ณ ์ถ์ผ์ ๋ถ๋ค์ ์ฌ๊ธฐ ์์ ํ์ธํด ์ฃผ์ธ์!)
Sequelize๋?
Sequelize๋ Node.js์์ ORM์ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค.
(Spring์์ JPA/Hibernate, Django์์ Django ORM๊ณผ ๊ฐ์ต๋๋ค.)
๊ณต์ ํํ์ด์ง์์๋ ์๋์ ๊ฐ์ด ์๊ฐํ๊ณ ์์ด์.
Sequelize is a modern TypeScript and Node.js ORM for Postgres, MySQL, MariaDB, SQLite and SQL Server, and more. Featuring solid transaction support, relations, eager and lazy loading, read replication and more. - Sequelize -
์๋์ ๊ฐ์ด ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง, ๋ชจ๋ธ์ ์ฐ๊ด์ฑ, ์ฌ์ด ์ญ์ ๋ฑ์ ์ฅ์ ์ด ์์ต๋๋ค.
๋ ์์ธํ ์๊ณ ์ถ์ ๋ถ๋ค์ ์๋ ๊ณต์ ํํ์ด์ง์์ ํ์ธํด ์ฃผ์ธ์!
Example
Sequelize๋ฅผ ์ฌ์ฉํ์ ๋์ ์ฌ์ฉํ์ง ์์์ ๋์ ์์๋ฅผ ๊ฐ๋จํ๊ฒ ๋ณด์ฌ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
ํ ์ด๋ธ ์์ฑ ์
SQL
db.connect(function (err) {
if (err) throw err;
const sql = "CREATE TABLE Users (namename VARCHAR(255), birthday VARCHAR(255))";
con.query(sql, function (err, result) {
if (err) throw err;
});
});
Sequelize
const User = sequelize.define("User", {
username: DataTypes.STRING(35),
password: {
type: DataTypes.STRING(20),
allowNull: false,
},
});
๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์
SQL
const userid = req.body.userid;
const content = req.body.content;
db.query(
"INSERT INTO Chats (USERID,CONTENT) VALUES (?,?)",
[userid, content],
(err, result) => {
if (err) {
console.log(err);
} else {
res.send("Inserted values successfully!");
}
}
);
Sequelize
const addChat = async (req, res) => {
let info = {
userId: req.body.userId,
content: req.body.content,
};
const chat = await Chat.create(info).catch((err) => console.log(err));
res.status(200).send(chat);
};
์ ๋ ์์ ๋ง ๋ด๋ Query๋ฌธ์ ์ง์ ์์ฑํ์ง ์๊ณ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ๋ ์ง๊ด์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.