๐ŸŽ‰ํ•™๊ต ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๋ฌผ๋กœ ์‚ฌ์ดํŠธ ๋งŒ๋“ค๊ธฐ(1) - ์Šคํ† ๋ฆฌ๋ณด๋“œ ์ œ์ž‘ ๋ฐ DB์„ค๊ณ„๋„ ๋งŒ๋“ค๊ธฐ

์ค€์„(์ค€์„์•„)ยท2021๋…„ 11์›” 2์ผ
0

ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๋ฌผ

๋ชฉ๋ก ๋ณด๊ธฐ
1/2
  • ๐Ÿ“์Šคํ† ๋ฆฌ๋ณด๋“œ ์ž‘์„ฑ , ์Šคํ† ๋ฆฌ๋ณด๋“œ ๊ธฐ๋ฐ˜ ๋””์ž์ธ, ERD ์ž‘์„ฑ
  • DB ์„œ๋ฒ„์—ด๊ธฐ์™€ DB์— ๋”๋ฏธ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ
  • ๋ฉ”์ธ ํŽ˜์ด์ง€ ์ œ์ž‘
  • ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ์ œ์ž‘
  • ํ”„๋กœ์ ํŠธ๋“ฑ๋ก ํŽ˜์ด์ง€ ์ œ์ž‘
  • ๊ฒฐ์ œ ํŽ˜์ด์ง€ ์ œ์ž‘

์ด ํฌ์Šคํ„ฐ๋Š” ํ•™๊ต ํ”„๋กœ์ ํŠธ์˜ ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ์ž‘์„ฑํ•œ ๊ฒƒ์ด๋‹ค.
ํ”„๋กœ์ ํŠธ์˜ ๋‚ด์šฉ์€ ํฌ๋ผ์šฐ๋“œ ํŽ€๋”ฉ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒŒ์ž„๊ฐœ๋ฐœ์‚ฌ์ดํŠธ ๋งŒ๋“ค๊ธฐ์ด๋‹ค.

์‚ฌ์ดํŠธ ๊ตฌ์กฐ

factorio thumbnail

ํ•™๊ต์—์„œ ํŒ€ ํ”„๋กœ์ ํŠธ๋กœ ์‚ฌ์ดํŠธ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด์˜ค๋ผ๋Š” ๊ณผ์ œ๋ฅผ ๋ฐ›์•˜๋‹ค.
์ด 4๋ช…์ด์„œ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰์‹œ์ผฐ๊ณ  ๊ฐ๊ฐ ์—ญํ• ์„ ์ •ํ–ˆ๋Š”๋ฐ

  1. PM
  2. ๋””์ž์ธ
  3. Front_End
  4. Back_End

์ค‘์—์„œ ๋‚˜๋Š” Back_End์—ญํ• ์„ ๋งก์•˜๋‹ค.

DB์„ค๊ณ„๋„ ๋งŒ๋“ค๊ธฐ

๊ฐ€์žฅ ์ฒ˜์Œ์— ์ง„ํ–‰ํ•œ ์ž‘์—…์€ PM ์˜ ์Šคํ† ๋ฆฌ๋ณด๋“œ ์ž‘์„ฑ์ด์—ˆ๋‹ค.
์ด ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋””์ž์ธ๊ณผ Back_End๋Š” ์ž‘์—…์„ ํ•˜์˜€๋Š”๋ฐ
๋””์ž์ธ์€ zeplin์— ์ž‘์—…๋ฌผ์„ ์˜ฌ๋ฆฌ๊ณ 
Back_End๋Š” ERD๋กœ ์ž‘์—…์„ํ•ด์„œ ๊ณต์œ ํ•˜์˜€๋‹ค.


(ERD ์‚ฌ์ดํŠธ์—์„œ ์ž‘์—…์„ ํ•˜์˜€๋Š”๋ฐ ์œ ๋ฃŒํ™”๊ฐ€ ๋˜์–ด์„œ ์บก์ฒ˜๋ณธ์œผ๋กœ ๋ฐ–์— ์˜ฌ๋ฆด ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค..)
ERD๋ฅผ ์งœ๋Š” ๋„์ค‘์— ํ•œ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ๋‚˜์™€์„œ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์ฉ์˜€๋Š”๋ฐ.

