[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한 종료를 처리하는 방법에 대해 살펴보았습니다. 시그널 핸들링은 안정적인 어플리케이션을 구축하는 데 중요한 요소이므로, 이를 고려하여 개발하는 것이 좋습니다.

시그널을 처리함으로써 어플리케이션의 안정성을 향상시키고, 사용자 경험을 향상시킬 수 있습니다.

참고문헌: