티스토리 뷰
📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS Docker 배포 및 CI/CD 실전 가이드
octo54 2025. 3. 24. 10:06📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS Docker 배포 및 CI/CD 실전 가이드
애플리케이션이 개발되었다면, 이제는 **안정적으로 배포하고 지속적으로 통합/배포(CI/CD)**하는 과정이 중요합니다.
이번 글에서는 NestJS 애플리케이션을 Docker로 컨테이너화하고, GitHub Actions를 활용한 CI/CD 파이프라인을 구축하는 방법을 다룹니다. 🚀
14.1 NestJS Docker 배포가 필요한 이유
✔ 어디서나 동일한 환경으로 실행 가능
✔ 개발, 테스트, 운영 환경 간 차이를 최소화
✔ CI/CD 도구와 쉽게 통합
14.2 NestJS Dockerfile 작성
📂 Dockerfile
# 베이스 이미지 설정
FROM node:18-alpine
# 앱 디렉토리 생성 및 설정
WORKDIR /app
# 종속성 설치를 위한 package 파일 복사
COPY package*.json ./
# 패키지 설치
RUN npm install
# NestJS 코드 복사
COPY . .
# 앱 빌드
RUN npm run build
# 포트 설정
EXPOSE 3000
# 앱 실행
CMD ["node", "dist/main"]
14.3 .dockerignore 파일 추가
📂 .dockerignore
node_modules
dist
.git
.env
✅ 빌드 시 필요 없는 파일 제외
✅ 빌드 속도 향상, 보안 위험 감소
14.4 Docker Compose로 PostgreSQL 연동
📂 docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- '3000:3000'
environment:
- DATABASE_URL=postgres://postgres:password@db:5432/nest
depends_on:
- db
db:
image: postgres:15
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: nest
ports:
- '5432:5432'
💡 NestJS의 .env에 DATABASE_URL을 설정해 두면 ORM과 연동 가능
14.5 로컬에서 Docker 실행
docker-compose up --build
✅ 앱은 localhost:3000에서 실행
✅ PostgreSQL은 localhost:5432에서 연결 가능
14.6 GitHub Actions로 CI/CD 파이프라인 구성
📂 .github/workflows/deploy.yml
name: NestJS CI/CD
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 코드 체크아웃
uses: actions/checkout@v3
- name: Node 설치
uses: actions/setup-node@v3
with:
node-version: '18'
- name: 의존성 설치
run: npm install
- name: 테스트 실행
run: npm run test
- name: Docker 이미지 빌드
run: docker build -t my-nest-app .
- name: DockerHub 로그인
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
- name: Docker 이미지 푸시
run: docker tag my-nest-app docker.io/${{ secrets.DOCKER_USERNAME }}/my-nest-app:latest && docker push docker.io/${{ secrets.DOCKER_USERNAME }}/my-nest-app:latest
✅ 구성 요약
- main 브랜치에 push 시 자동 실행
- 의존성 설치 → 테스트 → Docker 빌드 → DockerHub 푸시
- secrets는 GitHub Repository → Settings → Secrets에서 등록
14.7 CI/CD 후 서버에서 Docker로 배포
✅ 서버에 접속 후:
docker pull <your-username>/my-nest-app:latest
docker stop nest-app || true
docker rm nest-app || true
docker run -d --name nest-app -p 3000:3000 <your-username>/my-nest-app:latest
✅ 최신 이미지로 앱 재실행
✅ 무중단 배포를 위해 Nginx + Reverse Proxy + Zero Downtime 전략도 고려 가능
14.8 실전 운영 팁
✔ .env는 Git에 포함시키지 말고 secrets 또는 Volume으로 관리
✔ healthcheck를 통해 컨테이너 상태 모니터링
✔ Slack, Discord 등으로 배포 성공/실패 알림 연동
✔ Rollback을 위해 이전 버전 태그 관리
14.9 결론: NestJS + Docker + GitHub Actions으로 자동화된 백엔드 운영 만들기
✅ Docker로 어디서나 실행 가능한 NestJS 환경 구성
✅ PostgreSQL 포함한 통합 환경 구축 (docker-compose)
✅ GitHub Actions로 테스트 및 자동 배포 파이프라인 구축
✅ 실전 환경에서도 확장성과 재현성을 갖춘 운영 가능
다음 글에서는 NestJS에서의 성능 최적화 및 보안 베스트 프랙티스를 소개합니다. 🚀
🔍 다음 글 예고: NestJS 성능 최적화와 보안 전략
📌 다음 편: 15. NestJS 성능 최적화 & 보안 가이드
'project > NestJS + Kubernetes & 마이크로서비스 배포' 카테고리의 다른 글
📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS 외부 API 연동 실전 가이드 (Stripe, Firebase, SendGrid) (0) | 2025.03.25 |
---|---|
📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS 성능 최적화 & 보안 가이드 (0) | 2025.03.25 |
📌 NestJS 백엔드 개발: 기초부터 실전까지 + NestJS 모노레포 구조와 실전 적용법 (0) | 2025.03.23 |
📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS에서 테스트 작성과 TDD 실천 (0) | 2025.03.22 |
📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS에서 GraphQL API 구축하기 (0) | 2025.03.21 |
- Total
- Today
- Yesterday
- seo 최적화 10개
- 딥러닝
- llm
- nodejs
- rag
- 개발블로그
- 파이썬알고리즘
- JAX
- REACT
- 웹개발
- nextJS
- flax
- Prisma
- CI/CD
- fastapi
- AI챗봇
- 프론트엔드
- gatsbyjs
- App Router
- PostgreSQL
- Next.js
- SEO최적화
- 프론트엔드면접
- NestJS
- Docker
- Ktor
- SEO 최적화
- 백엔드개발
- kotlin
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |