[postgreSQL] postgreSQL 기본 개념 / 구조 - Sequelize를 활용하여 db생성 및 table 연동

Hyo Kyun Lee·2021년 9월 3일
0

postgreSQL

목록 보기
3/6

1. 필요 package

  • express : 웹사이트를 동작시키는 웹프레임워크 패키지
  • express-handlebars : HTML 소스를 기반으로 정적 웹사이트를 구현하는 템플릿 엔진
    (※ 동적으로 동작하기도 하여, PHP소스 등과 같은 구조를 지원해주기도 한다)
  • body-parser : API를 통해 data를 얻기위한 기능 제공
  • sequelize : postgreSQL(RDBMS)와 client 간 ORM 기능 제공
  • pg pg-store : postgreSQL 데이터베이스 드라이버

2. 기본 server 구성

기본적인 웹사이트를 생성할 client server 구성

const express = require('express')
const exphbs = require('express-handlebars')
const bodyParser = require('body-parser')
const path = require('path')

const app = express()
const PORT = process.env.PORT || 5000

app.get('/', (req, res)=> {
    res.send('INDEX')
})
app.listen(PORT, console.log(`SERVER ON ${PORT}`))

3. Sequelize를 사용하여 postgreSQL databse와 연결

postgreSQL database와 연결

config 폴더를 생성해서 별도의 database.js 파일 구성

const {Sequelize} = require('sequelize')
const db = new Sequelize('DATABASE_NAME', 'owner', 'password', {
    host: 'localhost',
    dialect: 'postgres'
});

db.authenticate()
.then(()=>console.log('Database connected successfully'))
.catch(error => console.error('ERROR FOUNDL ', error))

4. database로 부터 data resource(table 정보)를 매핑 및 객체화(ORM)

생성한 database에서 table 정보를 가져온다(객체화를 통한 ORM 작업).

models 폴더에서 Models.js 파일을 구성하여 별도의 경로 생성
→ 이때 파일의 이름은 통상적으로 첫이름을 대문자로 사용한다.

반드시 자신이 postgreSQL db 내 생성한 table 제목과 일치하도록 구성한다.

const Sequelize = require('sequelize')
const db = require('../config/database')

const tables = db.define('hyokyun_1', {
    title: {
        type: Sequelize.STRING
    },
    technologies: {
        type: Sequelize.STRING
    },
    description: {
        type: Sequelize.STRING
    },
    budget: {
        type: Sequelize.STRING
    },
    contact_email: {
        type: Sequelize.STRING
    }
})

module.exports = tables

위에서 매핑한 table 정보를 그대로 활용할 수 있게 된다.

5. 생성한 table 정보를 특정 routing 파일(폴더)에서 확보

express middleWare를 활용하여 별도의 routing 경로 생성

app.use('/tables', require('./routes/tables'))

※ middleWare로 인해, 해당 경로 요청이 발생하면 callback으로 정의한 logic 작동한다.

routing 파일에서 table 정보 가져오기

const express = require('express')
const router = express.Router()

const db = require('../config/database')
const Model = require('../models/Model')


router.get('/', (req, res) => {
    //res.send('THIS IS entities')
    Model.findAll()
    .then(list=>{
        console.log(list)
        res.sendStatus(200)
    })
    .catch(err => console.error('ERROR FOUND : ', err))
})

module.exports = router

express router를 통해 요청을 전달받는다.

  • 그 후 연결된 Model(=mapping 한 table 정보)에서 그대로 table 정보를 가져와(Model.findAll()) log로 출력한다.
  • 웹 사이트 자체적으로는 sendStatus(200)을 출력한다(="OK")

6. log 및 화면 확인

log를 통해 보여지는 database의 table 정보 확인

※ table에 아직 정보가 채워지지 않은 상태이므로, 해당 정보에 연결된 상태만 출력되고 findAll()에 대한 정보는 출력되지 않는다(공배열 상태로 출력).

화면에 res.sendStatus(200)이 정상 출력되는지 확인("OK")

7. 참조링크

sequelize 공식문서
https://sequelize.org/master/manual/getting-started.html

express-handlebars
https://velog.io/@parkoon/%EC%8B%A4%EB%AC%B4%EC%97%90%EC%84%9C-Handlebars-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-feat-express

npm i options
https://c17an.netlify.app/blog/node.js/npm-install-%EC%A0%95%EB%A6%AC/article/

postgre schema error
https://javaoop.tistory.com/71

0개의 댓글