피드로 돌아가기
Zero-Downtime Deployments for a React + Node App
Dev.toDev.to
DevOps

Atomic Symlink 및 PM2 Cluster 기반의 Zero-Downtime 배포 아키텍처 구현

Zero-Downtime Deployments for a React + Node App

Sohana Akbar2026년 5월 14일3intermediate

Context

기존 단순 재시작 방식의 배포 시 5~30초간 502 Bad Gateway 및 서비스 중단 발생. 요청 처리 중인 프로세스의 강제 종료로 인한 데이터 유실 및 사용자 경험 저하가 핵심 문제임.

Technical Solution

  • Staging Directory 기반의 버전별 빌드 격리를 통한 런타임 파일 오염 방지
  • PM2 Clustering의 Rolling Restart 방식을 적용하여 최소 1개 이상의 워커 프로세스를 상시 유지하는 구조 설계
  • Nginx의 Atomic Symlink Swap 기법을 활용하여 Frontend 정적 자산 교체 시간을 즉시성으로 최적화
  • SIGINT 시그널 핸들러 구현을 통한 Graceful Shutdown 처리로 In-flight Request의 안정적 완료 보장
  • Redis 기반 외부 세션 저장소 도입을 통한 프로세스 재시작 시 사용자 인증 상태 유지
  • 하위 호환성을 보장하는 Backward Compatible Database Migration 전략 수립

- React 빌드 결과물을 타임스탬프 기반 폴더에 저장 후 ln -sfn 명령어로 스왑하는지 확인 - Node.js 서버에 SIGINT 이벤트 리스너를 등록하여 server.close()를 명시적으로 호출하는지 검토 - PM2 실행 시 -i max 옵션을 통해 CPU 코어 기반 클러스터링을 적용했는지 확인 - 세션 관리 시 In-memory 방식을 지양하고 Redis 등 분산 저장소를 사용하는지 체크 - 배포 전 데이터베이스 스키마 변경이 이전 버전 코드와 호환되는지 검증

원문 읽기