PHpullh
학습 라이브러리/Go/에러 래핑 패턴

GO · 에러처리

에러 래핑 패턴

에러에 컨텍스트를 추가하며 래핑하는 패턴. 호출 체인을 따라 에러 원인을 추적할 수 있습니다.

에러처리중급error-wrappingchaincontextdebugging

핵심 설명

에러에 컨텍스트를 추가하며 래핑하는 패턴. 호출 체인을 따라 에러 원인을 추적할 수 있습니다.

Go code

package main

import (
	"errors"
	"fmt"
)

var ErrDB = errors.New("데이터베이스 오류")

func queryDB() error {
	return ErrDB
}

func getUser(id int) error {
	if err := queryDB(); err != nil {
		return fmt.Errorf("getUser(%d): %w", id, err)
	}
	return nil
}

func handleRequest() error {
	if err := getUser(42); err != nil {
		return fmt.Errorf("handleRequest: %w", err)
	}
	return nil
}

func main() {
	err := handleRequest()
	fmt.Println(err)
	// handleRequest: getUser(42): 데이터베이스 오류

	// 체인을 따라 원인 추적
	fmt.Println(errors.Is(err, ErrDB)) // true

	// Unwrap 체인
	for err != nil {
		fmt.Println("→", err)
		err = errors.Unwrap(err)
	}
}

학습 팁

에러 메시지에 함수명과 핵심 인자를 포함하면 로그만으로 문제를 추적할 수 있습니다.

주의할 점

에러 래핑 시 민감한 정보(비밀번호, 토큰 등)를 포함하지 마세요. 로그에 노출될 수 있습니다.

자주 묻는 질문

에러 래핑 패턴란 무엇인가요?

에러에 컨텍스트를 추가하며 래핑하는 패턴. 호출 체인을 따라 에러 원인을 추적할 수 있습니다.

에러 래핑 패턴 학습 시 주의할 점은 무엇인가요?

에러 래핑 시 민감한 정보(비밀번호, 토큰 등)를 포함하지 마세요. 로그에 노출될 수 있습니다.