[go] 시그널 처리 방식
Go 언어에서는 시스템 시그널을 처리하는 데 유용한 구조체와 함수를 제공합니다. 시그널은 프로세스에게 예외 상황을 처리할 기회를 제공하며, 예기치 않은 이벤트를 처리하거나 프로세스를 제어하는데 사용됩니다.
시그널 핸들링
Go 언어에서 시그널을 처리하기 위해 os/signal
패키지를 사용합니다. 해당 패키지에는 시그널을 받고 처리하는 데 사용되는 os/signal.Notify
함수가 포함되어 있습니다.
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func main() {
signalChannel := make(chan os.Signal, 1)
signal.Notify(signalChannel, syscall.SIGINT, syscall.SIGTERM)
fmt.Println("프로그램 실행 중")
<-signalChannel
fmt.Println("시그널 수신됨. 종료 중")
}
위 예제는 SIGINT
와 SIGTERM
시그널을 받아서 프로그램을 종료하는 간단한 방법을 보여줍니다. os/signal.Notify
함수는 프로그램이 특정 시그널을 수신할 때 실행해야 할 동작을 정의하는데 사용됩니다.
시그널 핸들러 등록
Go 언어에서는 os/signal
패키지를 사용하여 시그널 핸들러를 등록할 수 있습니다.
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func signalHandler(sig os.Signal) {
fmt.Println("시그널 수신:", sig)
}
func main() {
signal.Notify(signalChannel, syscall.SIGINT, syscall.SIGTERM)
fmt.Println("프로그램 실행 중")
go func() {
for {
sig := <-signalChannel
signalHandler(sig)
}
}()
// 프로그램 로직 실행
// ...
}
위 예제는 signalHandler
함수를 통해 시그널을 받아서 처리하는 방법을 보여줍니다. os/signal.Notify
함수를 통해 특정 시그널을 받았을 때 실행시킬 함수를 정의할 수 있습니다.
시그널을 처리하는 방법은 실제 애플리케이션에 따라 달라질 수 있지만, Go의 시그널 처리 기능을 활용하면 안정적이고 예기치 않은 종료를 처리하는데 도움이 됩니다.
참고 자료
번역 참고 사항
os/signal
: os/signal 패키지signal.Notify
: signal.Notify 함수SIGINT
: SIGINT 시그널