Nodejs

Nodejs PostgreSQL 연동

_HelloWorld_ 2024. 12. 18. 17:40

필요한 패키지 설치

npm install pg
npm install @types/pg --save-dev

폴더 구조 설계

src
├── controllers
│   └── authController.ts
├── db
│   └── index.ts          // PostgreSQL 연결 설정
│   └── userModel.ts      // 사용자 관련 데이터베이스 쿼리 ( Model )
├── middlewares
│   └── authMiddleware.ts
├── utils
│   └── bcryptConfig.ts
│   └── jwtConfig.ts
├── app.ts
└── .env

PostgreSQL 연결 설정

# db/index.ts

import dotenv from 'dotenv';
dotenv.config();

import { Pool } from 'pg'; 

// PostgreSQL 연결 설정
const pool = new Pool({
  user: process.env.DB_USER,      // .env에 정의된 DB 사용자
  host: process.env.DB_HOST,      // .env에 정의된 DB 호스트
  database: process.env.DB_NAME,  // .env에 정의된 DB 이름
  password: process.env.DB_PASSWORD, // .env에 정의된 DB 비밀번호
  port: parseInt(process.env.DB_PORT || '5432', 10),  // .env에 정의된 DB 포트
});

export default pool;

 

연결 테스트

// DB TEST
pool.connect()
  .then(() => console.log('PostgreSQL connected successfully'))
  .catch(err => console.error('Error connecting to PostgreSQL', err));

최상단 app에서 import 이후 connect를 통해서 데이터베이스 연결이 잘 되나 확인하기


마이그레이션

# db/migration.ts

import pool from './index';

const createUserTable = async () => {
  const query = `
    CREATE TABLE IF NOT EXISTS users (
      id SERIAL PRIMARY KEY,
      email VARCHAR(100) NOT NULL,
      password VARCHAR(100) NOT NULL
    );
  `;
  try {
    await pool.query(query);
  } catch (error) {
    throw error;
  }
}

const migration = async () => {
  try {
    await createUserTable();
    console.log('Migration completed successfully');
  } catch (error) {
    console.error('Migration failed', error);
  }
}

migration().finally(() => pool.end());

임시로 작성한 사용자 테이블 생성 쿼리를 함수로 분리하여 migration.ts 파일에 작성 

 

작동 테스트 

  1. 타입스크립트 형태의 코드를 자바스크립트 코드로 컴파일 ( 빌드 )
  2. 빌드된 자바스크립트 파일을 실행하여 함수가 제대로 작동 되는 지 확인 

결론

데이터베이스 연결과 연결 된 데이터베이스에 테이블을 생성하여 테스트 해보는 예제

'Nodejs' 카테고리의 다른 글

Postgresql TypeORM으로 마이그레이션 하기  (0) 2024.12.19
JWT, Bcrypt 예제  (0) 2024.12.18
Nodejs 개발환경 셋팅  (0) 2024.12.18