์‚ฌ์ง„๊ณผ๊ฐ™์ด 2๊ฐœ์˜ ํ•„๋“œ์— PK๋ฅผ ๊ฑธ์–ด๋†“๊ณ  ๊ฐํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š”๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.
PK๋ฅผ ๊ฑธ์–ด๋†“์€ ํ•„๋“œ๊ฐ€ sys_user_id , sys_project_id 2๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— 2๊ฐœ ํ•„๋“œ์˜ ๊ฐ’์„ ๊ณ ์œ ๊ฐ’์œผ๋กœ ์ธ์‹ํ•˜๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ERD๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ DB๋ฅผ ๋‹ค ๋งŒ๋“ ๋‹ค์Œ์— ์นดํŽ˜24์—์„œ ๋„๋ฉ”์ธ์„ ์‚ฌ์„œ DB์„œ๋ฒ„๋ฅผ ์—ด์—ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์‚ญ์ œ ์ฒ˜๋ฆฌ

๋งŒ์•ฝ์— ์‚ฌ์ดํŠธ์—์„œ ์‚ญ์ œํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ๊ฒผ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.
๊ทธ๋Ÿด๋•Œ DELETE ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ฉด๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์˜€์—ˆ์ง€๋งŒ ๊ฑฐ์˜ ๋ชจ๋“  table์ด Forien Key๋กœ ๋‹ค๋ฅธ table์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— DELETE์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์€ ๋ณ„๋กœ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐ๋˜์–ด

๊ทธ๋ฆผ์— ๋‚˜์˜ค๋Š” f_div ํ•„๋“œ๋ฅผ ๋งŒ๋“ค์–ด ํ™œ์„ฑํ™” ๋ฐ์ดํ„ฐ์™€ ๋น„ํ™œ์„ฑํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„์ง“๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

๋”๋ฏธ๋ฐ์ดํ„ฐ INSERT

๋งŒ๋“ค์–ด์ง„ DB์— ๋ฐ์ดํ„ฐ๋ฅผ INSERTํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค.
open api๋ฅผ ํ•˜๋‚˜ ๊ตฌํ•ด์„œ api๋กœ ํ˜ธ์ถœํ•œ JSON๊ฐ’์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์ถ”๋ ค๋„ค ๋ฐฐ์—ด์— ๋‹ด์•„์„œ Table์— INSERT ํ•˜์˜€๋‹ค.

DB connection

const mariadb = require("mariadb");

const pool = mariadb.createPool(
  {
    host: "funware.shop",
    user: "junseok816",
    connectionLimit: 5,
    password: "์•”ํ˜ธ",
    port: ????,
    database: "junseok816",
    multipleStatements: true,
  }
);

pool.getConnection()
      .then((conn) => {
        conn.beginTransaction();
        conn.query("SELECT 1 as val").then((rows) => {
          // rows: [ {val: 1}, meta: ... ]
          console.log("connect");
          conn.batch(
            "INSERT INTO tbl_project (f_project_name , f_storyline, f_summary, f_register_account , f_donate_limit , f_par_value ,f_date_limit,  sys_register_id , f_div) VALUES (?,?,?,?,?,?,20210523,1,'Y');",
            arr
          );
          conn.commit();
        });
      })
      .catch((err) => {
        console.log(err);
      });

getConnection() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ์‹œํ‚จ๋‹ค์Œ์— "SELECT 1 as val" ๊ฐ™์€ ๋ฌด์กฐ๊ฑด ์‹คํ–‰์ด๋˜๋Š” Query๋ฌธ์„ ๋‚ ๋ ค ์—ฐ๊ฒฐ์ด ์ž˜ ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„
batch() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์›ํ•˜๋Š” SQL ๋ฌธ์˜ ์ผ๊ด„ ์ฒ˜๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ด๋•Œ VALUES ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ?์˜ ์œ„์ฐจ๋ž‘ ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์˜ ์œ„์น˜๋ฅผ ๋งž์ถ”๋ฉด ?์— ์›ํ•˜๋Š” ๊ฐ’์„ INSERTํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

