본문 바로가기

PostgreSQL 사용기 (feat, docker) 본문

개발/node.js

PostgreSQL 사용기 (feat, docker)

자전하는명왕성 2023. 7. 21. 13:13

이번 포스팅에서는 docker를 활용하여 컨테이너를 올리고, 서버와 연동시키는 과정에 대해 다룬다. 

(postgres 마스코트인 코끼리가 귀여워서 언젠가 한번 써보고 싶었음)

ORM은 TypeORM을 사용했으며, express 서버를 구현하였다.

 

먼저 간단한 MySQL과 PostgreSQL을 비교해본다.

  PostgreSQL MySQL
특징 기능과 표준에 중점 속도에 중점 (단순 CRUD의 경우 빠른 속도)
사용 영역 크고 복잡한 작업에 사용 일반적으로 간단한 작업에 사용

 

목차

  • typeorm과 postgres 연결 코드 작성
  • postgres 실행 코드 작성
  • docker-compose.yaml 파일 작성
  • postgres 초기 설정

 

1. typeORM과 postgres 연결

import { DataSource } from "typeorm";
import { Board } from "./Board.postgres"; // 예시 엔티티

export const AppDataSource = new DataSource({
  type: "postgres", // DB 종류를 의미 ex) mysql, postgres
  host: "database", // * 밑에서 설명
  port: 5432, // postgres의 default port
  username: "root",	// * 밑에서 설명
  password: "root", // * 밑에서 설명
  database: "example", // DB 이름
  entities: [Board], // 적용할 entity
  synchronize: true, // 동기화
  logging: true, // 로그 출력
});

 

2. postgres 실행 코드를 작성

import express from "express";
import { AppDataSource } from "./src/db";

const app = express();
app.use(express.json());

app.listen(4000, () => {
  console.log("server running");
});

/// 이 부분
AppDataSource.initialize()
  .then(() => {
    console.log("DB접속 성공");
  })
  .catch((error) => {
    console.log("DB접속 실패");
    console.log("error", error);
  });
/// 이 부분

import로 받아온 AppDataSource를 초기화시키고 실행시켜주는 코드를 작성한다.

 

3. docker-compose.yaml 파일 작성

각각 컨테이너에 맞춰 실행시키기 위한 yaml 파일을 작성한다.

version: "3.7"

services:
  server:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: backend
    ports:
      - 4000:4000
    volumes:
      - ./src:/folder/src

  database: // * typeorm 명세에서 작성한 host와 동일한 이름이어야 함
    image: postgres
    restart: always
    container_name: postgres
    ports:
      - 5432:5432 // * typeorm 명세에서 작성한 port와 동일해야 함
    environment:
      POSTGRES_DB: example // * typeorm 명세에서 작성한 database와 동일해야 함
      POSTGRES_USER: root // * typeorm 명세에서 작성한 username와 동일해야 함
      POSTGRES_PASSWORD: root // * typeorm 명세에서 작성한 password와 동일해야 함
    volumes:
      - ./data/postgres/:/var/lib/postgresql/data

 

여기까지 작성 후 실행하면, 

db 연결 성공 시 출력하게 한 메시지를 확인할 수 있고,

docker ps 명령어를 통해 postgres 컨테이너가 정상적으로 올라와있음을 확인할 수 있다.

 

간단한 API를 만들어서 실행해본다.

app.post("/test", async (req, res) => {
  const input = req.body;

  const result = await Board.create({
    ...input,
  });

  res.send(result);
});

 

 

정상적으로 데이터가 삽입된 것을 확인할 수 있음 ^-^

'개발 > node.js' 카테고리의 다른 글

Nginx 사용기  (0) 2023.07.05
node.js - jwtAuth 미들웨어 구현  (0) 2023.05.01
Node.js - PM2  (0) 2023.04.20
Node.js, 미들웨어 & 라우터 핸들러  (0) 2023.04.13
node.js & graphQL  (0) 2023.04.11
Comments