220426 TIL

오늘 할 일(계획)

  • Diary 220426 작성
  • Github
    • TIL 220426 작성후 올리기
    • TIL 폴더 월별 README 추가
  • Blog
    • TIL 220426 작성 후 올리기
  • BaekJoon
    • 기초 문제 4개 풀고 올리기
  • Project
    • gonmogen api repository 에다가 orm sequelize 연동해서 git push 날리기
    • gonmogen 21시 회의
  • Individual study (개인 공부)
    • Typescript 기초 공부
    • React NodeJS CORS 해보기
    • React practice-todos-app 화면 구상

오늘 한 일(회고)

  • Github TIL 220425 올렸습니다.
  • Github TIL 폴더 구조 수정했습니다.

내일 할 일

  • 내일 할 일

장기 계획 (Long Term Todos)

  • Project 1 day 3 pill
    • 계획서 작성
    • 일정표 작성
    • 기획서 작성
    • 기능 정의서 작성
    • 화면 정의서
    • 화면 설계
    • ERD 설계
  • project Gonmogen
    • ERD 설계
    • API_메인_추천리스트
    • FRONT_메인_추천리스트
  • Individual study (개인 공부)
    • Node.js 크롤링 공부해보기

 

'TIL (Dev) > 2022년' 카테고리의 다른 글

[ 2022-04-28 ] TIL  (0) 2022.04.28
[ 2022-04-27 ] TIL  (0) 2022.04.27
[ 2022-04-25 ] TIL  (0) 2022.04.26
[ 2022-04-23 ] TIL  (0) 2022.04.23
[ 2022-04-22 ] TIL  (0) 2022.04.22

220425 TIL

오늘 할 일(계획)

  • Github
    • TIL 220425 작성후 올리기
    • TIL 폴더 구조 수정
  • Diary 220425 작성
  • Blog
    • TIL 220425 작성 후 올리기
    • NodeJS ORM Sequelize 정리해서 올리기
  • BaekJoon
    • 기초문제 4개 풀고 올리기
  • Project
    • gonmogen api repository 에다가 orm sequelize 연동해서 git push 날리기
    • gonmogen 21시 회의
  • Individual study (개인 공부)
    • React practice-todos-app 화면 구상
    • React NodeJS CORS 해보기
    • Typescript 기초 공부

오늘 한 일(회고)

  • Github TIL 220425 올렸습니다.
  • Github TIL 폴더 구조 수정했습니다.

내일 할 일

  • 내일 할 일

장기 계획 (Long Term Todos)

  • Project 1 day 3 pill

    • 계획서 작성
    • 일정표 작성
    • 기획서 작성
    • 기능 정의서 작성
    • 화면 정의서
    • 화면 설계
    • ERD 설계
  • project Gonmogen

    • ERD 설계
    • API_메인_추천리스트
    • FRONT_메인_추천리스트
  • Individual study (개인 공부)

    • Node.js 크롤링 공부해보기

'TIL (Dev) > 2022년' 카테고리의 다른 글

[ 2022-04-27 ] TIL  (0) 2022.04.27
[ 2022-04-26 ] TIL  (0) 2022.04.26
[ 2022-04-23 ] TIL  (0) 2022.04.23
[ 2022-04-22 ] TIL  (0) 2022.04.22
[ 2022-04-21 ] TIL  (0) 2022.04.21

전 포스팅에서는 app.js 와 /database/models 부분에서 간략하게 알아보았는데영

이번에는 localhost:3000/user 을 이용하여 RESTFul API 를 이용하여 POST GET 정도 해보겠습니다.

 

// /controllers/user.js

// db 가져오는 부분
const db = require("../database/models");
const User = db.User;

exports.create = (req, res) => {
  // 만약 id 값이 없다면
  if (!req.body.id) {
    res.status(404).send({
      messgae: "id can not be empty!",
    });

    return;
  }

  // user 객체를 간단하게 만들어 id, pw, email 정보를 넣어줍니다.
  const user = {
    id: req.body.id,
    password: req.body.password,
    email: req.body.email,
  };
  
  // sequelize 의 create 함수를 써서 데이터를 생성해줍니다.
  User.create(user)
    .then((data) => {
      res.send(data);
    })
    .catch((err) => {
      res.status(500).send({
        message: err.message,
      });
    });
};

