Nodejs

 

NestJS MSA 환경에서 User Service의 Docker Compose 구성 방법

NestJS 기반 MSA(Microservice Architecture) 구조에서 User Service를 어떻게 Docker 환경에서 구성하고, docker-compose.yml 파일에 반영하는지 단계별로 설명합니다.

???? 목표: User Service를 다른 서비스와 함께 Docker 컨테이너로 실행할 수 있도록 docker-compose.yml 파일에 정의합니다.

 

✅ 기본 docker-compose.yml 구성

서 제공된 코드는 기존 gateway 설정 대신 user 서비스 중심으로 Docker를 구성하는 예시입니다. 현재는 gateway라는 이름이지만 내부적으로는 user 서비스의 설정이 포함되어 있습니다.

docker-compose.yml

services:
  user:
    build:
      context: .
      dockerfile: ./apps/user/Dockerfile
      target: development
    command: pnpm run start:dev user
    ports:
      - '3001:3000'
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules

설명:

  • gateway로 되어 있지만 실제 동작은 user 서비스를 실행하는 형태입니다.

  • dockerfile 경로와 command를 통해 apps/user 디렉토리의 개발 환경을 실행합니다.

  • 외부 접근을 위해 3001 포트를 열고, 내부 컨테이너는 3000 포트를 사용합니다.

 

올바른 user 서비스 분리 예시

보다 명확하게 user 서비스를 별도 정의한 예시는 다음과 같습니다:

user:
  build:
    context: .
    dockerfile: ./apps/user/Dockerfile
    target: development
  command: pnpm run start:dev user
  ports:
    - "3001:3000"
  volumes:
    - .:/usr/src/app
    - /usr/src/app/node_modules

 

 이처럼 user라는 이름으로 명시해두면 추후 gateway, auth 등 서비스와 구분이 명확해집니다.

user 서비스용 Dockerfile 설명

아래는 apps/user/Dockerfile 파일의 예시로, NestJS 프로젝트를 컨테이너로 실행할 수 있도록 구성합니다.

 

# 어떤 이미지를 사용할지
FROM node:alpine AS development

# 작업 디렉토리 설정
WORKDIR /usr/src/app

# 패키지 관련 파일 복사
COPY package*.json ./
COPY pnpm-lock.yaml ./
COPY tsconfig.json tsconfig.json
COPY nest-cli.json nest-cli.json

# pnpm 설치
RUN npm i -g pnpm

# 의존성 설치
RUN pnpm i

# 전체 프로젝트 복사
COPY . .

 설명:

  • node:alpine 이미지를 사용해 가볍고 빠른 빌드 환경 제공

  • WORKDIR로 컨테이너 내 작업 위치 지정

  • 종속성 설치 전 필요한 설정 파일을 먼저 복사하여 Docker 캐시 최적화

  • 마지막에 전체 프로젝트 복사하여 NestJS 실행에 필요한 파일을 모두 포함

 

 

 전체 docker-compose.yml 예시 

 

✅ 참고: version 속성은 더 이상 필요하지 않습니다.
Docker Compose 최신 버전에서는 version 항목 없이도 자동 인식됩니다.

docker-compose.yml

services:
  gateway:
    build:
      context: .
      dockerfile: ./apps/gateway/Dockerfile
      target: development
    command: pnpm run start:dev gateway
    env_file:
      - ./apps/gateway/.env
    ports:
      - '3000:3000'
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules

  user:
    build:
      context: .
      dockerfile: ./apps/user/Dockerfile
      target: development
    command: pnpm run start:dev user
    ports:
      - '3001:3000'
    env_file:
      - ./apps/user/.env
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules

 실행 방법

  1. 루트 디렉토리에서 다음 명령어 실행:

docker-compose up --build
  1. gateway 접근: http://localhost:3000

  2. user 서비스 접근: http://localhost:3001

 

 

■  MSA 구조에서 서비스 분리와 통합의 핵심

  • 각 서비스는 독립적인 포트, 환경변수 설정, 실행 커맨드를 가짐

  • Dockerfile과 디렉토리를 구분하여 유지보수 편리함

  • docker-compose.yml 한 파일로 전체 서비스 관리 가능

 

 

 

about author

PHRASE

Level 60  라이트

그 사람의 미덕과 인품에 이끌려 자신도 모르게 가까이 다가갈 때, 비로소 사랑은 시작된다. -그라시안

댓글 ( 0)

댓글 남기기

작성