👋Welcome


Fiber

Express 로 부터 영감을 받아 Go 를 위해 만들어진 웹 프레임워크 Fiber 를 위한 예제가 포함된 온라인 API 문서입니다. 이를 통해 바로 Fiber 로 웹 앱 개발을 시작할 수 있습니다!

FiberGo를 위한 가장 빠른 HTTP 엔진인 Fasthttp 위에 구축된 Express로부터 영감을 받은 웹 프레임워크입니다. 빠른 개발을 쉽게 하기 위해 설계되었으며 제로 메모리 할당성능을 염두에 두고 있습니다.

이 문서는 2024년 3월 XX일에 출시된 Fiber v3를 위한 것입니다.

Installation

먼저, Go 를 다운로드하고 설치하세요. 1.21 이상이 필요합니다.

설치는 go get 명령어를 사용합니다:

go get github.com/gofiber/fiber/v3

Zero Allocation

fiber.Ctx에서 반환되는 일부 값은 기본적으로 변경 불가능하지 않습니다.

fiber 는 고성능을 위해 최적화되어 있기 때문에 fiber.Ctx에서 반환되는 값은 기본적으로 변경 불가능하지 않으며 요청 간에 재사용됩니다. 경험에 의하면, 컨텍스트 값은 핸들러 내에서만 사용해야 하며 참조를 보관하면 안 됩니다. 핸들러에서 반환하는 즉시 컨텍스트에서 얻은 모든 값은 향후 요청에서 재사용되며 발 아래에서 변경됩니다. 다음은 예제입니다:

func handler(c fiber.Ctx) error {
    // 변수는 이 핸들러 내에서만 유효합니다
    result := c.Params("foo") 

    // ...
}

핸들러 외부에서 해당 값을 유지해야 하는 경우 copy 내장 함수를 사용하여 기본 버퍼의 복사본을 만드세요. 다음은 문자열을 유지하는 예제입니다:

func handler(c fiber.Ctx) error {
    // 변수는 이 핸들러 내에서만 유효합니다 
    result := c.Params("foo")

    // 복사본 만들기
    buffer := make([]byte, len(result))
    copy(buffer, result)
    resultCopy := string(buffer)
    // 이제 변수는 영원히 유효합니다

    // ...
}

우리는 위의 작업을 수행하고 gofiber/utils에서 사용할 수 있는 사용자 정의 CopyString 함수를 만들었습니다.

app.Get("/:foo", func(c fiber.Ctx) error {
	// 변수는 이제 불변입니다
	result := utils.CopyString(c.Params("foo"))

	// ...
})

또는 Immutable 설정을 사용할 수도 있습니다. 이렇게 하면 컨텍스트에서 반환된 모든 값이 변경 불가능해지므로 어디에서나 유지할 수 있습니다. 물론 이는 성능을 희생하는 대가로 얻어집니다.

app := fiber.New(fiber.Config{
	Immutable: true,  
})

자세한 내용은 #426#185를 확인하세요.

Hello, World!

아래 내장된 코드는 기본적으로 만들 수 있는 가장 간단한 Fiber 앱입니다:

package main

import "github.com/gofiber/fiber/v3"

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

	app.Get("/", func(c fiber.Ctx) error {
		return c.SendString("Hello, World!")
	})

	app.Listen(":3000")  
}
go run server.go

http://localhost:3000으로 이동하면 페이지에 Hello, World!가 표시되어야 합니다.

Default Routing

라우팅은 특정 HTTP 요청 메서드(GET, PUT, POST 등)와 URI(또는 경로)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 말합니다.

각 라우트에는 경로가 일치할 때 실행되는 여러 핸들러 함수가 있을 수 있습니다.

라우트 정의는 다음과 같은 구조를 사용합니다:

// Function signature
app.Method(path string, ...func(fiber.Ctx) error)  
  • appFiber의 인스턴스입니다

  • MethodHTTP 요청 메서드입니다: GET, PUT, POST

  • path는 서버의 가상 경로입니다

  • func(fiber.Ctx) error는 경로가 일치할 때 실행되는 Context를 포함하는 콜백 함수입니다

Simple Route

// 루트 경로 "/"에서 "Hello, World!"로 응답
app.Get("/", func(c fiber.Ctx) error {
	return c.SendString("Hello, World!") 
})

매개변수

// GET http://localhost:8080/hello%20world

app.Get("/:value", func(c fiber.Ctx) error {
	return c.SendString("value: " + c.Params("value"))
	// => Get request with value: hello world  
})

선택적 매개변수

// GET http://localhost:3000/john

app.Get("/:name?", func(c fiber.Ctx) error {
	if c.Params("name") != "" {
		return c.SendString("Hello " + c.Params("name")) 
		// => Hello john
	}
	return c.SendString("Where is john?")
})  

Wild card

// GET http://localhost:3000/api/user/john

app.Get("/api/*", func(c fiber.Ctx) error {
	return c.SendString("API path: " + c.Params("*"))
	// => API path: user/john
})

Static File

이미지, CSSJavaScript 파일과 같은 정적 파일을 제공하려면 함수 핸들러를 파일 또는 디렉터리 문자열로 바꾸세요.

함수 시그니처:

app.Static(prefix, root string, config ...Static)

./public 디렉터리에 있는 파일을 제공하려면 다음 코드를 사용하세요:

app := fiber.New()

app.Static("/", "./public")

app.Listen(":3000")  

이제 ./public 디렉터리에 있는 파일을 로드할 수 있습니다:

http://localhost:3000/hello.html
http://localhost:3000/js/jquery.js  
http://localhost:3000/css/style.css

참고

Fiber 로 Go 에서 API 를 구축하는 방법에 대한 자세한 내용은 Fiber로 Go에서 Express 스타일 API 구축하기에 관한 이 훌륭한 문서를 확인하세요.

Last updated