9.6 KiB
9.6 KiB
🐳 Docker 가이드 - WACE 솔루션 (ERP-node)
이 문서는 WACE 솔루션의 Docker 환경 설정 및 사용법을 설명합니다.
📋 개요
기술 스택:
- 백엔드: Node.js + TypeScript + PostgreSQL (Raw Query)
- 프론트엔드: Next.js + TypeScript + Tailwind CSS
- 컨테이너: Docker + Docker Compose
환경:
- 개발: Mac (볼륨 마운트 + Hot Reload)
- 운영: Linux 서버 (최적화된 프로덕션 빌드)
🔧 개발 환경 (Mac)
빠른 시작
# 전체 서비스 시작 (병렬 빌드 - 가장 빠름!)
./scripts/dev/start-all-parallel.sh
개별 서비스 시작
# 백엔드만 시작
./scripts/dev/start-backend.sh
# 프론트엔드만 시작
./scripts/dev/start-frontend.sh
개발용 Docker Compose 파일들
-
docker/dev/docker-compose.backend.mac.yml- Mac 개발용 백엔드- 볼륨 마운트:
./backend-node:/app(Hot Reload) - Dockerfile:
docker/dev/backend.Dockerfile - 포트:
8080
- 볼륨 마운트:
-
docker/dev/docker-compose.frontend.mac.yml- Mac 개발용 프론트엔드- 볼륨 마운트:
./frontend:/app(Hot Reload) - Dockerfile:
docker/dev/frontend.Dockerfile - 포트:
3000
- 볼륨 마운트:
개발 환경 특징
- ✅ Hot Reload: 코드 변경 시 자동 반영
- ✅ 볼륨 마운트: 실시간 개발
- ✅ 디버그 모드: 상세 로그 출력
- ✅ 빠른 재시작: Docker 재빌드 불필요
🔥 Hot Reload 상세 가이드
✅ 바로 반영되는 것들 (즉시 Hot Reload)
백엔드 (Node.js + TypeScript):
backend-node/src/controllers/*.ts # API 컨트롤러 수정
backend-node/src/services/*.ts # 비즈니스 로직 수정
backend-node/src/routes/*.ts # 라우터 설정 수정
backend-node/src/middleware/*.ts # 미들웨어 수정
backend-node/src/utils/*.ts # 유틸리티 함수 수정
backend-node/src/types/*.ts # 타입 정의 수정
backend-node/src/config/*.ts # 애플리케이션 설정
→ 반영 시간: 1-2초 (nodemon 자동 재시작)
프론트엔드 (Next.js + TypeScript):
frontend/components/**/*.tsx # React 컴포넌트 수정
frontend/app/**/*.tsx # 페이지 컴포넌트 수정
frontend/lib/**/*.ts # 유틸리티 함수 수정
frontend/hooks/*.ts # 커스텀 훅 수정
frontend/types/*.ts # 타입 정의 수정
frontend/constants/*.ts # 상수 정의 수정
CSS/SCSS 파일 수정 # 스타일 변경
→ 반영 시간: 즉시 (Fast Refresh)
❌ Docker 재시작이 필요한 것들
의존성 변경:
package.json 수정 # 새 패키지 추가/제거
npm install / npm uninstall # 패키지 설치/제거
package-lock.json 변경 # 의존성 잠금 파일
데이터베이스 관련:
db/ilshin.pgsql # DB 스키마 파일 변경
db/00-create-roles.sh # DB 초기화 스크립트 변경
# SQL 마이그레이션은 직접 실행
설정 파일:
next.config.mjs # Next.js 설정
tsconfig.json # TypeScript 설정
tailwind.config.js # Tailwind CSS 설정
.env / .env.local # 환경 변수
eslint.config.mjs # ESLint 설정
Docker 관련:
Dockerfile / Dockerfile.dev # 도커 파일 수정
docker-compose.*.yml # Docker Compose 설정
.dockerignore # Docker 무시 파일
🔄 재시작 방법
특정 서비스만 재시작:
# 백엔드만 재시작
docker-compose -f docker-compose.backend.mac.yml restart backend
# 프론트엔드만 재시작
docker-compose -f docker-compose.frontend.mac.yml restart frontend
전체 재빌드:
# 의존성 변경 시 (rebuild 필요)
docker-compose -f docker-compose.backend.mac.yml up --build -d
docker-compose -f docker-compose.frontend.mac.yml up --build -d
🚀 운영 환경 (Linux)
운영 서버 배포
# Linux 서버에서 실행
./scripts/prod/start-all-linux.sh
개별 서비스 시작 (운영용)
# 직접 Docker Compose 사용
docker-compose -f docker/prod/docker-compose.backend.prod.yml up -d
docker-compose -f docker/prod/docker-compose.frontend.prod.yml up -d
운영용 Docker Compose 파일들
-
docker/prod/docker-compose.backend.prod.yml- 운영용 백엔드- Dockerfile:
docker/prod/backend.Dockerfile(프로덕션 최적화) - 포트:
8080 - 환경:
NODE_ENV=production
- Dockerfile:
-
docker/prod/docker-compose.frontend.prod.yml- 운영용 프론트엔드- Dockerfile:
docker/prod/frontend.Dockerfile(프로덕션 최적화) - 포트:
3000 - 환경: 최적화된 빌드
- Dockerfile:
운영 환경 특징
- ✅ 최적화된 빌드: 프로덕션용 이미지
- ✅ 보안 강화: 운영 환경 설정
- ✅ 성능 최적화: 이미지 크기 최소화
- ✅ 안정성: 프로덕션 모드
📁 프로젝트 구조
ERP-node/
├── 🔧 개발용 (Mac)
│ ├── start-all-parallel.sh # 병렬 시작 (추천)
│ ├── start-backend.sh # 백엔드만
│ ├── start-frontend.sh # 프론트엔드만
│ ├── docker-compose.backend.mac.yml # Mac 개발용 백엔드
│ └── docker-compose.frontend.mac.yml# Mac 개발용 프론트엔드
│
├── 🚀 운영용 (Linux)
│ ├── start-all-separated-linux.sh # Linux 운영용
│ ├── start-backend-linux.sh # 백엔드만 (Linux)
│ ├── start-frontend-linux.sh # 프론트엔드만 (Linux)
│ ├── docker-compose.backend.prod.yml# 운영용 백엔드
│ └── docker-compose.frontend.prod.yml# 운영용 프론트엔드
│
├── 📁 백엔드
│ ├── backend-node/
│ │ ├── Dockerfile # 프로덕션용
│ │ └── Dockerfile.dev # 개발용
│ └── src/, database/, package.json...
│
├── 📁 프론트엔드
│ ├── frontend/
│ │ ├── Dockerfile # 프로덕션용
│ │ └── Dockerfile.dev # 개발용
│ └── app/, components/, hooks/...
│
└── 🗂️ 기타
├── db/00-create-roles.sh # DB 초기화
└── README.md, DOCKER.md...
🌐 접속 정보
개발 환경
- 프론트엔드: http://localhost:3000
- 백엔드 API: http://localhost:8080
- 전체 앱: http://localhost:9771 (프록시 설정 시)
운영 환경
- 서버 IP에 따라 다름 (Linux 서버 설정 확인)
🛠️ 주요 명령어
Docker 컨테이너 관리
# 실행 중인 컨테이너 확인
docker ps
# 모든 컨테이너 중지
docker stop $(docker ps -q)
# 사용하지 않는 컨테이너/이미지 정리
docker system prune -f
로그 확인
# 백엔드 로그
docker logs pms-backend-mac -f # 개발용
docker logs pms-backend-prod -f # 운영용
# 프론트엔드 로그
docker logs pms-frontend-mac -f # 개발용
docker logs pms-frontend-prod -f # 운영용
컨테이너 내부 접속
# 백엔드 컨테이너 접속
docker exec -it pms-backend-mac bash # 개발용
docker exec -it pms-backend-prod bash # 운영용
# 프론트엔드 컨테이너 접속
docker exec -it pms-frontend-mac sh # 개발용
docker exec -it pms-frontend-prod sh # 운영용
🚨 트러블슈팅
자주 발생하는 문제들
1. 포트 충돌
# 포트 사용 중인 프로세스 확인
lsof -i :8080
lsof -i :3000
# 프로세스 종료
kill -9 <PID>
2. Docker 빌드 오류
# Docker 캐시 클리어 후 재빌드
docker builder prune -f
./start-all-parallel.sh
3. 볼륨 마운트 문제 (개발환경)
# Docker Desktop 설정에서 파일 공유 확인
# Docker Desktop > Settings > Resources > File Sharing
4. 데이터베이스 연결 오류
# 데이터베이스 초기화
./db/00-create-roles.sh
# PostgreSQL 연결 확인
docker exec -it <db-container> psql -U postgres
Warning 메시지들 (무시해도 됨)
WARN: the attribute `version` is obsolete
Network Error (일시적)
이런 메시지들은 Docker Compose 버전 차이로 발생하며, 기능에는 영향 없습니다.
📈 성능 최적화
개발 환경 최적화
- ✅ 병렬 빌드:
start-all-parallel.sh사용 - ✅ Docker 캐시:
--no-cache제거됨 - ✅ npm 최적화:
--prefer-offline --no-audit적용
운영 환경 최적화
- ✅ 멀티 스테이지 빌드: Dockerfile 최적화
- ✅ 이미지 크기 최소화: Alpine Linux 기반
- ✅ 의존성 캐시: 레이어 캐싱 활용
🔄 업데이트 가이드
개발 환경 업데이트
# 코드 변경 시 (Hot Reload 자동 반영)
# 별도 작업 불필요
# 의존성 변경 시
docker-compose -f docker-compose.backend.mac.yml up --build -d
운영 환경 업데이트
# 새로운 버전 배포
./start-all-separated-linux.sh
📞 지원
문제 발생 시:
- 이 문서의 트러블슈팅 섹션 확인
- Docker 로그 확인 (
docker logs <container-name>) - 개발팀에 문의
프로젝트 관련:
- Node.js 백엔드:
backend-node/디렉토리 - Next.js 프론트엔드:
frontend/디렉토리 - 데이터베이스: PostgreSQL (JNDI 설정)
버전: 1.0.0
마지막 업데이트: 2024년 12월 28일
작성자: PLM 개발팀