๐Ÿ‘€ORM ?

๋ธ”๋ ˆ์–ด(blair)ยท2020๋…„ 8์›” 10์ผ
1

Database

๋ชฉ๋ก ๋ณด๊ธฐ
1/1
post-thumbnail

๐Ÿฃ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๊ณผ ์กฐํ•ฉ์ด ์ข‹์€ ๊ฒƒ ๊ฐ™์•„์„œ ๋” ๊ณต๋ถ€ํ•ด๋ด์•ผํ•  ํ•„์š”์„ฑ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.!

์ฐธ๊ณ 

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ๋ธ”๋ ˆ์–ด์˜ ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉฐ ๋‚˜๋ˆ„๊ณ  ์„ฑ์žฅํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค :)

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2020๋…„ 8์›” 11์ผ

ORM์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์žฅ์ ์€, ๊ฐ์ฒด์ง€ํ–ฅ์„ Domain Layer๊นŒ์ง€ ๋…น์—ฌ๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์•„๋‹๊นŒ ์‹ถ์–ด์š”!
๋‹ค๋งŒ ๋‹จ์ ์œผ๋กœ๋Š”, RDBMS์™€ OOP๊ฐ€ ์™„์ „ ๋งค์นญ์ด ๋˜์ง€ ์•Š๋‹ค๋ณด๋‹ˆ ์—ฌ๋Ÿฌ ํ•œ๊ณ„์ ์ด ์กด์žฌํ•˜์ฃ  ใ… ใ… .
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ฟผ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‚ ์•„๊ฐ€๋Š”์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์•Œ๊ธฐ์œ„ํ•ด ๊ณต๋ถ€๋ฅผ ํ•ด์•ผํ•˜๋Š” ์ง„์ž…์žฅ๋ฒฝ๋˜ํ•œ ๋ฌธ์ œ๊ตฌ์š”.
๋˜, ์š”์ฆ˜์— ๋‚˜์˜ค๋Š” ์–˜๊ธด๋ฐ ORM์„ ๊ณต๋ถ€ํ•˜๋‹ˆ SQL์— ์†Œํ™€ํ•œ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ๋”๋ผ... ๋ผ๋Š” ์•ˆ์ข‹์€ ์‹œ์„  ๋˜ํ•œ ์กด์žฌํ•ด์š”!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