티스토리 뷰

Overview

스프링 부트에서 graceful shutdown을 사용하는 방법을 소개합니다.

먼저 graceful shutdown은 애플리케이션 서버 종료시 새로운 요청은 받지 않고 기존 요청을 완전히 처리한 이후 서버를 종료하는 것을 말합니다.

스프링 부트 2.3 이상 버전부터 동작합니다.

참고로 이전 버전에서는 응답을 보내기 전에 서버를 종료했을 경우 클라이언트가 응답을 받지 못합니다.

설정 파일

설정 파일 수정만으로 간단히 해당 기능을 구현할 수 있습니다.

서블릿 기반 MVC와 reactive stream 기반 webflux에서도 동작합니다.

타임아웃 설정도 추가할 수 있습니다.

단, 요청을 처리하는 시간보다 타임아웃으로 설정한 시간이 짧을 경우 클라이언트는 응답을 받을 수 없습니다.

이 경우 graceful shutdown을 적용하는 게 의미가 없어지니 적절한 시간으로 설정할 필요가 있습니다.

application.properties

server.shutdown=graceful
spring.lifecycle.timeout-per-shutdown-phase=20s

application.yml

server:
  shutdown: graceful
spring:
  lifecycle:
    timeout-per-shutdown-phase: 20s
댓글