Kamal의 새로운 유지보수 모드 기능 활용 가이드

Putting your app in maintenance mode with Kamal

작성자
발행일
2025년 05월 11일

핵심 요약

  • 1 Kamal에 새로 추가된 유지보수 모드 기능을 통해 애플리케이션을 안전하게 오프라인으로 전환하고 503 페이지를 제공할 수 있습니다.
  • 2 `kamal app maintenance` 명령으로 유지보수 모드를 시작하고, `drain_timeout` 설정 및 사용자 정의 503 페이지를 통해 경험을 맞춤 설정할 수 있습니다.
  • 3 `error_pages_path`를 지정하여 정적 503.html 파일을 서버에 배포하고, `{{ .Message }}` 템플릿 태그로 동적인 메시지를 표시할 수 있습니다.

도입

애플리케이션 운영 중 데이터베이스 마이그레이션이나 주요 설정 변경과 같은 유지보수 작업은 필수적입니다. 이 과정에서 사용자에게 500 에러를 노출하지 않고 서비스 중단을 알리는 것은 중요합니다. 최근 Kamal에 추가된 유지보수 모드 기능은 이러한 필요성을 충족시키며, 애플리케이션을 안전하게 오프라인으로 전환하고 사용자에게 적절한 503 서비스 이용 불가 페이지를 제공하는 방법을 제시합니다. 이 기능은 애플리케이션 업그레이드와 같은 계획된 중단 시나리오에 완벽하게 대응합니다.

Kamal의 유지보수 모드는 kamal-proxy를 통해 구현되며, kamal app maintenance 명령으로 활성화됩니다. 이 명령은 kamal-proxy에게 애플리케이션으로의 트래픽 전송을 중단하도록 지시하여 기본 503 페이지를 반환하게 합니다.

유지보수 모드 활성화 및 설정

  • 명령: kamal app maintenance를 실행하면 docker exec kamal-proxy kamal-proxy stop [앱 이름]이 호출됩니다.

  • 드레인 타임아웃 (drain_timeout): config/deploy.yml에서 설정하여 진행 중인 요청 완료 시간을 지정합니다.

  • 사용자 정의 메시지: kamal app maintenance --message "메시지"로 503 페이지에 표시될 텍스트를 직접 지정할 수 있습니다.

사용자 정의 503 에러 페이지

Kamal은 사용자 정의 503 페이지 제공을 지원합니다.

  • 경로 지정: config/deploy.ymlerror_pages_path: public과 같이 503.html 파일 경로를 지정합니다.

  • 페이지 배포: error_pages_path 설정 후 배포 시 Kamal은 해당 경로 내의 4xx.html, 5xx.html 파일을 서버에 업로드합니다.

  • 동적 메시지: 사용자 정의 503.html 파일 내에 {{ if .Message }}{{ .Message }}{{ else }}기본 메시지{{ end }} 템플릿 태그를 사용하여 동적인 메시지를 표시할 수 있습니다.

유지보수 모드 해제

  • 작업 완료 후 kamal app live 명령으로 애플리케이션을 다시 온라인 상태로 전환할 수 있습니다. 이 명령은 kamal-proxy에게 트래픽 전송을 재개하도록 지시합니다.

결론

Kamal의 새로운 유지보수 모드 기능은 애플리케이션 배포 및 운영의 안정성을 크게 향상시킵니다. 간편한 명령으로 서비스를 오프라인 전환하고, `drain_timeout` 설정 및 사용자 정의 503 페이지를 통해 유연한 사용자 경험을 제공할 수 있습니다. 특히 동적 메시지 기능을 활용하면 유지보수 상황에 대한 명확한 소통이 가능해집니다. 이 기능은 아직 공식 릴리스 전이지만, `Gemfile`에서 `basecamp/kamal`을 직접 참조하여 지금 바로 활용할 수 있어, 개발자들은 더욱 효율적인 배포 전략을 수립할 수 있게 됩니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!