더북(TheBook)

4.4.6 셧다운 후크 사용하기

스프링에서 소멸 콜백의 유일한 단점은 자동으로 호출되지 않는다는 점입니다. 즉, 애플리케이션 종료 전에 반드시 AbstractApplicationContext.destroy()를 호출해야 합니다. 작성하는 애플리케이션이 서블릿으로 작동한다면 간단히 서블릿의 destroy() 메서드에서 destroy()를 호출하면 됩니다. 하지만 단독 실행 가능한 애플리케이션에서라면 이는 그렇게 단순한 작업이 아닙니다. 특히 애플리케이션에서 종료 지점이 여러 곳이라면 destroy() 호출은 더욱 복잡해집니다. 다행히도 해결책이 있습니다. 자바는 애플리케이션을 종료하기 직전에 수행되는 스레드인 “셧다운 후크(Shutdown Hook)”를 제공합니다. 셧다운 후크는 ApplicationContext의 모든 구상 클래스가 상속한 AbstractApplicationContextdestroy() 메서드를 호출하는 가장 좋은 방법입니다. 이 메커니즘의 효과를 보는 가장 쉬운 방법은 AbstractApplicationContextregisterShutdownHook() 메서드를 사용하는 것입니다. 이 메서드를 호출하면 스프링은 내부 JVM 런타임에 셧다운 후크를 등록합니다. 다음 예제에서 빈 선언과 구성은 이전 예제들과 같습니다. 유일한 차이점은 메인 메서드에 있습니다. 메인 메서드에 ctx.registerShutdownHook()를 추가하고 ctx.destroy() 또는 ctx.close() 호출을 삭제합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.