ORM์ Object Relational Mapping ์ฆ, ๊ฐ์ฒด-๊ด๊ณ ๋งคํ์ ์ค์๋ง์ด๋ค. ๊ฐ์ฒด-๊ด๊ณ ๋งคํ์ ํ์ด์ ์ค๋ช ํ์๋ฉด ์ฐ๋ฆฌ๊ฐ OOP(Object Oriented Programming)์์ ์ฐ์ด๋ ๊ฐ์ฒด๋ผ๋ ๊ฐ๋ ์ ๊ตฌํํ ํด๋์ค์ RDB(Relational DataBase)์์ ์ฐ์ด๋ ๋ฐ์ดํฐ์ธ ํ ์ด๋ธ ์๋์ผ๋ก ๋งคํ(์ฐ๊ฒฐ)ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ทธ๋ฌ๋ ํด๋์ค์ ํ ์ด๋ธ์ ์๋ก๊ฐ ๊ธฐ์กด๋ถํฐ ํธํ๊ฐ๋ฅ์ฑ์ ๋๊ณ ๋ง๋ค์ด์ง ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ฅผ ORM์ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก SQL๋ฌธ์ ์๋์ผ๋ก ์์ฑํ์ฌ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐํ๋ค. ๋ฐ๋ผ์ ORM์ ์ด์ฉํ๋ฉด ๋ฐ๋ก SQL๋ฌธ์ ์งค ํ์์์ด ๊ฐ์ฒด๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ์ํ ์ ์๊ฒ ๋๋ค.
Sequelize๋ TypeORM๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก CLI๋ฅผ ์ง์ํ๊ณ ์๋ค. ๊ทธ๋์ ํฐ๋ฏธ๋์์ ๋ช ๋ น์ด๋ฅผ ํตํด ํ ์ด๋ธ์ ํด๋นํ๋ ๋ชจ๋ธ์ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋๊ฒ ๊ฐ๋ฅํ๊ณ , ๊ตฌ์ฒด์ ์ธ ๋ชจ๋ธ์ ์ค์ ์ด ๋๋๋ฉด MySQL์ Migrationํ๋ ์์ ๋ ๋ช ๋ น์ด๋ก ๊ฐ๋ฅํ๋ค.
npm install --save sequelize
npm install --save-dev sequelize-cli
npx sequelize-cli init
=>> ์ฑ๊ณต์ ์ผ๋ก bootstraping์ด ๋๋๋ฉด ๋ค์ ํ์ผ๋ค์ด ์๋ ์์ฑ๋๋ค.
config/config.json
models/
migrations/
seeders/
npx sequelize-cli db:create
{
"development": {
"username": "root",
"password": null,
"database": "database_development",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
config/config.json ํ์ผ์๋ 3๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์กด์ฌํ๋ค.
const env = process.env.NODE_ENV || 'development';
๋ณ์ env๋ ๋ค๋ฅธ ๊ฐ์ด ์ฃผ์ด์ง์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก 'development'๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, development ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ฒ ๋๋ค.
(test ์คํ์์๋ test db์ ์ฐ๊ฒฐ)
< ์๊ตฌ์ฌํญ >
1. url ๋ชจ๋ธ์ url, title, visits ํ๋๋ฅผ ์๋ง์ ํ์ ์ ๋ง๊ฒ ์์ฑํด์ผ ํ๋ค.
2. visits์ ๊ธฐ๋ณธ๊ฐ์ 0 ์ด๋ค.
3. urls ํ ์ด๋ธ์ด ์กด์ฌํด์ผ ํ๋ค.
npx sequelize-cli model:generate --name url --attributes url:string,title:string,visits:integer
migrations, models ํด๋์ ๊ฐ๊ฐ XXXXXXX-create-url.js, url.js ํ์ผ์ด ์์ฑ๋๋ค.
์ด๋ url ๋ชจ๋ธ์ ์์ฑํ์ง๋ง, ์์ฑ๋๋ ํ
์ด๋ธ์ urls ์ด๋ฆ์ผ๋ก ์์ฑ๋๋ค.
์๊ตฌ์ฌํญ์์ visits์ ๊ธฐ๋ณธ๊ฐ ์ค์ ์ด ํ์ํ๋ค.
์ด ๊ฒฝ์ฐ migrations ํด๋๊ฐ ์๋, models ํด๋์ url.js ์์ ์ง์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
url.init(
{
url: DataTypes.STRING,
title: DataTypes.STRING,
visits: { type: DataTypes.INTEGER, defaultValue: 0 },
},
{
sequelize,
modelName: 'url',
}
);
์ฆ, ํ๋๊ฐ ๊ฐ์ง๋ ํน๋ณํ ์๊ตฌ์ฌํญ(๊ธฐ๋ณธ๊ฐ ๋ฑ)์ ๋ชจ๋ธ ํ์ผ์ ์ง์ ์์ ํด์ ์ ์ํด์ผ ํ๋ค.
๋ง์ด๊ทธ๋ ์ด์ ์ ์๋ ํฌ๋ ์ดํธ ํ ์ด๋ธ์ ์คํํ๋ค. ์ด๊ฑธ ํ๊ธฐ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์๋ฌด๊ฒ๋ ์๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์ ์คํ์์ผ์ผ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋ ๊ฒ์ด๋ค. ์ด๋ฏธ ๋ชจ๋ธ ํ์ผ์ด ๋ง๋ค์ด์ ธ์๋ค๋ฉด running migration์ ํด์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํด์ค๋ค
migrate ์คํ UpTable
npx sequelize-cli db:migrate
migrate ์ทจ์ DropTable
npx sequelize-cli db:migrate:undo
join ํด๋ณด๊ธฐ
ACID