๋ฐ˜์‘ํ˜•

๊ทธ๋™์•ˆ MySQL์„ ์ด์šฉํ•ด ๊ฐœ๋ฐœํ•  ๋•Œ Sequelize๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ

์ด๋ฒˆ์— ์ง„ํ–‰์ค‘์ธ Node.js ํ”„๋กœ์ ํŠธ์—์„œ TypeORM์„ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ด์„œ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค..

 


 

์šฐ์„  ORM์ด ๋ญ”์ง€๋ถ€ํ„ฐ ์•Œ์•„๋ด์•ผํ•˜๋Š”๋ฐ

 

ORM์ด๋ž€ Object-Relational Mapping์˜ ์•ฝ์ž๋กœ, ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค

 (๊ฐœ๋ฐœ์ž๊ฐ€ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์คŒ) 

 

๊ทธ๋Ÿผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋˜ ๋ญ๋ƒ,,,?

 

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ” ํ˜•์‹์œผ๋กœ ์ €์žฅํ•˜๊ณ , ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์งํ™”ํ•˜๋Š”
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์ด๋‹ค.

=> ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์— ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰๊ณผ ์—ด์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•จ!

 

์ด๋Ÿฐ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ RDBMS์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๊ฐ€ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” MySQL!

 

๊ทธ๋ž˜์„œ TypeORM์ด ๋ญ๋А๋ƒํ•˜๋ฉด..

 

TypeScript์™€ JavaScript๋ฅผ ์œ„ํ•œ ๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘(ORM) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ,

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ๋•Œ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค

 

 

TypeORM์€ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด๋Š” ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค

(๊ฐ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—ด(Column)์— ๋งคํ•‘)

 

๊ทธ๋Ÿผ ๋ฐ”๋กœ TypeORM์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์„ ์•Œ์•„๋ณด์ž~~

 

module.exports = {
  host: "141.164.37.26",
  port: 3306,
  username: "test",
  password: "๋น„๋ฐ€~",
  database: "test",
};

configs/db.config.js

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค

 

=> ์ด ์ •๋ณด๋“ค์€ TypeORM๊ณผ ๊ฐ™์€ ORM(Object-Relational Mapping) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Node.js์—์„œ
MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ๋•Œ ํ•„์š”ํ•จ!

 

module.exports = class User {
  constructor(id, username, password, name, studentId) {
    this.id = id;
    this.username = username;
    this.password = password;
    this.name = name;
    this.studentId = studentId;
  }
};

models/user.model.js

 

์ด๋ ‡๊ฒŒ User ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ฃผ๊ณ 

 

const EntitySchema = require("typeorm").EntitySchema;
const User = require("../models/user.model");

module.exports = new EntitySchema({
  name: "User",
  target: User,
  columns: {
    id: {
      primary: true,
      type: "bigint",
      generated: true,
    },
    username: {
      unique: true,
      type: "varchar",
      nullable: false,
    },
    password: {
      type: "varchar",
      nullable: false,
    },
    name: {
      type: "varchar",
      nullable: false,
    },
    studentId: {
      name: "student_id",
      type: "varchar",
      nullable: false,
    },
  },
});

entities/user.entity.js

 

 

(์šฐ์„  entitiy๊ฐ€ ๋ญ”์ง€ ์•Œ์•„์•ผํ•˜๋Š”๋ฐ ์—”ํ„ฐํ‹ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค!)

 

EntitySchema๋Š” TypeORM์—์„œ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค

 

์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ EntitySchema๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ User ํด๋ž˜์Šค๋ฅผ ์—”ํ„ฐํ‹ฐ๋กœ ์ •์˜ํ•œ๋‹ค.

(target ์†์„ฑ์—๋Š” ๋งคํ•‘ํ•  ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜๊ณ , columns ์†์„ฑ์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ์—ด์„ ์ •์˜)

=> target ์†์„ฑ์— User ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•จ์œผ๋กœ์จ, ์ด ์—”ํ„ฐํ‹ฐ๋Š” User ํด๋ž˜์Šค์™€ ๋งคํ•‘๋จ

 

์ด๋ฅผ ํ†ตํ•ด TypeORM์€ ์—”ํ„ฐํ‹ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ , ์ด ์Šคํ‚ค๋งˆ๋ฅผ ํ†ตํ•ด ์ปฌ๋Ÿผ์˜ ํƒ€์ž… ๋ฐ ๋‹ค์–‘ํ•œ ์„ค์ •์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค!

 

 

const { DataSource } = require("typeorm");
const config = require("./configs");

module.exports = new DataSource({
  type: "mysql",
  synchronize: true,
  logging: true,
  entities: ["./entities/*.js"],
  migrations: [],
  subscribers: [],
  ...config.db,
});

data-source.js

 

์œ„์˜ ์ฝ”๋“œ๋Š” TypeORM์—์„œ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ์ด๋‹ค

 

DataSource๋Š” TypeORM์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค์ด๋ฉฐ

 (์—ฐ๊ฒฐ ์„ค์ •์„ ๋‹ด๋‹น) 

์ค‘์š” ๋ถ€๋ถ„์„ ์‚ดํŽด๋ณด๋ฉด

 

1. entities ์†์„ฑ์€ TypeORM์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋งคํ•‘ํ•  ์—”ํ„ฐํ‹ฐ(๋ชจ๋ธ)๋“ค์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ 

 

2. ... ์—ฐ์‚ฐ์ž (JavaScript์—์„œ ์ „๊ฐœ ์—ฐ์‚ฐ์ž)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ configs/db.config.js ํŒŒ์ผ์„ ํŽผ์ณ์„œ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๋‹ค

 

const AppDataSource = require("../data-source");

module.exports = AppDataSource.getRepository(require("../models/user.model"));

repositories/user.repository.js

 

์ด ์ฝ”๋“œ๋Š” TypeORM์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” Repository๋ฅผ ์–ป์–ด์˜ค๋Š” ๋ถ€๋ถ„์ด๋‹ค

 

TypeORM์—์„œ Repository๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋กœ, ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์กฐํšŒ, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค!

 

 

data-source.js ํŒŒ์ผ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” DataSource ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ 

getRepository๋ฅผ ํ†ตํ•ด ํŠน์ • ์—”ํ„ฐํ‹ฐ์— ๋Œ€ํ•œ Repository๋ฅผ ์–ป์–ด์˜จ๋‹ค

 

 

module.exports๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์ด Repository๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ด๋ณด๋ƒ„

=> ์ด์ œ User ๋ชจ๋ธ์— ๋Œ€ํ•œ Repository๋ฅผ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ!

 

CREATE USER 'test'@'localhost' IDENTIFIED WITH mysql_native_password BY '๋น„๋ฐ€~';
CREATE USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY '๋น„๋ฐ€~';
CREATE DATABASE `test`;
GRANT ALL PRIVILEGES ON `test`.* TO 'test'@'localhost';
GRANT ALL PRIVILEGES ON `test`.* TO 'test'@'%';
FLUSH PRIVILEGES;

db.sql

 

MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” SQL ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค

 

=> ์ด๋Ÿฌํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด 'test' ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , 'test' ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋œ๋‹ค!

(์ดํ›„์—๋Š” 'test' ์‚ฌ์šฉ์ž๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ)

๋ฐ˜์‘ํ˜•