Go Fiber 한글 공식 문서
  • 🙇‍♀️안녕하세요
  • 🏠Home
    • 👋Welcome
    • 📁API
      • 📦Fiber
      • 🚀App
      • 🧠Ctx
      • 📋Constants
      • 🌎Client
      • 📃Log
      • 🧬Middleware
        • Adaptor
        • BasicAuth
        • Cache
        • Compress
        • CORS
        • CSRF
        • EarlyData
        • Encrypt Cookie
        • EnvVar
        • ETag
        • ExpVar
        • Favicon
        • FileSystem
        • Health Check
        • Helmet
        • Idempotency
        • Keyauth
        • Limiter
        • Logger
        • Monitor
        • Pprof
        • Proxy
        • Recover
        • Redirect
        • RequestID
        • Rewrite
        • Session
        • Skip
        • Timeout
    • 📁Guide
      • 🔌Routing
      • 🎭Grouping
      • 📝Templates
      • 🐛Error Handling
      • 🔎Validation
      • 🎣Hooks
      • ⚡Make Fiber Faster
    • 📁Extra
      • 🤔FAQ
      • 📊Benchmarks
  • 🧩Extra
    • 🧬Contrip
      • 👋Welcome
      • Casbin
      • Fgprof
      • Fiberi18n
      • Fibernewrelic
      • Fibersentry
      • Fiberzap
      • Fiberzerolog
      • JWT
      • LoadShed
      • Opafiber
      • Otelfiber
        • Example
      • Paseto
      • README
      • Swagger
      • Websocket
    • 📦Storage
      • 👋Welcome
      • ArangoDB
      • Azure Blob
      • Badger
      • Bbolt
      • Coherence
      • Couchbase
      • DynamoDB
      • Etcd
      • Memcache
      • Memory
      • Minio
      • MongoDB
      • MSSQL
      • MySQL
      • Nats
      • Pebble
      • Postgres
      • Redis
      • Ristretto
      • Rueidis
      • S3
      • ScyllaDb
      • SQLite3
    • 📃Template
      • 👋Welcome
      • Ace
      • Amber
      • Django
      • Handlebars
      • HTML
        • Golang Templates Cheatsheet
      • Jet
      • Mustache
      • Pug
      • Slim
Powered by GitBook
On this page
  • 오류 캐치
  • 기본 오류 핸들러
  • 사용자 정의 오류 핸들러
  1. Home
  2. Guide

Error Handling

PreviousTemplatesNextValidation

Last updated 1 year ago


Fiber는 오류를 핸들러에 반환하여 중앙 집중식 오류 처리를 지원합니다. 이를 통해 외부 서비스에 오류를 기록하거나 클라이언트에 사용자 정의 HTTP 응답을 보낼 수 있습니다.

오류 캐치

경로 핸들러와 미들웨어를 실행하는 동안 발생하는 모든 오류를 Fiber가 캐치하도록 하는 것이 중요합니다. 오류를 핸들러 함수에 반환해야 합니다. 그러면 Fiber가 오류를 캐치하고 처리합니다.

app.Get("/", func(c *fiber.Ctx) error {
    // Fiber에 오류 전달
    return c.SendFile("file-does-not-exist")
})

Fiber는 기본적으로 을 처리하지 않습니다. 스택의 핸들러에 의해 발생한 panic에서 복구하려면 아래의 Recover 미들웨어를 포함해야 합니다:

package main

import (
    "log"

    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/recover"
)

func main() {
    app := fiber.New()

    app.Use(recover.New())

    app.Get("/", func(c *fiber.Ctx) error {
        panic("This panic is caught by fiber")
    })

    log.Fatal(app.Listen(":3000"))
}

fiber.NewError()를 사용하여 추가 status code를 전달하기 위해 Fiber의 사용자 정의 오류 struct를 사용할 수 있습니다. 메시지를 전달하는 것은 선택 사항입니다. 메시지를 비워두면 상태 코드 메시지(404는 Not Found와 같음)로 기본 설정됩니다.

app.Get("/", func(c *fiber.Ctx) error {
    // 503 Service Unavailable
    return fiber.ErrServiceUnavailable

    // 503 On vacation!
    return fiber.NewError(fiber.StatusServiceUnavailable, "On vacation!")
})

기본 오류 핸들러

// 기본 오류 핸들러
var DefaultErrorHandler = func(c *fiber.Ctx, err error) error {
    // 상태 코드는 기본적으로 500
    code := fiber.StatusInternalServerError

    // *fiber.Error인 경우 사용자 정의 상태 코드 검색
    var e *fiber.Error
    if errors.As(err, &e) {
        code = e.Code
    }

    // Content-Type: text/plain; charset=utf-8 설정
    c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)

    // 오류 메시지와 함께 상태 코드 반환
    return c.Status(code).SendString(err.Error())
}

사용자 정의 오류 핸들러

Fiber instance를 초기화할 때 Config를 사용하여 사용자 정의 오류 핸들러를 설정할 수 있습니다.

대부분의 경우 기본 오류 핸들러로 충분합니다. 그러나 사용자 정의 오류 핸들러는 다양한 유형의 오류를 캡처하고 그에 따라 조치를 취하려는 경우에 유용할 수 있습니다. 예를 들어, 알림 이메일을 보내거나 중앙 집중식 시스템에 오류를 기록할 수 있습니다. 또한 오류 페이지나 JSON 응답과 같은 사용자 정의된 응답을 클라이언트에 보낼 수 있습니다.

다음 예제는 다양한 유형의 오류에 대해 오류 페이지를 표시하는 방법을 보여줍니다.

// 사용자 정의 설정으로 새로운 fiber 인스턴스 생성
app := fiber.New(fiber.Config{
    // 기본 오류 핸들러 재정의
    ErrorHandler: func(ctx *fiber.Ctx, err error) error {
        // 상태 코드는 기본적으로 500
        code := fiber.StatusInternalServerError

        // *fiber.Error인 경우 사용자 정의 상태 코드 검색
        var e *fiber.Error
        if errors.As(err, &e) {
            code = e.Code
        }

        // 사용자 정의 오류 페이지 전송
        err = ctx.Status(code).SendFile(fmt.Sprintf("./%d.html", code))
        if err != nil {
            // SendFile이 실패한 경우
            return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
        }

        // 핸들러에서 반환
        return nil
    },
})

// ...

Fiber는 기본적으로 오류 핸들러를 제공합니다. 표준 오류의 경우 응답은 500 Internal Server Error로 전송됩니다. 오류가 유형인 경우 제공된 상태 코드와 메시지로 응답이 전송됩니다.

오류 처리에 대한 아이디어를 주신 및 프레임워크에 특별히 감사드립니다.

🏠
📁
🐛
panics
fiber.Error
Echo
Express