exports.findAll = (req, res) => {
  User.findAll().then((data) => res.send(data));
}

위 코드는 controllers user 부분 입니당

create 부분과 findAll 을 구현했습니당

 

Sequelize 의 Model Querying 문법 문서들은 다음 링크를 통해 알아볼수있습니당.

 

Model Querying

 

Model Querying - Basics | Sequelize

Sequelize provides various methods to assist querying your database for data.

sequelize.org

 

나중에 기회가 된다면 CRUD 정도 Sequelize에 관하여 더 올려보겠습니당.

 

이제 Router 부분을 보겠습니다.

 

// /router/index.js

const express = require("express");
const router = express.Router();

const user = require("./user");

router.use("/user", user);

module.exports = router;
// /router/user.js

const express = require("express");
const router = express.Router();
const userController = require("../controllers/user");

/* Customer */

/* Create a new Customer */
router.post("/", userController.create);

// Retrieve all Customer 
router.get("/", userController.findAll);


module.exports = router;

사용자 또는 postman 으로 lcoalhost:3000/user 으로 매핑하게 되면 라우터를 거쳐서 get 또는 post를 통해 우리가 원하는 결과를 받아올수 있게 만듭니다.

 

postman을 이용하여 restful post를 이용하여 데이터를 넣어보겠습니다.

 

POST
결과
결과

다음과 같이 데이터가 잘 들어가는걸 볼수있습니당.

 

get을 이용하게 되면 우리가 원했던 findAll 즉 모든 데이터를 가져오게 됩니다.

 

전 포스팅에 이어 model, controller, router 등을 이용하여 Sequelize 사용법에 대해 간단하게 알아보았습니다.

고생하셧습니다

 

Github

 

GitHub - GangOn0215/node-orm-sequelize-example: 블로그에 강좌용 으로 포스팅 하기 위한 git repository

블로그에 강좌용 으로 포스팅 하기 위한 git repository. Contribute to GangOn0215/node-orm-sequelize-example development by creating an account on GitHub.

github.com

 

Reference

  https://victorydntmd.tistory.com/27

  https://sequelize.org/docs/v6/core-concepts/model-querying-basics/#simple-insert-queries

  https://kyounghwan01.github.io/etc/sequelize/sequlize-basic-example/

 

'BackEnd > Node.js' 카테고리의 다른 글

[GCP VM 인스턴스] Node.js 설치 및 실행  (0) 2022.07.24
[ GCP VM 인스턴스 ] 기본 셋팅  (0) 2022.07.23
[ ORM ] Sequelize - Migration  (0) 2022.04.29
[ ORM ] Sequelize - Seeders  (0) 2022.04.26
[ ORM ] Sequelize - 1  (0) 2022.04.25

ORM( Object-relational mapping ) 이란?

 

객체와 관계와의 설정하여 데이터를 자동으로 매핑 해주는 것을 의미

ORM에서 말하는 객체의 의미는 OOP의 객체가 아니라 관계형 데이터베이스를 의미합니다.

 

이제 express.js 로 서버를 돌리며 orm sequelize를 연동해 보겠습니다.

 

Install

폴더 하나를 만들고 npm init을 친다음 기본 셋팅을 해줍니다.

 

그리고 sequelize 를 사용하기 위해 관련 패키지들을 설치해줍니다.

npm install express sequelize sequelize-cli mysql2 body-parser cors --save
{
  "name": "a01-orm-sequelize",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "cors": "^2.8.5",
    "express": "^4.17.3",
    "mysql2": "^2.3.3",
    "sequelize": "^6.19.0",
    "sequelize-cli": "^6.4.1"
  }
}

설치가 제대로 된다면 다음과 같이 dependncies에 cors, express, mysql2, sequelize, sequelize-cli 가 존재합니다.

npm install -g nodemon

아 만약에 nodemon 이 없으시다면 다음과 같이 nodemon을 설치해줍니다.

 

