Unity/서버

0616 _ 서버 (DB_3)

minquu 2021. 6. 16. 14:12
반응형

오늘은 시퀄라이즈를 사용할 것이다.

 

MySQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리다

 

시퀄라이즈는 ORM으로 분류됩니다.

 

ORM은 자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구이다.

 

시퀄라이즈 사용법을 배워야한다.

 

이건 쿼리를 직접만들지 않아도, 자바스크립터에서 모듈을 깔아서 API를 써서 바로 접근할 수 있게 해준다.

 

---

 

먼저 비주얼 코드에서 폴더하나를 만들어준다..

 

 

 

폴더 들어와서 초기화 해주기

 

 

app.js 만들어주기 

 

시퀄라이즈드에 필요한 두 가지 설치해주기

 

npm init -y

 

npm i express

 

npm i mysql2

 

npm i sequelize

 

npm i nodemon 

 

npm i sequelize-cli -g

 

깔아주기 

 

 

 

기본적 서버 설정

 

 

 

 

----

 

 

시퀄라이즈드 하기

 

app 에서 시퀄라이즈 적용 시키고  mtsql과 연결하기

 

 

 

const express = require('express');
const app = express();
const { Sequelize } = require('sequelize');

const sequelize = new Sequelize('mysql', 'root', 'qwer1234', {
    host: 'localhost',
    dialect: 'mysql',
});


app.get('/', (req, res) => {
    res.end('hello wolrd');

})

app.get('/connectdb', (req, res) => {
    connect();
    res.end('db connection test....');
})

async function connect() {
    try {
        await sequelize.authenticate(); // 접속대기
        console.log('connected');

    } catch (err) {
        console.log('err')
    }
}


app.listen(3000, () => {
    console.log('sever 3000 starting')
})

 

 

 

 

 

const { Sequelize } = require('sequelize');

시퀄라이즈를 가져운다.

 

const sequelize = new Sequelize('mysql', 'root', 'qwer1234', {
    host: 'localhost',
    dialect: 'mysql',
});

 

시퀄라이즈를 만들어줘서 내 sql과 연결 시켜준다.

 

 

 

async function connect() {
    try {
        await sequelize.authenticate(); // 접속대기
        console.log('connected');

    } catch (err) {
        console.log('err')
    }
}

 

connect 펑션을 만들어준다.

try  = 정상 접속시 

catch  = 오류시

 

app.get('/connectdb', (req, res) => {
    connect();
    res.end('db connection test....');
})

/connectdb 들어오면 

connect 매서드 소환해주고,

res.end를 해준다.

 

 

기본적인 접속 테스트 완료

 

-----

 

sequelize -cli 초기화 해주기

 

sequelize init 입력해주면 

 

초기화해주면 config 파일이 생긴다.

 

 

비밀번호 내껄로 바꾸고

 

타임존

디벨롭먼트에 "timezone" :  "+09:00" 에 추가해준다.

 

