[Node.js + PostgreSQL] Node.js에서 PostgreSQL 연동하기
안녕하세요!
최근 회사에서 PostgreSQL과 Node.js에서 프로젝트를 진행하게 되어서 오늘은 Node.js에서 PostgreSQL을 연동하는 방법과
PostgreSQL 설정 방법을 업로드 해보겠습니다.
✏️ AWS에서 PostgreSQL 데이터베이스 생성하기
만드는 방법은 그렇게 어렵지 않아서 간단하게 사진으로만 보여드리겠습니다
저는 이미 VPC보안 그룹이 설정되어 있어서 기존에 쓰던 거를 그대로 사용했는데, 안 되어 있으신 분들은 데이터베이스 생성 후 인바운드 규칙 편집에서 본인의 IP를 추가해주시면 됩니다
✏️ datagrip에 연결 + 테이블 생성하기
데이터베이스 서버를 구축했으니 이젠 데이터베이스를 수 있도록 연결을 하고 테이블을 생성해 볼 차례입니다.
아래 사진과 같이 클릭 후 하나씩 입력해 주시면 됩니다.
Host창에 위에서 만들었던 데이터베이스의 엔드포인트를 복사해서 그대로 복사붙여넣기를 하신 후
User와 Password에는 위에서 만들었던 유저 이름와 마스터 암호를 입력하신 후 TestConnection을 눌러서 확인해보시면 됩니다.
잘 입력하셨다면 아래 사진과 같은 초록불이 나옵니다
연결을 했으니 이젠 테이블을 만들어볼 차례입니다.
저는 아래 사진과 같이 만들었습니다.
create table "Member"
(
name varchar(20) not null,
password varchar(100) not null,
email varchar(50) not null,
nickname varchar(30) not null,
id varchar(20) not null,
idx integer default nextval('"Member_id_seq"'::regclass) not null
constraint member_pk
primary key,
salt varchar not null
);
alter table "Member"
owner to dearmate;
-- auto-generated definition
create sequence "Member_id_seq";
alter sequence "Member_id_seq" owner to dearmate;
alter sequence "Member_id_seq" owned by "Member".idx;
✏️ node.js 설정해주기
코드를 작성하기에 앞서 필요한 의존성들을 node_modules에 추가를 해줘야 합니다
/* 맥 터미널 창*/
brew install postgresql
/* vsc 터미널 창*/
npm install // npm 설치하기
npm install express // express 설치하기
npm install pg // postgresql 드라이버 설치하기
저는 connection pool 방식을 이용해서 구현을 해보았습니다.
커넥션 풀에 대한 설명은 여기를 참고하시면 될 것 같아요
pgConnect.js
데이터베이스 연결을 위해 설정해주는 코드라고 생각하시면 될 것 같습니다.
host, port, user, password, database에 각각 위에서 만들었던 데이터베이스에 해당하는 값들을 입력해 주시면 됩니다.
그리고 나서 풀에서 연결을 가져오는 getConnection함수와 연결을 해제하는 closeConnection함수를 각각 만들었습니다.
추가로 각각의 함수들은 모두 async, await가 붙여진 비동기 처리 함수입니다
const { Pool } = require('pg');
const pool = new Pool({
host: '',
port: '5432',
user: '',
password: '',
database: '',
ssl: {
rejectUnauthorized: false, // AWS RDS의 기본 인증서 사용 시 필요
},
max: 20, // 최대 클라이언트 수
idleTimeoutMillis: 30000, // 사용되지 않는 연결을 풀에서 제거하는 시간 (ms)
connectionTimeoutMillis: 2000, // 연결을 생성하는 데 걸리는 최대 시간 (ms)
});
// 연결을 가져오기 위한 함수
const getConnection = async () => {
try {
const client = await pool.connect(); // 풀에서 연결을 가져옴
console.log('Database connected successfully');
return client;
} catch (err) {
console.error('Database connection error:', err.stack);
throw err;
}
};
// 연결을 반납하는 함수
const closeConnection = (client) => {
try {
client.release(); // 연결을 풀에 반납
console.log('Database connection released back to pool');
} catch (err) {
console.error('Error releasing database connection:', err.stack);
}
};
module.exports = {
getConnection,
closeConnection,
};
app.js
이렇게 설정을 해주시면 되고 express에 대한 설명은 아래와 같습니다
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const db = require('./config/pgConnect');
app.use(express.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/', (req, res) => {
return res.status(200).send('Server is running');
});
app.get('/member', async (req, res) => {
let getSQL = 'select idx, name, password, email, nickname from "Member"';
try {
client = await db.getConnection();
let result = await client.query(getSQL);
console.log(result);
return res.status(200).json({ result: 'ok', members: result.rows });
} catch (err) {
console.error(err);
return res.status(500).json({ error: 'Database operation failed' });
} finally {
if (client) db.closeConnection(client); // 클라이언트를 한 번만 반환
}
});
✏️ 결과(멤버 테이블 조회하기)