#!/bin/bash # 시작 시간 기록 START_TIME=$(date +%s) START_TIME_FORMATTED=$(date '+%Y-%m-%d %H:%M:%S') echo "============================================" echo "WACE 솔루션 - 전체 서비스 시작 (OrbStack)" echo "============================================" echo "시작 시간: $START_TIME_FORMATTED" # OrbStack 실행 확인 if ! docker info &>/dev/null; then echo "Docker 엔진이 실행되지 않았습니다. OrbStack을 시작합니다..." open -a OrbStack echo "OrbStack 시작 대기 중..." for i in $(seq 1 30); do if docker info &>/dev/null; then echo "OrbStack 준비 완료" break fi sleep 1 done if ! docker info &>/dev/null; then echo "OrbStack 시작 실패. 수동으로 OrbStack을 실행해주세요." exit 1 fi fi COMPOSE_BACKEND="docker compose -f docker/dev/docker-compose.backend.mac.yml" COMPOSE_FRONTEND="docker compose -f docker/dev/docker-compose.frontend.mac.yml" echo "" echo "============================================" echo "0. 기존 컨테이너 정리 중..." echo "============================================" $COMPOSE_BACKEND down --remove-orphans 2>/dev/null $COMPOSE_FRONTEND down --remove-orphans 2>/dev/null docker network rm pms-network 2>/dev/null echo "정리 완료" echo "" # 병렬 빌드 시작 PARALLEL_START=$(date +%s) echo "============================================" echo "1. 병렬 빌드 시작 (백엔드 + 프론트엔드)" echo "============================================" # 백엔드 빌드 (백그라운드) echo "[백엔드] 빌드 시작..." ( $COMPOSE_BACKEND build 2>&1 | sed 's/^/ [BE] /' echo "[백엔드] 빌드 완료" ) & BACKEND_PID=$! # 프론트엔드 빌드 (백그라운드) echo "[프론트엔드] 빌드 시작..." ( $COMPOSE_FRONTEND build 2>&1 | sed 's/^/ [FE] /' echo "[프론트엔드] 빌드 완료" ) & FRONTEND_PID=$! echo "병렬 빌드 진행 중..." wait $BACKEND_PID BACKEND_EXIT=$? wait $FRONTEND_PID FRONTEND_EXIT=$? if [ $BACKEND_EXIT -ne 0 ] || [ $FRONTEND_EXIT -ne 0 ]; then echo "빌드 실패! 로그를 확인해주세요." [ $BACKEND_EXIT -ne 0 ] && echo " - 백엔드 빌드 실패 (exit: $BACKEND_EXIT)" [ $FRONTEND_EXIT -ne 0 ] && echo " - 프론트엔드 빌드 실패 (exit: $FRONTEND_EXIT)" exit 1 fi PARALLEL_END=$(date +%s) PARALLEL_DURATION=$((PARALLEL_END - PARALLEL_START)) echo "병렬 빌드 완료 (${PARALLEL_DURATION}초 소요)" # 서비스 시작 echo "" echo "============================================" echo "2. 서비스 시작 중..." echo "============================================" SERVICE_START=$(date +%s) # 백엔드 시작 echo "[백엔드] 서비스 시작..." $COMPOSE_BACKEND up -d # 프론트엔드 시작 echo "[프론트엔드] 서비스 시작..." $COMPOSE_FRONTEND up -d echo "" echo "서비스 안정화 대기 중... (8초)" sleep 8 SERVICE_END=$(date +%s) SERVICE_DURATION=$((SERVICE_END - SERVICE_START)) echo "서비스 시작 완료 (${SERVICE_DURATION}초 소요)" # 컨테이너 상태 확인 echo "" echo "============================================" echo "3. 컨테이너 상태 확인" echo "============================================" docker ps --filter "name=pms-" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" echo "============================================" echo "모든 서비스가 시작되었습니다!" echo "============================================" echo "" echo "[DATABASE] PostgreSQL: 39.117.244.52:11132" echo "[BACKEND] Node.js API: http://localhost:8080/api" echo "[FRONTEND] Next.js: http://localhost:9771" echo "" echo "서비스 상태 확인:" echo " 백엔드: $COMPOSE_BACKEND ps" echo " 프론트엔드: $COMPOSE_FRONTEND ps" echo "" echo "로그 확인:" echo " 백엔드: $COMPOSE_BACKEND logs -f" echo " 프론트엔드: $COMPOSE_FRONTEND logs -f" echo "" echo "서비스 중지:" echo " 백엔드: $COMPOSE_BACKEND down" echo " 프론트엔드: $COMPOSE_FRONTEND down" echo " 전체: ./stop-all.sh" echo "" 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 "종료 시간: $END_TIME_FORMATTED" echo "총 소요 시간: ${MINUTES}분 ${SECONDS}초" echo "" echo "단계별 소요 시간:" echo " 빌드: ${PARALLEL_DURATION}초" echo " 시작: ${SERVICE_DURATION}초" echo "============================================" if [ -t 0 ]; then read -p "계속하려면 아무 키나 누르세요..." fi