#!/bin/bash # 스크립트 위치에서 프로젝트 루트로 이동 cd "$(dirname "$0")/../.." || exit 1 # 시작 시간 기록 START_TIME=$(date +%s) START_TIME_FORMATTED=$(date '+%Y-%m-%d %H:%M:%S') echo "" echo "============================================" echo "WACE 솔루션 - 전체 서비스 시작 (병렬 최적화) - Linux" echo "============================================" echo "[시작 시간] $START_TIME_FORMATTED" echo "" # Docker 확인 echo "[1/5] Docker 상태 확인 중..." if ! docker --version >/dev/null 2>&1; then echo "[ERROR] Docker가 설치되지 않았거나 실행 중이 아닙니다!" exit 1 fi echo "[OK] Docker 환경 확인 완료" echo "" # docker compose vs docker-compose 자동 감지 if docker compose version >/dev/null 2>&1; then DC="docker compose" else DC="docker-compose" fi BACKEND_COMPOSE="docker/dev/docker-compose.backend.linux.yml" FRONTEND_COMPOSE="docker/dev/docker-compose.frontend.linux.yml" # 기존 컨테이너 정리 echo "[2/5] 기존 컨테이너 정리 중..." docker rm -f pms-backend-linux pms-frontend-linux 2>/dev/null || true docker network rm pms-network 2>/dev/null || true docker network create pms-network 2>/dev/null || true echo "[OK] 컨테이너 정리 완료" echo "" # 병렬 빌드 시작 PARALLEL_START=$(date +%s) echo "[3/5] 이미지 빌드 중... (백엔드 + 프론트엔드 병렬)" echo "" # 백엔드 빌드 (백그라운드) ( $DC -f "$BACKEND_COMPOSE" build 2>&1 ) > /tmp/pms-backend-build.log 2>&1 & BACKEND_BUILD_PID=$! # 프론트엔드 빌드 (백그라운드) ( $DC -f "$FRONTEND_COMPOSE" build 2>&1 ) > /tmp/pms-frontend-build.log 2>&1 & FRONTEND_BUILD_PID=$! echo " 백엔드 빌드 진행 중... (PID: $BACKEND_BUILD_PID)" echo " 프론트엔드 빌드 진행 중... (PID: $FRONTEND_BUILD_PID)" echo "" # 빌드 완료 대기 wait $BACKEND_BUILD_PID BACKEND_BUILD_RESULT=$? wait $FRONTEND_BUILD_PID FRONTEND_BUILD_RESULT=$? # 빌드 결과 확인 BUILD_FAILED=false if [ $BACKEND_BUILD_RESULT -eq 0 ]; then echo "[OK] 백엔드 빌드 완료" else echo "[ERROR] 백엔드 빌드 실패!" cat /tmp/pms-backend-build.log BUILD_FAILED=true fi if [ $FRONTEND_BUILD_RESULT -eq 0 ]; then echo "[OK] 프론트엔드 빌드 완료" else echo "[ERROR] 프론트엔드 빌드 실패!" cat /tmp/pms-frontend-build.log BUILD_FAILED=true fi if [ "$BUILD_FAILED" = true ]; then echo "빌드 실패로 중단합니다." exit 1 fi PARALLEL_END=$(date +%s) PARALLEL_DURATION=$((PARALLEL_END - PARALLEL_START)) echo "[INFO] 빌드 소요 시간: ${PARALLEL_DURATION}초" echo "" # 서비스 시작 SERVICE_START=$(date +%s) echo "[4/5] 서비스 시작 중..." # 기존 서비스 정리 $DC -f "$BACKEND_COMPOSE" down -v 2>/dev/null || true $DC -f "$FRONTEND_COMPOSE" down -v 2>/dev/null || true # 백엔드 시작 echo " 백엔드 서비스 시작..." $DC -f "$BACKEND_COMPOSE" up -d if [ $? -ne 0 ]; then echo "[ERROR] 백엔드 시작 실패!" exit 1 fi # 프론트엔드 시작 echo " 프론트엔드 서비스 시작..." $DC -f "$FRONTEND_COMPOSE" up -d if [ $? -ne 0 ]; then echo "[ERROR] 프론트엔드 시작 실패!" exit 1 fi echo "[OK] 서비스 시작 완료" SERVICE_END=$(date +%s) SERVICE_DURATION=$((SERVICE_END - SERVICE_START)) echo "[INFO] 서비스 시작 소요 시간: ${SERVICE_DURATION}초" echo "" # 안정화 대기 echo "[5/5] 서비스 안정화 대기 중... (10초)" sleep 10 echo "" echo "============================================" echo "[완료] 모든 서비스가 시작되었습니다!" echo "============================================" echo "" echo "[DATABASE] PostgreSQL: http://211.115.91.141:11134" echo "[BACKEND] Node.js API: http://localhost:8080/api" echo "[FRONTEND] Next.js: http://localhost:9771" echo "" echo "[서비스 상태 확인]" echo " $DC -f $BACKEND_COMPOSE ps" echo " $DC -f $FRONTEND_COMPOSE ps" echo "" echo "[로그 확인]" echo " 백엔드: $DC -f $BACKEND_COMPOSE logs -f" echo " 프론트엔드: $DC -f $FRONTEND_COMPOSE logs -f" echo "" echo "[서비스 중지]" echo " $DC -f $BACKEND_COMPOSE down" echo " $DC -f $FRONTEND_COMPOSE down" echo "" # 종료 시간 계산 END_TIME=$(date +%s) END_TIME_FORMATTED=$(date '+%Y-%m-%d %H:%M:%S') DURATION=$((END_TIME - START_TIME)) MINUTES=$((DURATION / 60)) SECONDS=$((DURATION % 60)) echo "============================================" echo "[종료 시간] $END_TIME_FORMATTED" echo "[총 소요 시간] ${MINUTES}분 ${SECONDS}초" echo " - 빌드: ${PARALLEL_DURATION}초" echo " - 서비스 시작: ${SERVICE_DURATION}초" echo "============================================"