(Node.js) Nestjs + MSA기반 서버 구축 (2) - MongoDB & Docker 연동

2025. 6. 11. 13:00Node.js

반응형

 

 

2025.06.05 - [Node.js] - (Node.js) Nestjs + MSA 기반 서버 구축 (1)

 

(Node.js) Nestjs + MSA 기반 서버 구축 (1)

● 순서 요지환경 설정 및 Lib 설치코드 구현테스트 통신마무리 1. 요지우연히 NestJS + MSA + MongoDB를 기반으로 한 서버를 docker-compose로 구축할 수 있는 기회가 생겼었다그래서 해당 구축한 내용을

developerjjh.tistory.com

 

 

 

● 순서

  1. MongoDB 설치
  2. docker 설치
  3. docker-compose로 실행

 

지난 게시물에 이어서 연결된 서버에 요청온 데이터들을 별도의 저장소인 DB내에 저장하는 과정을 기록하려고 한다

 

DB는 MongoDB로 정해서 진행할 예정이다

 

MongoDB 및 몽구스 설치

# nestjs 몽구스 모듈 설치
npm install @nestjs/mongoose mongoose

 

modules 설정

- 해당 파일에서 몽구스를 이용해서 모듈을 추가

// board/src/app.modules.ts
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';

import { AppController } from './app.controller';
import { AppService } from './app.service';
import { BoardSchema } from './schema/board.scheme';

@Module({
  imports: [
    MongooseModule.forRoot('mongodb://localhost/nest'),
    MongooseModule.forFeature([{ name: 'Board', schema: BoardSchema }]),
  ],

  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

Schema 생성

- mongoDB내 사용할 테이블의 스키마를 정의하는 파일 생성

// board/src/schema/board.schema.ts
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Types } from 'mongoose';

export type BoardDocument = Board & Document;

@Schema()
export class Board {
  @Prop({ required: true })
  title: string;

  @Prop()
  text: string;
}

export const BoardSchema = SchemaFactory.createForClass(Board);

 

이렇게 설정하고 

 

# board 서비스 실행
npm run start:dev

 

하니... 덜컥....

 

 

mongoDB가 로컬에서 실행되고 있지 않아서 생긴 에러를 만날 수 있다

 

 

어쩌지 어쩌지... 검색하고 찾아보고 알아보다가

계속 각 서비스 마다 터미널을 열어서 실행했던 것도 불편하고 

mongodb를 로컬에 설치해서 환경변수 설정 하는 등 까다로워서

한번에 실행하고 mongdb도 실행 할 수 있도록 

docker와 docker-compose를 이용해보기로 했다

 

 

Docker 설치 및 설정

  1. docker desktop 프로그램을 설치
  2. docker-compose.yml 파일 생성
  3. 각 서비스별 Dockerfile 생성

docker desktop은 설치하는 법이 어렵지 않아서 간단히 설치를 해주고

 

파일 예제는 다음과 같다

 

docker-compose.yml

- 해당 파일은 프로젝트 최상단(root)에 생성

# docker-compose.yml

services:
  gateway:
    build:
      context: ./gateway
      dockerfile: Dockerfile
    ports:
      - '3000:3000'
    depends_on:
      - board
    networks:
      - nest-net

  board:
    build:
      context: ./board
      dockerfile: Dockerfile
    ports:
      - '4002:4002'
    environment:
      - MONGO_URI=mongodb://${{mongodb이름}}:${{비밀번호}}@mongodb:27017/board?authSource=admin
    depends_on:
      - mongodb
    networks:
      - nest-net

  mongodb:
    image: mongo
    container_name: mongodb
    restart: always
    ports:
      - '27017:27017'
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${{mongodb이름}}
      MONGO_INITDB_ROOT_PASSWORD: ${{비밀번호}}
    networks:
      - nest-net

networks:
  nest-net:
    driver: bridge

 

각 서비스별 Dockerfile

- 해당 파일을 각 서비스별로 생성

FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node", "dist/main.js"]
  • node버전은 22
  • 컨데이너 내부에서 작업할 디렉토리를 /app으로 설정
  • package.json과 lock.json을 복사
  • 의존성 설치
  • 빌드
  • 포트는 3000번으로 설정
  • 빌드내 dist/main.js로 실행

 

여기까지 왔다면 우리는 이제 실행을 해볼 수 있다

docker 명령어를 실행하기 전에 docker desktop은 실행해둬야 한다!

 

# 프로젝트 최상단(root)
# docker-compose.yml 파일이 있는 곳
docker compose up --build
#혹은
docker-compose -up --build

 

※ 만일 mongodb를 설치하지 않았다면 아래의 docker 명령어로 설치

docker run -d --name mongodb -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=${{mongodb이름}} -e MONGO_INITDB_ROOT_PASSWORD=${{설정 비밀번호}} mongo

 

 

`docker-compose up --build` 명령어가 정상적으로 동작한다면 아래와 같은 화면을 볼 수 있다

 

터미널과 docker desktop에서의 실행 화면

 

두 화면에 찍히는 로그들은 같은 내용들이다, 본인이 좀 더 편한 화면으로 보면 좋을 듯 하다

 


 

여기까지 설정하고 다음 게시물에서는 게시물을 등록해서 데이터베이스에서 확인하고 조회할 수 있도록 해보겠습니다~