이것저것 해보기🌼

Node.js + postgreSQL 연동 및 쿼리 실행 본문

BE/Node.js

Node.js + postgreSQL 연동 및 쿼리 실행

realtree 2024. 9. 4. 18:24

 

1. postgreSQL을 설치하고, database 를 만든다.

 

2. database 안에 table을 만든다. (여기서는 users 라는 테이블)

 

3. Node.js 에서 새로운 프로젝트를 만든다.

 

4. pg 를 설치하고, 테스트 코드를 실행해본다.

https://node-postgres.com/

 

Welcome – node-postgres

node-postgres is a collection of node.js modules for interfacing with your PostgreSQL database. It has support for callbacks, promises, async/await, connection pooling, prepared statements, cursors, streaming results, C/C++ bindings, rich type parsing, and

node-postgres.com

 

import pg from 'pg'
const { Client } = pg
const client = new Client({
	user: '[my id]',
    password: '[password]',
    database: '[database]',
})
await client.connect()
 
const res = await client.query('SELECT $1::text as message', ['Hello world!'])
console.log(res.rows[0].message) // Hello world!
await client.end()

 

이코드를 실행해서 문제없이 Hello, world! 가 뜨면 DB는 연결 완료!

 

5. 쿼리를 쉽게 실행하는 법

- npm install commander

- npm install prompts

 

import { Command } from 'commander'
const program = new Command()
import pg from 'pg'
import prompts from 'prompts'
const { Client } = pg

async function connect() {
  const client = new Client({
    user: '[USER]',
    password: '[PASSWORD]',
    database: '[DATABASE]',
  })
  await client.connect()
  return client
}
program.command('list').action(async () => {
  const client = await connect()

  const query = `SELECT * FROM users`
  const result = await client.query(query)
  console.log(result.rows)
  await client.end()
})

program.command('add').action(async () => {
  const client = await connect()
  const userName = await prompts({
    type: 'text',
    name: 'userName',
    message: 'Provide a user name to insert',
  })
  const query = `INSERT INTO users (name) VALUES ($1::text)`
  await client.query(query, [userName.userName])
  await client.end()
})

program.command('remove').action(async () => {
  const client = await connect()
  const userName = await prompts({
    type: 'text',
    name: 'userName',
    message: 'Provide a user name to delete',
  })
  await client.query(`DELETE FROM users WHERE name = $1::text`, [
    userName.userName,
  ])
  await client.end()
})

program.parseAsync()

 

 

예시 1) node main.js add

 

cli로 손쉽게 테이블에 데이터 insert가 가능해진다.

 

예시 2) node main.js remove

 

삭제도 마찬가지로 쉽게 가능하다.

 

 

주의할 점

SQL Injection 공격을 막기 위해서 column에 들어갈 값을 직접 `'${username}'` 으로 넣지 말고, $1::text 로 지정해야한다.

  await client.query(`DELETE FROM users WHERE name = $1::text`, [
    userName.userName,
  ])

 

 

 

여기까지 postgreSQL Node에서 실습해보았다.