{
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
    "start": "npx nodemon app.js"
  },
}

간단하게 scripts start 도 넣어줍시당 ( 구분이 되지 않을것 같아서 scripts 부분만 빼고 다 지워두었습니다. )

 

mkdir database;

root 폴더(/a01-orm-sequelize) 에서 database 폴더를 생성해줍니다.

cd database;

그리고 database 폴더로 이동해줍니다.

 

window 사용하시는 분은 그냥 폴더에서 작업하면 됩니다.

 

Init Sequelize

npx sequelize init

이제 sequelize 기본 설정을 해보겠습니다.

 

위 init 명령어를 치게 되면 다음과 같이 설정이 됩니다.

 

sequelize 을 이용하여 테이블을 모델링 하는 방법이 있고 이미 생성된 테이블을 불러와서 사용하는 방법이 있는데

이번 정리하는 글에서는 직접 모델링을 해보겠습니다.

 

// /database/config/config.json

{
  "development": {							// 개발 모드
    "username": "root",						// DB 사용자명
    "password": "1234",						// DB 암호
    "database": "sequelize_development",	// DB
    "host": "127.0.0.1",					// DB 주소
    "dialect": "mysql"						// DBMS
  },
  {
  "test": {									// 테스트 모드
    "username": "root",
    "password": "1234",
    "database": "sequelize_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  {
  "production": {							// 배포, 운용 모드
    "username": "root",
    "password": "1234",
    "database": "sequelize_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },

/database/config/config.json 에 가서 mysql 연결 셋팅을 해보겠습니다.

 

mysql id, pw, db, host 를 적어줍니다.

 

// app.js

const express = require("express");
const { sequelize } = require("./database/models/index");
const app = express();
const port = 3000;

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

const router = require("./router/index");

sequelize.sync().then(() => console.log("connected database"));

app.listen(port, () => {
  console.log(`server is on ${port}`);
});

app.get("/", (req, res) => {
  res.send("hi friend");
});

app.use(router);

이제 app.js를 건드려보겠습니다.

 

주의깊게 봐야할 코드가 몇가지가 있는데영

 

const { sequelize } = require("./database/models/index");

다음과 같이 sequelize를 require /database/models/index 하여 불러온뒤 

 

sequelize.sync().then(() => console.log("connected database"));

이렇게 Sequelize 를 초기화 하면서 DB에 필요한 테이블을 생성하는 함수 입니다.

 

CREATE TABLE IF NOT EXISTS `user` 이런 문구를 띄우며 만약 user이란 테이블이 없다면 테이블을 만들어 준다는 것입니다.

 

Create User Table

이제 간단하게 user 이라는 테이블을 만들어서 테스트를 해볼것인데요.

/database/models/user.js 라는 파일을 만들어 줍니다.

// /database/models/user.js 

module.exports = (sequelize, DataTypes) => {
  const user = sequelize.define(
    "User",
    {
      pk_id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        comment: "유저 고유 ID",
      },
      id: {
        type: DataTypes.STRING,
        allowNull: false,
        comment: "유저 ID",
      },
      password: {
        type: DataTypes.STRING,
        allowNull: false,
        comment: "유저 패스워드",
      },
      email: {
        type: DataTypes.STRING,
        allowNull: true,
        comment: "유저 이메일",
      },
      createdAt: {
        type: DataTypes.DATE,
        allowNull: false,
        defaultValue: DataTypes.fn("NOW"),
      },
      updatedAt: {
        type: DataTypes.DATE,
        allowNull: false,
        defaultValue: DataTypes.fn("NOW"),
      },
    },
    {
      tableName: "user",
      underscored: true,
      freezeTableName: true,
      timestamps: true,
    }
  );

  return user;
};

이렇게 저장하면 nodemon 이기때문에 자동으로 restart가 됩니다.

 

이런식으로 나올건데 제대로 나온것 맞습니당
CREATE TABLE IF NOT EXISTS 'user 이라는게 보이는데 이것은 만약 user 테이블이 없다면 새로 생성한다는 의미 입니다.

 

필드 옵션

필드 옵션 설명
type Data type을 의미
primary key 기본키 ( default : false )
autoIncrement SERIAL ( auto increment 여부 ) ( default : false )
allowNull NOT NULL 조건 ( default : true )
unique unique 조건 ( default : true )
comment Comment

데이터 타입

데이터 타입 설명
STRING A variable length string

변하는 길이의 문자열
CHAR A fixed length string

고정된 길이의 문자열
TEXT Unlimited length TEXT column

제한되지 않은 길이의 텍스트
INTEGER A 32 bit integer

32비트 정수
BIGINT A 64 bit integer

64비트 정수 
FLOAT, DOUBLE 실수형
BOOLEAN A boolean / tinyint column, depending on dialect
DATE Date column with timezone, default is UTC
ARRAY An array of type. Only available in Postgres.

유형의 배열입니다. Postgres에서만 사용할 수 있습니다.

Config

Config 설명
timestamps Sequlize는 테이블을 생성한 후 자동적으로 createAt,
updateAt 생성
paranoid paranoid 옵션이 true 이라면 deletedAt column이 테이블에 추가
해당 row를 삯제시 실제로 데이터가 삭제되지 않고 deletedAt에 삭제된 날짜가 추가되며, deletedAt에 날짜가 표기된 row는 find 작업시 제외됩니다.
underscored underscored 옵션이 true이면 column 이름을 camalCase가 아닌 underscore 방식으로 사용
freezeTableName Sequelize는 define method의 첫 번째 파라미터 값으로 tablename을 자동 변환하는데, 이 옵션의 값이 true 이라면 변환 작업을 하지 않도록 합니다.
tableName 실제 Table 이름 정의
comment 주석

 

여기까지 기본 셋팅에 대해서 알아보았구영 다음 포스팅에선 router, controllers을 통해 postman을 이용하여 테스트 해보겠습니다.

 

예시로 github repository에 올려두었습니다.

 

예제 링크

 

GitHub - GangOn0215/node-orm-sequelize-example: 블로그에 강좌용 으로 포스팅 하기 위한 git repository

블로그에 강좌용 으로 포스팅 하기 위한 git repository. Contribute to GangOn0215/node-orm-sequelize-example development by creating an account on GitHub.

github.com

 

'BackEnd > Node.js' 카테고리의 다른 글

[GCP VM 인스턴스] Node.js 설치 및 실행  (0) 2022.07.24
[ GCP VM 인스턴스 ] 기본 셋팅  (0) 2022.07.23
[ ORM ] Sequelize - Migration  (0) 2022.04.29
[ ORM ] Sequelize - Seeders  (0) 2022.04.26
[ ORM ] Sequelize - 2  (0) 2022.04.25

220423 TIL

오늘 할 일(계획)

  • Diary 220423 작성
  • Blog
    • TIL 220423 작성 후 올리기
    • NodeJS ORM Sequelize 정리해서 올리기
  • Github
    • TIL 220423 작성후 올리기
    • Baekjoon
  • BaekJoon
    • 기초문제 4개 풀어보기
    • 난이도 있는 문제 하나 풀어보기 (도움 없이)
  • Project
    • gonmogen
  • Individual study (개인 공부)
    • React practice-todos-app 화면 구상
    • React NodeJS CORS 해보기
    • Typescript 기초 공부
    • Node.js 크롤링 공부해보기
    • Baekjoon
      • 4개 풀어보기
  • 오늘 할 일 (계획) 우선순위 정하기

오늘 한 일(회고)

  • Github TIL 220423 올렸습니다.
  • BaekJoon
    • ID 2525, 2480, 2379, 10950 풀었습니다.

내일 할 일

  • 내일 할 일

장기 계획 (Long Term Todos)

  • Project 1 day 3 pill
    • 계획서 작성
    • 일정표 작성
    • 기획서 작성
    • 기능 정의서 작성
    • 화면 정의서
    • 화면 설계
    • ERD 설계

'TIL (Dev) > 2022년' 카테고리의 다른 글

[ 2022-04-26 ] TIL  (0) 2022.04.26
[ 2022-04-25 ] TIL  (0) 2022.04.26
[ 2022-04-22 ] TIL  (0) 2022.04.22
[ 2022-04-21 ] TIL  (0) 2022.04.21
[ 2022-04-20 ] TIL  (0) 2022.04.20

처음엔 POST로 데이터 날릴때 Params에다가 넣어 날릴려다가 계속 안받길래 구글링 해보니 Body에서 raw를 클릭후 JSON으로 바꿔서 날리면 된다고 했습니다

 

끝~

220422 TIL

오늘 할 일(계획)

  • Diary 220422 작성
  • Blog
    • TIL 220422 작성 후 올리기
    • nodejs ORM Sequelize 정리해서 올리기
  • Github
    • TIL 220422 작성 후 올리기
    • Baekjoon
  • BaekJoon
    • 기초문제 4개 풀어보기
    • 난이도 있는 문제 하나 풀어보기 (도움 없이)
  • Project
    • gonmogen
      • NodeJS express 환경 구축 ( orm 기반으로 db 접속, url 나눠지게 ) - 테스트 서버에서 돌렸습니다.
      • model, controller 나눠처리하게 했습니다.
      • /product
      • /customer
  • Individual study (개인 공부)
    • React practice-todos-app 화면 구상
    • Typescript 기초 공부
    • Node.js 크롤링 공부해보기
    • Baekjoon
      • 기초 공부하기
  • 오늘 할 일 (계획) 우선순위 정하기

오늘 한 일(회고)

  • Github TIL 220422 올렸습니다.
  • BaekJoon Java로 통일 하였습니다.
  • project nodejs

내일 할 일

  • 내일 할 일

장기 계획 (Long Term Todos)

  • Project 1 day 3 pill
    • 계획서 작성
    • 일정표 작성
    • 기획서 작성
    • 기능 정의서 작성
    • 화면 정의서
    • 화면 설계
    • ERD 설계

'TIL (Dev) > 2022년' 카테고리의 다른 글

[ 2022-04-25 ] TIL  (0) 2022.04.26
[ 2022-04-23 ] TIL  (0) 2022.04.23
[ 2022-04-21 ] TIL  (0) 2022.04.21
[ 2022-04-20 ] TIL  (0) 2022.04.20
[ 2022-04-19 ] TIL  (0) 2022.04.19

220421 TIL

오늘 할 일(계획)

  • Diary 220421 작성
  • Blog
    • TIL 220421 작성 후 올리기
    • npm & yarn 두가지 공부하여 포스팅 하기
  • Github
    • TIL 220421 작성후 올리기
    • Baekjoon
      • 기초 문제 6개 정도 풀고 올리기 (주석 달아서)
  • Individual study (개인 공부)
    • React practice-todos-app 화면 구상
    • Typescript 기초 공부
    • Node.js 크롤링 공부해보기
    • Baekjoon
      • 기초 공부하기
  • 오늘 할 일 (계획) 우선순위 정하기

오늘 한 일(회고)

  • 곰곰히 생각해봤는데 저는 너무 TIL, blog에 힘을 쏟아붙고 있어서 개인 공부할 시간이 부족하다는걸 알게 되었습니다. 그래서 할 일 계획에서 우선순위를 두기로 생각했습니다. 오늘 내일 안으로 정할 예정입니다.
  • BaekJoon 에서 기초 4문제를 풀었습니다, JS를 두고 Java로 가는게 맞다고 생각이 되었습니다.
  • Blog npm & yarn 두가지 공부하여 포스팅 하였습니다.
  • Github BaekJoon README 파일명에 관련한 설명을 올렸습니다.
  • Github BaekJoon 문제 4개를 풀고 올렸습니다
  • Github TIL 220421 올렸습니다.

내일 할 일

  • 오늘 할 일 (계획) 우선순위 정하기

장기 계획 (Long Term Todos)

  • project 1 day 3 pill
    • 계획서 작성
    • 일정표 작성
    • 기획서 작성
    • 기능 정의서 작성
    • 화면 정의서
    • 화면 설계
    • ERD 설계

'TIL (Dev) > 2022년' 카테고리의 다른 글

[ 2022-04-23 ] TIL  (0) 2022.04.23
[ 2022-04-22 ] TIL  (0) 2022.04.22
[ 2022-04-20 ] TIL  (0) 2022.04.20
[ 2022-04-19 ] TIL  (0) 2022.04.19
[ 2022-04-18 ] TIL  (0) 2022.04.19

npm vs yarn를 하기 위해선 package manager 이란 걸 알아야 할 텐데요

 

Package Manager 이란?

Package Manager (패키지 관리자) 패키지를 다루는 작업을 편리하고 안전하게 수행하기 위해 사용되는 툴입니다.

패키지를 다루는 작업 :  패키지를 설치, 업데이트, 수정, 삭제하는 작업

 

패키지란?

라이브러리와 유사한 형태이며

라이브러리 - 코드의 작성을 위해 사용되는 코드의 묶음
패키지 - 코드의 배포를 위해 사용되는 코드의 묶음

이렇게 볼 수 있습니다, 즉 배포를 위해 사용이 된다고 보시면 됩니다.

 

node.js Package Manager 에는 npm 그리고 yarn 이 있습니다.

인지도가 많고 사람들이 가장 많이 사용하는 건 아무래도 npm이라고 합니다.

저도 node.js를 사용할땐 npm을 사용했고 지금까지 잘 사용하고 있습니다.

2017년 ~ 2022년

다음 사진을 확인해보면 알 수 있습니다

해당 사진은 5년간의 다운로드 수를 나타는 지표입니다

하지만 StarsIssues를 본다면 다운로드 수에 비해 yarn이 몇 배는 더 많은 것을 볼 수 있습니다.

npm대중적이고 점유율이 높으며 yarn사람들의 관심도가 더 높다고 할 수 있을 것 같습니다.

 

속도

yarn을 사용하는 이유는 예전에는 속도 때문이라는 의견이 많았는데(yarn이 npm 보다 속도가 더 빠르다는 점) 최근에 비교를 해봤을 땐 npm의 punching back을 통해 그 차이를 따라잡았다고 해서 속도를 생각한다면 둘 중 아무거나 사용해도 괜찮을 것 같습니다.

 

보안성

npm은 패키지가 설치될 때 자동으로 코드와 의존성을 실행할 수 있도록 허용합니다

그런데 이런 방식은 위험도가 존재합니다.

반면,

yarn 같은 경우 yarn.lock 또는 package.json으로부터 설치만 하기 때문에 npm 방식보다 보안성은 월등히 좋다고 볼 수 있습니다.

 

그럼 npm과 yarn의 명령어 차이점에 대해 알아보겠습니다.

 

다른 명령어

Command NPM YARN
install dependencies npm install yarn
install package npm install [ package ] yarn add [ package ]
install dev package npm install --save-dev [ package ] yarn add -dev [ package ]
uninstall package npm uninstall [ package ] yarn remove [ package ]
uninstall dev package npm uninstall --save-dev [ package ] yarn remove [ package ]
Update npm update yarn upgrade
Update package npm update [ package ] yarn upgrade [ package ]
Global install package npm install --global [ package ] yarn global add [ package ]
Global uninstall package npm uninstall --global [ package ] yarn global remove [ package ]

 

같은 명령어

NPM YARN
npm init yarn init
npm run yarn test
npm test yarn login
npm login, logout yarn login, logout
npm link yarn link
npm publish yarn publish
npm cache clean yarn cache clean

 

 

Reference

https://aahc.tistory.com/14

https://developer0809.tistory.com/128

프로젝트 일정서

전에 만들었던 프로젝트 일정서를 바탕으로 만들어 보았습니다.

프로젝트 간트차트

전에 만들었던 간트차트를 바탕으로 만들어 보았습니다.

정리했던 글들도 있으니 보실분은 보셔도 괜찮을것 같습니당.

 

프로젝트 기간을 넉넉히 잡았습니다.

이유는 다른 팀 프로젝트 진행하는것도 있고 개인 공부도 따로 필요하다고 생각이 들어서 넉넉하게 잡았습니당

+ Recent posts