api ํ˜ธ์ถœ ๋ฐ ๋ฐฐ์—ด์— ๊ฐ’ ๋„ฃ๊ธฐ


axios({
  url: "https://api.igdb.com/v4/games",
  method: "POST",
  headers: {
    Accept: "application/json",
    "Client-ID": "???",
    Authorization: "Bearer ???",
  },

  data:
    "fields name,storyline,summary, screenshots.url, cover.url ,videos.video_id; where genres != (2, 8, 9, 11, 13, 15, 16, 24, 25, 26, 30, 31, 32, 34, 35, 36) & storyline != null & summary != null & screenshots.url != null & cover.url != null & videos.video_id != null   & involved_companies.company.name != null & involved_companies.company.description != null & involved_companies.company.logo != null &involved_companies.company.websites != null; limit 100; offset 400;",
})
  .then((response) => {
    var arr = new Array(0);
    response.data.forEach((v_game) => {
      v_dona_limit = Math.floor(1000000 + Math.random() * 9000000);
      v_accout =
        "์€ํ–‰" + String(Math.floor(4190000000 + Math.random() * 900000000));
      v_par_value = Math.floor(Math.random() * 10000)+1000;
      var srr = new Array(
        v_game.name,
        v_game.storyline,
        v_game.summary,
        v_accout,
        v_dona_limit,
        v_par_value
      );
      arr.push(srr);
    });

์ „์ฒด ์ฝ”๋“œ

const axios = require("axios");
const mv_Express = require("express");
const app = mv_Express();
const port = 3000;
const mariadb = require("mariadb");


const pool = mariadb.createPool(
  {
    host: "funware.shop",
    user: "junseok816",
    connectionLimit: 5,
    password: "",
    port: ????,
    database: "junseok816",
    multipleStatements: true,
  }
);

app.use(mv_Express.static("public"));

axios({
  url: "https://api.igdb.com/v4/games",
  method: "POST",
  headers: {
    Accept: "application/json",
    "Client-ID": "???",
    Authorization: "Bearer ???",
  },

  data:
    "fields name,storyline,summary, screenshots.url, cover.url ,videos.video_id; where genres != (2, 8, 9, 11, 13, 15, 16, 24, 25, 26, 30, 31, 32, 34, 35, 36) & storyline != null & summary != null & screenshots.url != null & cover.url != null & videos.video_id != null   & involved_companies.company.name != null & involved_companies.company.description != null & involved_companies.company.logo != null &involved_companies.company.websites != null; limit 100; offset 400;",
})
  .then((response) => {
    var arr = new Array(0);
    response.data.forEach((v_game) => {
      v_dona_limit = Math.floor(1000000 + Math.random() * 9000000);
      v_accout =
        "์€ํ–‰" + String(Math.floor(4190000000 + Math.random() * 900000000));
      v_par_value = Math.floor(Math.random() * 10000)+1000;
      var srr = new Array(
        v_game.name,
        v_game.storyline,
        v_game.summary,
        v_accout,
        v_dona_limit,
        v_par_value
      );
      arr.push(srr);
    });

    console.log(arr);

    pool
      .getConnection()
      .then((conn) => {
        conn.beginTransaction();
        conn.query("SELECT 1 as val").then((rows) => {
          // rows: [ {val: 1}, meta: ... ]
          console.log("connect");
          conn.batch(
            "INSERT INTO tbl_project (f_project_name , f_storyline, f_summary, f_register_account , f_donate_limit , f_par_value ,f_date_limit,  sys_register_id , f_div) VALUES (?,?,?,?,?,?,20210523,1,'Y');",
            arr
          );
          conn.commit();
        });
      })
      .catch((err) => {
        console.log(err);
      });
    console.log("INSERT tbl_project completed...");
  })
  .catch((err) => {
    console.error(err);
  });

app.listen(port, () => {
  console.log("starup");
});
profile
๋‰ด๋น„๊ฐœ๋ฐœ์ž

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