{
  "development": {
    "username": "root",
    "password": "123456",
    "database": "sequelize_db",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "timezone": "+09:00"
  },
  "test": {
    "username": "root",
    "password": "123456",
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": "123456",
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "define": {
    "charset" :"utf8",
    "collate" :"utf8_bin",
    "timestamps": true
  }
}

 

초기화

 

 

-----

 

npm i sequelize-auto 설치 (도와주는 툴)

 

시퀄라이즈를 오토에 맞춰 줄 것이다 .

 

자바스크립터를 만들면 자바스크립터에서 테이블이 만들기 위해서 auto가 필요하다

 

models에 

 

 

auto.js 를 하나 만들어줘서 코드를 넣어준다.

 

const SequelizeAuto = require('sequelize-auto');
const auto = new SequelizeAuto('nodejs', 'root', 'qwer1234', {
    host: 'localhost',
    port: '3306',
    dialect: 'mysql',

})

auto.run(err => {
    if (err) throw err;
    console.log('comple');

})

 

 

 

 

 

 

시퀄라이즈 오토를 써서 

 

 

즉 내 DB에 있는 테이블이 자바스크립터에서 생성 되서 맵핑을 해주는 것임

 

모델은 틀 같은 개념임 

 

찾는걸 해보자

 

finall.js 파일 만들기

 

 

const initMoels = require('./models/init-models');
const Sequelize = require('sequelize');

const sequelize = new Sequelize('nodejs', 'root', 'qwer1234', {
    host: 'localhost',
    dialect: 'mysql'

})

const models = initMoels(sequelize);

models.users.findAll().then(results => {
    console.log(results);
})

 

 

콜백으로  찾기

nodejs 에 있는 정보들아 전부나온다.

 

비슷하게 어싱크로 찾기

 

 

 

const initMoels = require('./models/init-models');
const Sequelize = require('sequelize');

const sequelize = new Sequelize('nodejs', 'root', 'qwer1234', {
    host: 'localhost',
    dialect: 'mysql'

})

const models = initMoels(sequelize);

// models.users.findAll().then(results => {
//     console.log(results);
// })

async function findAllFromUsers() {
    const results = await models.users.findAll();
    console.log(results);


}

findAllFromUsers();

 

 

 

------

const initMoels = require('./models/init-models');
const Sequelize = require('sequelize');

const sequelize = new Sequelize('nodejs', 'root', 'qwer1234', {
    host: 'localhost',
    dialect: 'mysql'

})

const models = initMoels(sequelize);

이 부분 계속 스니깐 모듈로 만듦어줄것이다.

 

 

 

 

 

 

 

마이시퀄라이즈

const initMoels = require('./models/init-models');
const Sequelize = require('sequelize');

const sequelize = new Sequelize('nodejs', 'root', 'qwer1234', {
    host: 'localhost',
    dialect: 'mysql'

})

const models = initMoels(sequelize);

module.exports = {
    models,

}

 

findall

const {models} = require('./mysequelize');


async function findAllFromUsers() {
    const results = await models.users.findAll();
    console.log(results);
}

findAllFromUsers();

 

 

 

 

그러면 findall 에서 models 를 계쏙 쓸 수있다 .

 

우리는 모델을 가져와야하는데 모듈로 만들엇따 .

 

 

----

 

 

Op 객체 안에는 

ne    ->   != // 같지 않다면

같은 명령어가 들어 가 있다.

 

 

우리가 만든 시퀄라이즈에서 Op 를 넣어줘야한다

 

 

const initMoels = require('./models/init-models');
const { Op, Sequelize } = require('sequelize');

const sequelize = new Sequelize('nodejs', 'root', 'qwer1234', {
    host: 'localhost',
    dialect: 'mysql'

})

const models = initMoels(sequelize);

module.exports = {
    models,
    Op,
}

 

그럼 이제 마이시퀄라이즈 모듈에서 Op를 사용할 수 잇게된다.,

 

 

만약 프로덕트 테이블  이제 20000원 이상 애들을 찾기 위한 코드를 만들것이다.

 

 

 

 

const { Op, models } = require("./mysequelize");

// async function findAllFromUsers() {
//     const users = await models.users.findAll({
//         where: {
//             maried: {
//                 [Op.gt]: 20000,
//             },
//         },
//     });
//     const json = JSON.stringify(users);
//     console.log(json);
// }


//select * from products where price > 20000;
//https://velog.io/@cadenzah/sequelize-document-2
async function findAllFromProducts() {
    const product = await models.products.findAll({
        where: {
            price: {
                [Op.gt]: 20000,
            },
        },
    });
    const json = JSON.stringify(product);
    console.log(json);
}

findAllFromProducts();

 

price가 20000이상인 애들을 찾는 것이다 .

 

 

Op 연산자 

https://velog.io/@cadenzah/sequelize-document-2

 

Sequelize 공식 Document - (2) Querying

해석과 설명을 곁들인 Sequelize 도큐먼트 정복, 그 2편

velog.io

사이트 참고하기 

 

 

연습 

 

나이가 30 이상이고, 결혼을 한 사람 찾기

 

 

const { Op, models } = require("./mysequelize");

async function findAllFromUsers() {
    const users = await models.users.findAll({
        where: {
            maried: {
                [Op.gt]: 0,
            },
            age: {
                [Op.gte]: 30,
            },
        },
    });
    const json = JSON.stringify(users);
    console.log(json);
}


//select * from products where price > 20000;
//https://velog.io/@cadenzah/sequelize-document-2
// async function findAllFromProducts() {
//     const product = await models.products.findAll({
//         where: {
//             price: {
//                 [Op.gt]: 20000,
//             },
//         },
//     });
//     const json = JSON.stringify(product);
//     console.log(json);
// }

findAllFromUsers();

 

 

 

결혼을 하고 나이가 30 이상인 사람들의 이름만 출력해보기

 

 

 

 

attributes: ["name"] 은 name만 가져오는 것

 

 

 

-----

 

 

app 에서 시퀄라이즈 (모듈로 만들어서)로 DB 데이터 가져와서 띄우기 

 

 

 

const express = require('express');
const app = express();
const { Op, models } = require("./mysemodule");

async function findAllFromUsers() {
    const results = await models.users.findAll();
    const json = JSON.stringify(results);
    return json;
}


app.get("/users/all", async (req, res) => {
    const text = await findAllFromUsers();
    res.send(text);
})

app.listen(3000, () => {
    console.log("sever 3000 start");
})

 

async function findAllFromUsers() {
    const results = await models.users.findAll();
    const json = JSON.stringify(results);
    return json;
}

 

return json 를 해준다.

 

 

app.get("/users/all", async (req, res) => {
    const text = await findAllFromUsers();
    res.send(text);
})

 

findAllFromUsers(); 가 async 이기 때문에 

 

(req, res) 앞에 async 를 붙여주고. 

findAllFromUsers() 앞에 await를 붙여줘야한다.

 

 

 

반응형

'Unity > 서버' 카테고리의 다른 글

0618_서버 (GPGS 앱 올리기 2)  (0) 2021.06.18
0617_ 서버 (GPGS 구글플레이에 앱 올리기 )  (0) 2021.06.17
0615_서버 (DB_2)  (0) 2021.06.15
0611 _ 서버 (DB_1)  (0) 2021.06.11
0610 _ 서버  (0) 2021.06.10