Files
stock_chart_site/restart.bat
tkrmagid 96b7afd443 fix(restart.bat): backend/web 만 재시작 (db 제외)
리뷰어 지적: docker compose restart 는 서비스명 생략시 db 까지 같이 재시작한다.
db 까지 같이 내려가면 backend lifespan 부팅 시드가 db healthcheck 와 무관하게
실행돼서 race 로 seed 가 다시 실패할 수 있다 (restart 는 depends_on.condition:
service_healthy 를 지키지 않음). db 는 postgres_data 볼륨에 상태가 영속이라
재시작할 이유도 없음.

추가: 실행중 컨테이너 체크도 backend/web 기준으로 좁힘 — db 만 떠있고
backend 가 down 인 경우 통과되던 버그 수정.
2026-05-21 21:05:57 +09:00

89 lines
3.1 KiB
Batchfile

@echo off
REM stock_chart_site - Windows 재시작 스크립트
REM
REM build.bat 와의 차이:
REM - build.bat: 이미지 재빌드 포함. Dockerfile / pyproject.toml / package*.json /
REM compose 설정 등 의존성/이미지 구성이 바뀌었을 때 사용.
REM - restart.bat: 재빌드 없이 컨테이너만 재시작. backend/app/ 또는 web/app/ 안의
REM 코드만 바뀐 경우. docker-compose.yml 의 바인드 마운트 (./backend:/app,
REM ./web:/app) 덕에 새 코드가 즉시 컨테이너 안에서 보이고, 재시작으로
REM lifespan (부팅 시드 등) 도 다시 돌릴 수 있다.
REM
REM 즉 일반적으로 git pull 후:
REM - pyproject.toml / Dockerfile / package*.json 변경 있음 → build.bat
REM - app/ 코드만 변경 → restart.bat
setlocal enabledelayedexpansion
cd /d "%~dp0"
echo === stock_chart_site restart ===
REM 1) Docker 확인
where docker >nul 2>&1
if errorlevel 1 (
echo [ERROR] docker 명령을 찾을 수 없습니다. Docker Desktop 설치/실행을 확인하세요.
pause
exit /b 1
)
docker info >nul 2>&1
if errorlevel 1 (
echo [ERROR] Docker Desktop이 실행 중이 아닙니다.
pause
exit /b 1
)
REM 2) GPU 감지 (build.bat 과 동일 — compose 파일 조합 일치 위해)
set USE_GPU=0
where nvidia-smi >nul 2>&1
if not errorlevel 1 (
nvidia-smi >nul 2>&1
if not errorlevel 1 set USE_GPU=1
)
if "%USE_GPU%"=="1" (
echo [GPU] NVIDIA GPU detected. Using GPU profile.
set COMPOSE_FILES=-f docker-compose.yml -f docker-compose.gpu.yml
) else (
echo [CPU] NVIDIA GPU not detected. Using CPU profile.
set COMPOSE_FILES=-f docker-compose.yml
)
REM 3) backend/web 컨테이너 살아있는지 확인 — 없으면 build.bat 안내
REM (db 까지 포함해서 세면 db 만 떠있어도 통과돼버려서 부정확)
for /f %%i in ('docker compose %COMPOSE_FILES% ps --status running --quiet backend web 2^>nul ^| find /v /c ""') do set RUN_COUNT=%%i
if "%RUN_COUNT%"=="0" (
echo [INFO] 실행 중인 backend/web 컨테이너가 없습니다. 처음이거나 down 된 상태입니다.
echo build.bat 으로 빌드 + 기동하세요.
pause
exit /b 1
)
REM 4) backend + web 만 재시작 — db 는 건드리지 않음.
REM docker compose restart 는 depends_on.condition: service_healthy 를 지키지 않으므로
REM db 까지 같이 재시작하면 backend lifespan 부팅 시드가 db 준비 전에 실행될 수 있다.
REM db 는 상태 (postgres_data 볼륨) 가 영속이라 재시작할 이유도 없다.
echo.
echo === docker compose restart backend web ===
docker compose %COMPOSE_FILES% restart backend web
if errorlevel 1 (
echo [ERROR] restart 실패.
pause
exit /b 1
)
echo.
echo === 상태 ===
docker compose %COMPOSE_FILES% ps
echo.
echo 접속:
echo Web http://localhost:3000
echo Backend http://localhost:8000/health
echo DB ext http://localhost:8000/health/db
echo.
echo 로그 보기: docker compose logs -f backend
echo 정지: docker compose down
echo.
pause
endlocal