[Node.js + PostgreSQL] PostgreSQL를 Node.js에 연동하기

홍승보·2022년 7월 28일
2

Back-End

목록 보기
2/5
post-thumbnail

PostgreSQL이란?

  • PostgreSQL은 전세계에서 널리 사용되는 데이터베이스중 하나이다.
  • 또한 Web System 에서 사용되는 데이터베이스 시스템 중 하나이다.
  • 주로 일본 기업에서 많이 사용되는 데이터베이스이다.

설치 방법

brew install postgresql

설치가 완료되면 아래 명령을 실행

psql --version

pgAdmin 설치

PostgreSQL GUI S/WpgAdmin을 설치한다.

아래의 postgre공식사이트에서 설치할 수 있다.

https://www.postgresql.org/ftp/
여기서
"pgAdmin"→ "pgAdmin4"→ "최신 버전"→ 해당되는OS
를 설치한다.

Database와 Table 만들기

터미널을 열어서 다음 명령으로 postgreSQL에 접속한다.

psql postgres

이후에 아래의 명령을 실행하여 데이터베이스를 생성한다.

create database nodedb;

메타 명령 \l을 통해 데이터베이스 목록 조회시 nodedb가 존재할 것이다.
이제 다음 명령으로 nodedb로 이동한다.

\c nodedb

이제 테이블을 만들것이다.
Schema를 만들지 않으므로 기본 public Schema에 만들것이다.
아래의 명령을 실행하여 테이블을 만든다.

create table member (id integer primary key, name varchar(20));

메타명령 \dt를 실행하여 member table이 있는지 확인한다.

pgAdmin을 Database에 연결

방금 설치했던 pgAdmin을 실행시킨다.

왼쪽 메뉴의Server에서 마우스 우클릭 후 CreateServer ...를 클릭시 위와 같은 메뉴가 표시된다.

Name란에 local이라고 입력 후 Save버튼을 클릭한다.

여기에다가 다음과 같이 입력하면 된다.

  • Host : 127.0.0.1
  • Port : 5432
  • Maintenance database : nodedb
  • username: 슈퍼유저명
  • password: 사용자비밀번호
  • Save Password: 체크

그렇다면 Serverslocal 서버가 만들어져 있을 것이다.

그렇다면 위 그림과 같이 nodedbTables에 생성한 member테이블도 포함되어 있는것을 확인할 수 있다.

member에서 우클릭을 하여 View/Edit dataAll Rows를 클릭하면 테이블내의 컬럼이 표시된다. 하지만 아직 데이터가 들어있지 않으므로 비어있는 상태이다.

Node.js를 Database에 연결

아무 디렉토리에 node-psql-test 폴더를 만들고 그 안에 psql.js파일을 생성한다.

그리고 node.js에서 PostgreSQL을 사용할 수 있도록 node-postgres라는 라이브러리를 설치해야 한다.

npm install pg

설치가 완료되면 psql.js를 열고 다음과 같이 작성한다.

const { Client } = require("pg");
const client = new Client({
  user: "사용자명",
  host: "127.0.0.1",
  database: "nodedb",
  password: "사용자비밀번호",
  port: 5432,
});
client.connect();
client.query("SELECT NOW()", (err, res) => {
  console.log(err, res);
  client.end();
});

코드를 자세히 보자.
먼저 postgreSQL모듈을 가져오는 부분을 보자

const { Client } = require("pg");

그리고 Client() 인스턴스를 작성하는데, 초기 설정으로 옵션에 데이터베이스에 접속하기 위한 정보를 작성한다.

const client = new Client({
  user: "사용자명",
  host: "127.0.0.1",
  database: "nodedb",
  password: "사용자비밀번호",
  port: 5432,
});

그리고 .connect()로 데이터베이스에 접속한다.

client.connect();

node에서 PostgreSQL에 쿼리조작을 할 때는 .query()를 사용한다.
다음은 SELECT NOW()를 실행해 현재 시간을 timestamp형(날짜와 시각을 나타내는 데이터형)으로 얻는다.
그리고 그 결과를 console.log로 출력한다.

client.query("SELECT NOW()", (err, res) => {
  console.log(err, res);
  client.end();
});

이렇게 파일을 저장한뒤에 node psql.js로 실행해본다.

