[go] 시그널 수신
Golang 어플리케이션에서 시그널을 수신하여 graceful한 종료를 수행하는 방법에 대해 배워보겠습니다.
시그널 핸들링
시스템이 종료될 때 보통 시그널을 보내며, 프로그램은 이러한 시그널을 수신하여 안정적으로 종료되어야 합니다. Golang에서는 os/signal
패키지를 사용하여 시그널을 수신할 수 있습니다.
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func main() {
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
fmt.Println("어플리케이션이 시작되었습니다")
// 시그널 수신 대기
<-c
fmt.Println("시그널이 수신되어 어플리케이션이 종료됩니다")
}
시그널 핸들러
시그널 수신 후 처리해야 하는 작업은 goroutine
을 통해 별도로 처리하는 것이 좋습니다. 이를 위해 select
문을 사용하여 시그널 채널을 대기하고, 시그널을 수신하면 해당 시그널에 따라 작업을 수행합니다.
func main() {
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
done := make(chan bool)
go func() {
s := <-c
fmt.Println("수신된 시그널:", s)
// 추가 작업 수행
done <- true
}()
fmt.Println("어플리케이션이 시작되었습니다")
<-done
fmt.Println("어플리케이션이 종료됩니다")
}
결론
Golang을 사용하여 시그널을 수신하고 graceful한 종료를 처리하는 방법에 대해 살펴보았습니다. 시그널 핸들링은 안정적인 어플리케이션을 구축하는 데 중요한 요소이므로, 이를 고려하여 개발하는 것이 좋습니다.
시그널을 처리함으로써 어플리케이션의 안정성을 향상시키고, 사용자 경험을 향상시킬 수 있습니다.
참고문헌: