🤔FAQ


자주 묻는 질문 목록입니다. 이 페이지에 질문을 추가하려면 issue를 열어주세요.

어플리케이션 구조를 어떻게 만드는 게 좋을까요?

이 질문에 대한 확실한 답은 없습니다. 답변은 어플리케이션의 규모와 관련된 팀에 따라 다릅니다. 최대한 유연하기 위해 Fiber는 구조 측면에서 어떤 가정도 하지 않습니다.

Routes와 기타 어플리케이션 관련 로직은 원하는 만큼의 파일에 있을 수 있으며 원하는 디렉토리 구조로 구성할 수 있습니다. 다음 예제를 참고하세요:

사용자 정의 404 응답은 어떻게 처리하나요?

v2.32.0 이상을 사용하는 경우 사용자 정의 오류 핸들러를 구현하기만 하면 됩니다. 아래를 참조하거나 오류 처리에서 더 자세한 설명을 확인하세요.

v2.31.0 이하를 사용하는 경우 오류 핸들러는 404 오류를 캡처하지 않습니다. 대신 스택의 맨 아래(다른 모든 함수 아래)에 미들웨어 함수를 추가하여 404 응답을 처리해야 합니다:

app.Use(func(c *fiber.Ctx) error {
    return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!")
})

라이브 리로드는 어떻게 사용하나요?

Air는 소스 코드가 변경될 때마다 Go 애플리케이션을 자동으로 다시 시작하여 개발 프로세스를 더 빠르고 효율적으로 만드는 유용한 도구입니다.

Fiber 프로젝트에서 Air를 사용하려면 다음 단계를 따르세요:

  1. GitHub 릴리스 페이지에서 운영 체제에 적합한 바이너리를 다운로드하거나 소스에서 직접 빌드하여 Air를 설치합니다.

  2. 프로젝트 디렉토리에 Air용 구성 파일을 만듭니다. 이 파일의 이름은 예를 들어 .air.toml 또는 air.conf일 수 있습니다. 다음은 Fiber와 작동하는 샘플 구성 파일입니다:

# .air.toml 
root = "."
tmp_dir = "tmp"
[build]
  cmd = "go build -o ./tmp/main ."
  bin = "./tmp/main"
  delay = 1000 # ms
  exclude_dir = ["assets", "tmp", "vendor"]
  include_ext = ["go", "tpl", "tmpl", "html"]
  exclude_regex = ["_test\\.go"]  

3. 터미널에서 다음 명령을 실행하여 Air를 사용하여 Fiber 애플리케이션을 시작합니다:

air

소스 코드를 변경하면 Air가 이를 감지하고 자동으로 애플리케이션을 다시 시작합니다.

Fiber에서 Air의 사용법을 보여주는 전체 예제는 Fiber Recipes 저장소에서 찾을 수 있습니다. 이 예제는 효율적인 개발 환경을 만들기 위해 Fiber 프로젝트에서 Air를 구성하고 사용하는 방법을 보여줍니다.

오류 핸들러는 어떻게 설정하나요?

기본 오류 핸들러를 무시하려면 새 Fiber 인스턴스를 초기화할 때 Config를 제공할 때 기본값을 무시할 수 있습니다.

app := fiber.New(fiber.Config{
    ErrorHandler: func(c *fiber.Ctx, err error) error {
        return c.Status(fiber.StatusInternalServerError).SendString(err.Error())
    },
})

Fiber에서 오류 처리가 어떻게 작동하는지 설명하는 전용 페이지인 오류 처리를 참조하세요.

Fiber에서 지원하는 템플릿 엔진은 무엇인가요?

Fiber는 현재 gofiber/template 미들웨어에서 9개의 템플릿 엔진을 지원합니다:

Fiber에서 템플릿 사용에 대해 자세히 알아보려면 템플릿을 참조하세요.

Fiber에 커뮤니티 채팅방이 있나요?

네, 저희는 자체 Discord 서버가 있고, 거기에서 어울립니다. 주제별로 다른 채팅방이 있습니다. 질문이 있거나 그냥 채팅을 하고 싶으시면 > 초대 링크 **<**를 통해 자유롭게 참여해 주세요.

Fiber는 서브 도메인 라우팅을 지원하나요?

네, 지원합니다. 다음은 몇 가지 예시입니다: 이 예제는 v2에서 작동합니다.

package main

import (
	"log"

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

type Host struct {
	Fiber *fiber.App
}

func main() {
	// Hosts
	hosts := map[string]*Host{}

	//-----
	// API
	//-----
	api := fiber.New()
	api.Use(logger.New(logger.Config{
		Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
	}))
	hosts["api.localhost:3000"] = &Host{api}
	api.Get("/", func(c *fiber.Ctx) error {
		return c.SendString("API")
	})

	//------
	// Blog 
	//------
	blog := fiber.New()
	blog.Use(logger.New(logger.Config{
		Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
	}))
	hosts["blog.localhost:3000"] = &Host{blog}
	blog.Get("/", func(c *fiber.Ctx) error {
		return c.SendString("Blog")
	}) 

	//---------
	// Website
	//---------
	site := fiber.New()
	site.Use(logger.New(logger.Config{
		Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
	}))

	hosts["localhost:3000"] = &Host{site}
	site.Get("/", func(c *fiber.Ctx) error {
		return c.SendString("Website")
	})

	// Server
	app := fiber.New()
	app.Use(func(c *fiber.Ctx) error {
		host := hosts[c.Hostname()]
		if host == nil {
			return c.SendStatus(fiber.StatusNotFound)
		} else {
			host.Fiber.Handler()(c.Context())
			return nil 
		}
	})
	log.Fatal(app.Listen(":3000"))
}

더 많은 정보가 필요하다면 이 이슈 #750을 참조하세요.

Last updated