왜 graceful shutdown은 중요할까
graceful shutdown은 모든 시스템에서 다 중요한 것은 아니다.
데이터 무결성, 사용자 경험, 시스템 안정성을 보장해야 하는 환경에서 특히 중요하다고 보면 된다.
대표적으로 다음과 같은 시스템들이 있다.
- 웹 서버 및 API 서버
- 데이터베이스
- 메시지 브로커
- 데이터 집계 시스템
웹 서버 및 API 서버
클라우드와 컨테이너화된 환경에서는 애플리케이션 인스턴스가 빈번하게 스케일 업/다운되거나 교체된다.
Graceful Shutdown은 컨테이너가 종료될 때 요청을 안전하게 완료하고, 리소스를 정리하여 안정적인 서비스를 유지할 수 있다.
데이터베이스
데이터베이스는 트랜잭션 처리와 데이터 무결성을 보장해야 하므로, 갑작스러운 종료는 치명적인 오류를 초래할 수 있다. Graceful Shutdown을 통해 데이터베이스 연결을 안전하게 종료하고, 진행 중인 트랜잭션을 커밋하거나 롤백하여 데이터 손실을 방지해야 한다. 특히, 대규모 데이터베이스 시스템에서는 정리되지 않은 연결이 다른 시스템에 부하를 줄 수 있으므로 이를 방지하는 것이 중요하다.
메시지 브로커
메시지 브로커는 대규모 트래픽과 데이터를 처리하며, 종료 중 처리되지 않은 메시지가 유실되거나 중복 소비될 가능성이 있다. Graceful Shutdown은 메시지를 안전하게 소비(consume)하거나 커밋하고, 브로커와의 연결을 종료한다. 이는 메시지 큐(Kafka, RabbitMQ, Redis 등)의 데이터를 일관되게 유지하는 데 필수적이다.
데이터 집계 시스템
로그 수집기, 스트리밍 데이터 파이프라인, 배치 처리 시스템 등 데이터 집계 시스템은 대규모 데이터를 처리 중에 종료되면 중단된 작업의 상태를 잃거나 데이터 손실이 발생할 수 있다. Graceful Shutdown은 작업 상태를 체크포인트에 저장하거나, 진행 중인 배치 작업을 안전하게 마무리하여 데이터를 보존해야 한다.