Nginx 업스트림 기반 롤링 배포: 무중단 서비스 구축을 위한 심층 분석 및 스크립트 해부

🤖 AI 추천

이 콘텐츠는 Nginx를 활용한 무중단 롤링 배포 구현 경험을 공유하며, 관련 스크립트의 각 단계별 작동 원리를 상세히 설명합니다. 따라서 웹 서비스 운영 환경에서 롤링 배포 전략을 도입하거나 개선하려는 백엔드 개발자 및 DevOps 엔지니어에게 매우 유용합니다. 특히 CI/CD 파이프라인 구축 경험이 있거나, 시스템의 안정성과 가용성을 높이는 데 관심 있는 개발자들에게 실질적인 도움을 줄 수 있습니다.

🔖 주요 키워드

Nginx 업스트림 기반 롤링 배포: 무중단 서비스 구축을 위한 심층 분석 및 스크립트 해부

핵심 기술: 본 글은 Nginx의 업스트림 로드 밸런싱 기능을 활용하여 롤링 방식의 무중단 배포를 구현하는 과정을 상세히 설명하고, 이를 자동화하는 쉘 스크립트의 각 부분을 분석합니다. 서비스 중단 없는 배포를 목표로 하며, 사용자 중심의 안정적인 서비스 제공에 초점을 맞춥니다.

기술적 세부사항:
* 무중단 배포 기법 소개: 블루-그린 배포, 카나리 배포, 롤링 배포의 개념을 간략히 설명하며, 본 글에서 다룰 롤링 배포 방식을 강조합니다.
* 배포 스크립트 설정: WAS IP 목록, WAR 파일 경로, 원격 접속 정보(사용자, 경로, 키), Nginx 제어 스크립트 경로, 배포/롤백 명령어 등 배포 자동화에 필요한 핵심 설정 변수를 정의합니다.
* 주요 함수 및 로직:
* get_current_time(): 로그 기록을 위한 현재 시간 포맷팅.
* check_actuator_health(): 배포 후 애플리케이션의 헬스 체크를 통해 정상 작동 여부 확인.
* wait_for_connections_to_close(): WAS 인스턴스에서 진행 중인 연결이 모두 종료될 때까지 대기 (연결 드레인).
* backup_war_file(): 배포 전 기존 WAR 파일 백업.
* deploy_tomcat(): Nginx 업스트림에서 WAS 분리, 연결 드레인, WAR 전송, 원격 배포 스크립트 실행, 헬스 체크, Nginx 재등록 등 배포의 핵심 단계를 수행하는 함수.
* Nginx 업스트림 제어: nginx_upstream_control.sh 스크립트를 통해 WAS 인스턴스를 Nginx 설정에서 동적으로 활성화(enable) 또는 비활성화(disable)하는 과정을 설명하며, sed 명령어를 사용하여 설정을 변경하고 nginx -tsystemctl reload nginx로 적용합니다.
* 단계별 배포 프로세스: 각 WAS 인스턴스를 순차적으로 Nginx에서 분리 → 연결 드레인 → WAR 파일 백업 → 새 WAR 파일 전송 → 원격 배포 스크립트 실행 → 헬스 체크 → Nginx에 재등록하는 일련의 과정을 상세히 기술합니다.
* 롤백 메커니즘: 배포 스크립트 실행 중 오류 발생 시 자동으로 롤백 스크립트를 실행하고 Nginx에 WAS를 재등록하는 안전 장치를 포함합니다.

개발 임팩트:
* 서비스 중단 없는 안정적인 소프트웨어 배포를 가능하게 하여 사용자 경험을 향상시킵니다.
* 롤링 배포 자동화를 통해 배포 프로세스의 효율성을 높이고 휴먼 에러를 줄입니다.
* 실패 시 롤백 기능을 통해 시스템 복구 시간을 단축하고 안정성을 확보합니다.
* Nginx 설정을 동적으로 변경하여 로드 밸런싱 그룹 관리를 자동화합니다.

📚 관련 자료