[go] 에러 발생 시의 데이터 로깅 및 디버깅 방법
Go 언어로 개발을 진행하다 보면 어떤 상황에서는 에러가 발생할 수 있습니다. 이때, 어떻게 에러를 적절히 로깅하고 디버깅할지에 대한 방법을 알아보겠습니다.
에러 처리하기
Go 언어에서는 에러를 처리하는데 내장된 기능을 제공합니다. 에러가 발생했을 때, error
타입을 반환하는 함수를 사용하거나, errors.New()
함수로 새로운 에러를 생성할 수 있습니다.
import "errors"
func divide(x, y int) (int, error) {
if y == 0 {
return 0, errors.New("division by zero")
}
return x / y, nil
}
위의 예시에서는 divide
함수에서 두 번째 인자가 0일 때 에러를 반환하도록 구현되어 있습니다.
에러 로깅하기
에러가 발생했을 때, 로깅을 통해 디버깅에 도움이 되는 정보를 기록할 수 있습니다. Go 언어에서는 표준 라이브러리인 log
나 외부 라이브러리인 logrus
등을 사용해서 로깅을 할 수 있습니다.
import (
"log"
"github.com/sirupsen/logrus"
)
func main() {
// 표준 라이브러리 사용
err := someOperation()
if err != nil {
log.Println("에러 발생: ", err)
}
// 외부 라이브러리 logrus 사용
logrus.WithFields(logrus.Fields{
"error": err,
}).Error("에러 발생")
}
위 코드에서는 각각의 방식으로 에러를 로깅하는 예시를 보여주고 있습니다.
스택 트레이스 기록하기
에러가 발생한 곳을 추적하기 위해 스택 트레이스를 로깅하는 것이 유용할 수 있습니다. Go 언어에서는 github.com/pkg/errors
라이브러리를 사용하면 스택 트레이스를 기록할 수 있습니다.
import (
"github.com/pkg/errors"
)
func someOperation() error {
err := someOtherOperation()
if err != nil {
return errors.Wrap(err, "에러 발생")
}
return nil
}
위의 코드에서는 errors.Wrap()
함수를 사용하여 스택 트레이스를 추가로 기록하고 있습니다.
이러한 방법들을 통해 Go 언어에서의 에러 처리와 디버깅을 보다 효과적으로 할 수 있습니다.
참고 자료
- Go 언어 공식 문서: Errors
- log 패키지: Go Language Spec
- logrus 패키지: Logrus Documentation
언제나 도움이 되는 정보를 찾아보는 것이 중요하니, 위의 참고 자료들을 통해 깊이 있는 내용을 공부해보시기를 권장드립니다.