rows안에 현재의 timespace가 보이는것을 확인할 수 있다.
이제 노드에서 데이터베이스에 연결할 수 있다.

데이터 등록, 검색, 삭제

이제, node로부터 PostgreSQL에 데이터를 등록, 검색, 삭제 하는 쿼리조작을 하려고 한다.

psql.js에 다음과 같이 작성해보자.

const { Client } = require("pg");
const client = new Client({
    user: "사용자명",
    host: "127.0.0.1",
    database: "nodedb",
    password: "사용자비밀번호",
    port: 5432,
});
client.connect();
const query = {
    text: "INSERT INTO member VALUES ($1, $2)",
    values: [1, "홍길동"],
};
client
    .query(query)
    .then((res) => {
        console.log(res);
        client.end();
    })
    .catch((e) => console.error(e.stack));
const query = {
  text: "INSERT INTO member VALUES ($1, $2)",
  values: [1, "홍길동"],
};

일단 query()에 인자로써 건네주는 SQL커맨드와 건네주는 값을 변수 query에 넣어둔다.
나의 경우에는 [1, "홍길동"]이라는 데이터를 등록하였다.

client
  .query(query)
  .then((res) => {
    console.log(res);
    client.end();
  })
  .catch((e) => console.error(e.stack));

그리고 query()의 인자에 이 데이터를 건네준다.
또한 console.log에서 이것에 대한 응답 내용을 출력하도록 한다.

이제 node psql.js를 실행해보자.
실행해보면 이러한 결과가 나올것이다.

insert에는 성공한 것으로 보이나 정말 성공하였는지 확인해보자.

pgAdminnodedb에서 Tables → Member로 이동한 뒤 우클릭하여 All Rows를 표시해보자.
그렇다면 제대로 [1, 홍길동]에 대한 데이터가 등록되어 있을 것이다.

데이터 조회

데이터를 얻는 것도 가능하다.
PostgreSQL에서는 Select from의 SQL커맨드를 통해 데이터를 조회할 수 있다.

psql.js에 다음과 같이 작성해보자.

const { Client } = require("pg");
const client = new Client({
  user: "사용자명",
  host: "127.0.0.1",
  database: "nodedb",
  password: "사용자비밀번호",
  port: 5432,
});
client.connect();
const query = {
  text: "SELECT * FROM member",
};
client
  .query(query)
  .then((res) => {
    console.log(res.rows[0]);
    client.end();
  })
  .catch((e) => console.error(e.stack));


실행해보면 아래와 같은 조회한 회원의 데이터가 표시된다.

데이터 삭제

마지막으로 방금 등록한 데이터를 삭제해보자.
PostgreSQL에서의 쿼리문은 delete from이다.
psql.js에 다음과 같이 작성해보자.

const { Client } = require("pg");
const client = new Client({
  user: "사용자명",
  host: "127.0.0.1",
  database: "nodedb",
  password: "사용자비밀번호",
  port: 5432,
});
client.connect();
const query = {
  text: "DELETE FROM member WHERE id = $1",
  values: [1],
};
client
  .query(query)
  .then((res) => {
    console.log(res);
    client.end();
  })
  .catch((e) => console.error(e.stack));


실행 후 응답을 보면 성공한 것으로 보인다.


pgAdmin에서 확인해보아도, 제대로 [1, "홍길동"]의 데이터가 삭제되었다는 것을 알 수 있다.

📝 요약

  • Node.js에서 PostgreSQL에 연결하여 쿼리작업을 수행하는것을 연습해 보았다.
  • 이 내용을 어플리케이션에 적용한다면 데이터베이스를 이용한 데이터를 GET, POST를 수행하는 기능을 구현할 수 있을 것이다.

출처

https://www.dailyupblog.com/backend_development/962/

profile
Junior BE Developer

1개의 댓글

comment-user-thumbnail
2024년 4월 30일

2024.04.30 기준으로
소주제 : 설치방법 에서 "brew install postgresql" 후
pgAdmin4 로 연결 시도 시 바로 진행되지 않을 수 있습니다. (제가 경험한 버전은 postgresql@14 였습니다.)
이때 "brew services start postgresql"
진행해보시면 되겠습니다.
brew 로 설치 후 summary 부분에 설명이 적혀있고, 버전마다 달라질 수 있습니다.

답글 달기