본문 바로가기

SHUTDOWN

[Golang] 자식 프로세스 생명 주기 관리 (Shutdown) 지난 포스팅에서는 간단한 서비스 Shutdown 로직에 대해서, 그 중에서 단일 프로세스 종료 절차 구현에 대해서 알아보았습니다.이번에는 자식 프로세스(Child Process)를 관리하는 부모 프로세스의 종료 구현에 대해서 알아보려고 합니다. 1. 프로세스 종료 방법자식 프로세스가 있는 부모 프로세스는 반드시 자식에게 종료가 완료 될 수 있는 시간을 제공해 주어야 합니다.이유는 만약 상위 부모 프로세스만 먼저 종료가 되고, 자식 프로세스는 종료가 올바르게 되었는지 아니었는지 확인이 제대로 안되면좀비 프로세스가 되어 서버 리소스를 계속 사용할 수 있습니다. 2. 3단계 에스컬레이션Sigterm : 자식에게 종료 신호를 보냅니다.Timout : 자식에게 종료 잘 될 수 있도록 유예시간을 줍니다.(만약 .. 더보기
[Golang] 서버 종료 로직 구현 (Shutdown) 운영을 하거나 배포 점검을 하다보면 프로세스를 종료해야하는 경우가 있는데, 이때 실행 중인 요청을 강제로 끊어버리면 데이터의 유실이 발생 될 수 있고, 유저의 사용 경험을 안좋게 만들 수 있습니다.이번 포스팅에서는 "Context" 와 "Siganl" 을 활용해서 안전하게 서버 종료하는 방법에 대해서 알아봅시다. 1. 예제 코드 : 기초 (OS 신호 감지)단순 프로그램을 실행하고 종료하는 것이 아니라, 운영체제에서 보내는 종료 신호(SIGINT, SIGTERM)를 통해서 프로그램이 종료 됩니다.func main() { ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop().. 더보기