[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("시그널 수신됨. 종료 중")
}

위 예제는 SIGINTSIGTERM 시그널을 받아서 프로그램을 종료하는 간단한 방법을 보여줍니다. 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의 시그널 처리 기능을 활용하면 안정적이고 예기치 않은 종료를 처리하는데 도움이 됩니다.

참고 자료


번역 참고 사항