1
0
mirror of https://github.com/gofiber/fiber.git synced 2025-02-23 19:04:05 +00:00
fiber/.github/README_ko.md
2020-03-14 00:58:04 +09:00

17 KiB
Raw Blame History

Fiber


FiberExpress에서 영감을 받고, Go를 위한 가장 빠른 HTTP 엔진인 Fasthttp를 토대로 만들어진 웹 프레임워크 입니다. 비 메모리 할당성능을 고려한 빠른 개발을 위해 손쉽게 사용되도록 설계되었습니다.

빠른 시작

package main

import "github.com/gofiber/fiber"

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

  app.Get("/", func(c *fiber.Ctx) {
    c.Send("Hello, World!")
  })

  app.Listen(3000)
}

⚙️ 설치

우선, Go를 다운로드하고 설치합니다. 1.11 버전 이상이 요구됩니다.

go get 명령어를 이용해 설치가 완료됩니다:

go get -u github.com/gofiber/fiber/...

🤖 벤치마크

이 테스트들은 TechEmpowerGo Web을 통해 측정되었습니다. 만약 모든 결과를 보고 싶다면, Wiki를 확인해 주세요.

🎯 특징

💡 철학

Node.js에서 Go로 전환하는 새로운 고퍼분들은 웹 어플리케이션이나 마이크로 서비스 개발을 시작할 수 있게 되기 전에 학습 곡선에 시달리고 있습니다. Fiber는 웹 프레임워크로서, 새로운 고퍼분들이 따뜻하고 믿음직한 환영을 가지고 빠르게 Go의 세상에 진입할 수 있게 미니멀리즘의 개념과 UNIX 방식에 따라 개발되었습니다.

Fiber는 인터넷에서 가장 인기있는 웹 프레임워크인 Express에서 영감을 받았습니다. 우리는 Express의 쉬운 사용과 Go의 성능을 결합하였습니다. 만약 당신이 Node.js (Express 또는 비슷한 것을 사용하여) 로 웹 어플리케이션을 개발한 경험이 있다면, 많은 메소드들과 원리들이 매우 비슷하게 느껴질 것 입니다.

우리는 어떤한 작업, 마감일정, 개발자의 기술이던간에 빠르고, 유연하고, 익숙한 Go 웹 프레임워크를 만들기 위해 사용자들의 이슈들을(그리고 모든 인터넷을 통해) 듣고 있습니다! Express가 자바스크립트 세계에서 하는 것 처럼요.

👀 예제

다음은 일반적인 예제들 입니다.

더 많은 코드 예제를 보고 싶다면, Recipes 저장소 또는 API 문서를 방문하세요.

Routing

Docs:

Example:

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

  // GET /john
  app.Get("/:name", func(c *fiber.Ctx) {
    fmt.Printf("Hello %s!", c.Params("name"))
    // => Hello john!
  })

  // GET /john
  app.Get("/:name/:age?", func(c *fiber.Ctx) {
    fmt.Printf("Name: %s, Age: %s", c.Params("name"), c.Params("age"))
    // => Name: john, Age:
  })

  // GET /api/register
  app.Get("/api*", func(c *fiber.Ctx) {
    fmt.Printf("/api%s", c.Params("*"))
    // => /api/register
  })

  app.Listen(3000)
}

Serve static files

Docs:

Example:

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

  app.Static("/", "/public")
  // => http://localhost:3000/js/script.js
  // => http://localhost:3000/css/style.css

  app.Static("/prefix", "/public")
  // => http://localhost:3000/prefix/js/script.js
  // => http://localhost:3000/prefix/css/style.css

  app.Static("*", "/public/index.html")
  // => http://localhost:3000/any/path/shows/index/html

  app.Listen(3000)
}

Middleware & Next

Docs:

Example:

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

  // Match any route
  app.Use(func(c *fiber.Ctx) {
    fmt.Println("First middleware")
    c.Next()
  })

  // Match all routes starting with /api
  app.Use("/api", func(c *fiber.Ctx) {
    fmt.Println("Second middleware")
    c.Next()
  })

  // POST /api/register
  app.Post("/api/register", func(c *fiber.Ctx) {
    fmt.Println("Last middleware")
    c.Send("Hello, World!")
  })

  app.Listen(3000)
}
📚 Show more code examples

Template engines

Docs:

Supported engines:

Example:

func main() {
  // You can setup template engine before initiation app:
  app := fiber.New(&fiber.Settings{
    TemplateEngine:    "mustache",
    TemplateFolder:    "./views",
    TemplateExtension: ".tmpl",
  })

  // OR after initiation app at any convenient location:
  app.Settings.TemplateEngine = "mustache"
  app.Settings.TemplateFolder = "./views"
  app.Settings.TemplateExtension = ".tmpl"

  // And now, you can call template `./views/home.tmpl` like this:
  app.Get("/", func(c *fiber.Ctx) {
    c.Render("home", fiber.Map{
      "title": "Homepage",
      "year":  1999,
    })
  })

  // ...
}

