피드로 돌아가기
44BITSDevOps
원문 읽기
Kamal2에서 점검(maintenance) 모드 활용법
Kamal2의 kamal-proxy 레이어를 활용해 애플리케이션 재시작 없이 503 점검 페이지를 즉시 반환하는 maintenance 모드 구현
AI 요약
Context
기존 시스템에서 점검 작업 시 메인 애플리케이션 서버에서 점검 페이지를 처리해야 했으므로 별도 서버 관리나 로드밸런서 레이어에서의 처리가 필요했다. Kamal2를 사용하는 환경에서는 이러한 복잡성을 프록시 레이어에서 처리할 수 있는 방법이 필요했다.
Technical Solution
- kamal-proxy 레이어에서 maintenance 모드 활성화:
kamal app maintenance명령으로 프록시가 들어오는 요청을 가로채 503 상태코드 반환 - 커스텀 메시지 추가:
--message플래그로 점검 안내 문구를 지정하여 기본 템플릿에 동적 삽입 - 커스텀 503 페이지 구성:
config/deploy.yml의error_pages_path설정 후public/proxy/503.html배포로 프록시에 파일 사전 복사 - Go 템플릿 변수 활용: 커스텀 HTML에
{{ .Message }}변수를 포함시켜 명령어 실행 시 메시지 동적 렌더링 - Health Check 경로 분리: proxy 설정에서 healthcheck 경로를
/up과 같은 전용 경로로 설정하여 maintenance 모드에서 루트 경로 충돌 방지 - 점검 종료:
kamal app live명령으로 maintenance 모드 해제하여 정상 트래픽 복귀
Key Takeaway
Kamal을 사용하는 환경에서 점검 작업은 프록시 레이어에서 애플리케이션 재시작 없이 처리할 수 있으며, 점검 모드와 애플리케이션 상태를 명확히 분리하고 health check 경로를 별도로 구성하는 것이 의도한 동작을 보장하는 핵심이다.
실천 포인트
Kamal2 기반 배포 환경에서 점검 작업이 필요할 때, `kamal app maintenance --message "메시지"` 명령으로 즉시 503 응답을 반환하고, 필요 시 애플리케이션 컨테이너를 선택적으로 정지(`kamal app stop --roles=web`)한 후 작업을 수행하고 `kamal app live`로 복귀하면 다운타임 중 불필요한 트래픽을 차단하면서 명확한 점검 상황을 사용자에게 전달할 수 있다.