Grouping routes into chains

Docs:

Example:

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

  // Root API route
  api := app.Group("/api", cors())  // /api

  // API v1 routes
  v1 := api.Group("/v1", mysql())   // /api/v1
  v1.Get("/list", handler)          // /api/v1/list
  v1.Get("/user", handler)          // /api/v1/user

  // API v2 routes
  v2 := api.Group("/v2", mongodb()) // /api/v2
  v2.Get("/list", handler)          // /api/v2/list
  v2.Get("/user", handler)          // /api/v2/user

  // ...
}

Middleware logger

Docs:

Example:

import (
    "github.com/gofiber/fiber"
    "github.com/gofiber/fiber/middleware"
)

func main() {
    app := fiber.New()
    
    // If you want to change default Logger config
    loggerConfig := middleware.LoggerConfig{
      Format:     "${time} - ${method} ${path}\n",
      TimeFormat: "Mon, 2 Jan 2006 15:04:05 MST",
    }

    // Middleware for Logger with config
    app.Use(middleware.Logger(loggerConfig))

    // ...
}

Cross-Origin Resource Sharing (CORS)

Docs:

CORS은 추가적인 HTTP 헤더를 이용해 브라우저들이 한 출처에서 실행되는 웹 어플리케이션에게 다른 출처의 선택된 자원으로의 접근을 주도록 말해줍니다. 웹 어플리케이션은 자체와 다른 출처에 속해있는 자원(도메인, 프로토콜, 또는 포트)을 요청할때 cross-origin HTTP 요청을 실행합니다.

Example:

import (
    "github.com/gofiber/fiber"
    "github.com/gofiber/fiber/middleware"
)

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

    // Connect CORS for each route as middleware
    app.Use(middleware.CORS())

    app.Get("/", func(c *fiber.Ctx) {
        c.Send("CORS is enabled!")
    })

    app.Listen(3000)
}

Origin 헤더에 아무 도메인이나 넣어서 CORS를 확인해보세요:

curl -H "Origin: http://example.com" --verbose http://localhost:3000

Custom 404 response

Docs:

Example:

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

  app.Static("/public")

  app.Get("/demo", func(c *fiber.Ctx) {
    c.Send("This is a demo!")
  })

  app.Post("/register", func(c *fiber.Ctx) {
    c.Send("Welcome!")
  })

  // Last middleware to match anything
  app.Use(func(c *fiber.Ctx) {
    c.SendStatus(404) // => 404 "Not Found"
  })

  app.Listen(3000)
}

JSON Response

Docs:

Example:

type User struct {
  Name string `json:"name"`
  Age  int    `json:"age"`
}

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

  app.Get("/user", func(c *fiber.Ctx) {
    c.JSON(&User{"John", 20})
    // {"name":"John", "age":20}
  })

  app.Get("/json", func(c *fiber.Ctx) {
    c.JSON(&fiber.Map{
			"success": true,
			"message": "Hi John!",
    })
    // {"success":true, "message":"Hi John!"}
  })

  app.Listen(3000)
}

WebSocket support

Docs:

Example:

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

  app.WebSocket("/ws", func(c *fiber.Conn) {
    for {
      mt, msg, err := c.ReadMessage()
      if err != nil {
        log.Println("read:", err)
        break
      }

      log.Printf("recovery: %s", msg)

      err = c.WriteMessage(mt, msg)
      if err != nil {
        log.Println("write:", err)
        break
      }
    }
  })

  // Listen on ws://localhost:3000/ws
  app.Listen(3000)
}

Recover middleware

Docs:

Example:

package main

import (
    "github.com/gofiber/fiber"
    "github.com/gofiber/fiber/middleware"
)

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

  app.Use(middleware.Recover(func(c *fiber.Ctx, err error) {
    log.Println(err)  // "Something went wrong!"
    c.SendStatus(500) // Internal Server Error
  })))
  
  app.Get("/", func(c *fiber.Ctx) {
    panic("Something went wrong!")
  })

  app.Listen(3000)
}

💬 미디어

👍 기여

Fiber의 활발한 개발을 지원하고 감사 인사를 하고 싶다면:

  1. 프로젝트에 GitHub Star를 추가하세요.
  2. 트위터에서 프로젝트에 대해 트윗하세요.
  3. Medium, Dev.to 또는 개인 블로그에 리뷰 또는 튜토리얼을 작성하세요.
  4. README를 다른 언어로 번역하는 것을 도와주세요.

Supporters

Buy Me A Coffee

HenrikBinggl

Vic Shóstak

MarvinJWendt

ToishY

JustDave

Stars

Stars over time

⚠️ 라이센스

FiberMIT License에 따른 무료 오픈소스 소프트웨어 입니다.