18 KiB
Fiber는 Express에서 영감을 받고, 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/...
🤖 벤치마크
이 테스트들은 TechEmpower와 Go Web을 통해 측정되었습니다. 만약 모든 결과를 보고 싶다면, Wiki를 확인해 주세요.
🎯 특징
- 견고한 라우팅
- 정적 파일 제공
- 뛰어난 성능
- 적은 메모리 공간
- API 엔드포인트
- 미들웨어 & Next 지원
- 빠른 서버 사이드 프로그래밍
- Template engines
- WebSocket support
- Rate Limiter
- Available in 10 languages
- 더 알고 싶다면, Fiber 둘러보기
💡 철학
Node.js에서 Go로 전환하는 새로운 고퍼분들은 웹 어플리케이션이나 마이크로 서비스 개발을 시작할 수 있게 되기 전에 학습 곡선에 시달리고 있습니다. Fiber는 웹 프레임워크로서, 새로운 고퍼분들이 따뜻하고 믿음직한 환영을 가지고 빠르게 Go의 세상에 진입할 수 있게 미니멀리즘의 개념과 UNIX 방식에 따라 개발되었습니다.
Fiber는 인터넷에서 가장 인기있는 웹 프레임워크인 Express에서 영감을 받았습니다. 우리는 Express의 쉬운 사용과 Go의 성능을 결합하였습니다. 만약 당신이 Node.js (Express 또는 비슷한 것을 사용하여) 로 웹 어플리케이션을 개발한 경험이 있다면, 많은 메소드들과 원리들이 매우 비슷하게 느껴질 것 입니다.
우리는 어떤한 작업, 마감일정, 개발자의 기술이던간에 빠르고, 유연하고, 익숙한 Go 웹 프레임워크를 만들기 위해 사용자들의 이슈들을(그리고 모든 인터넷을 통해) 듣고 있습니다! Express가 자바스크립트 세계에서 하는 것 처럼요.
👀 예제
다음은 일반적인 예제들 입니다.
더 많은 코드 예제를 보고 싶다면, Recipes 저장소 또는 API 문서를 방문하세요.
Routing
📖 https://fiber.wiki/#basic-routing
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
📖 https://fiber.wiki/application#static
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
📖 https://fiber.wiki/routing#middleware
📖 https://fiber.wiki/context#next
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()
})
// GET /api/register
app.Get("/api/list", func(c *fiber.Ctx) {
fmt.Println("Last middleware")
c.Send("Hello, World!")
})
app.Listen(3000)
}
📚 Show more code examples
Template engines
📖 https://fiber.wiki/application#settings
📖 https://fiber.wiki/context#render
📖 https://fiber.wiki/middleware#template
Fiber supports the default Go template engine
But if you want to use another template engine like amber, handlebars, mustache or pug.
You can use our Template Middleware.
package main
import (
"github.com/gofiber/fiber"
"github.com/gofiber/template"
)
func main() {
// You can setup template engine before initiation app:
app := fiber.New(&fiber.Settings{
TemplateEngine: template.Mustache(),
TemplateFolder: "./views",
TemplateExtension: ".tmpl",
})
// OR after initiation app at any convenient location:
app.Settings.TemplateEngine = template.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
📖 https://fiber.wiki/application#group
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
📖 https://fiber.wiki/middleware#logger
import (
"github.com/gofiber/fiber"
"github.com/gofiber/logger"
)
func main() {
app := fiber.New()
// Optional logger config
config := logger.LoggerConfig{
Format: "${time} - ${method} ${path}\n",
TimeFormat: "Mon, 2 Jan 2006 15:04:05 MST",
}
// Logger with config
app.Use(logger.New(config))
app.Listen(3000)
}
Cross-Origin Resource Sharing (CORS)
📖 https://fiber.wiki/middleware#cors
import (
"github.com/gofiber/fiber"
"github.com/gofiber/cors"
)
func main() {
app := fiber.New()
// CORS with default config
app.Use(cors.New())
app.Listen(3000)
}
Check CORS by passing any domain in Origin
header:
curl -H "Origin: http://example.com" --verbose http://localhost:3000
Custom 404 response
📖 https://fiber.wiki/application#http-methods
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
📖 https://fiber.wiki/context#json
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 Upgrade
📖 https://fiber.wiki/middleware#websocket
import (
"github.com/gofiber/fiber"
"github.com/gofiber/websocket"
)
func main() {
app := fiber.New()
app.Get("/ws", websocket.New(func(c *websocket.Conn) {
for {
mt, msg, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
break
}
log.Printf("recv: %s", msg)
err = c.WriteMessage(mt, msg)
if err != nil {
log.Println("write:", err)
break
}
}
}))
app.Listen(3000)
// ws://localhost:3000/ws
}
Recover middleware
📖 https://fiber.wiki/middleware#recover
import (
"github.com/gofiber/fiber"
"github.com/gofiber/recover"
)
func main() {
app := fiber.New()
// Optional recover config
config := recover.LoggerConfig{
Handler: func(c *fiber.Ctx, err error) {
c.SendString(err.Error())
c.SendStatus(500)
},
}
// Logger with custom config
app.Use(recover.New(config))
app.Listen(3000)
}
💬 미디어
- Welcome to Fiber — an Express.js styled web framework written in Go with ❤️ by Vic Shóstak, 03 Feb 2020
- Fiber release v1.7 is out now! 🎉 What's new and is he still fast, flexible and friendly? (by Vic Shóstak, 21 Feb 2020)
- 🚀 Fiber v1.8. What's new, updated and re-thinked? (by Vic Shóstak, 03 Mar 2020)
👍 기여
Fiber
의 활발한 개발을 지원하고 감사 인사를 하고 싶다면:
- 프로젝트에 GitHub Star를 추가하세요.
- 트위터에서 프로젝트에 대해 트윗하세요.
- Medium, Dev.to 또는 개인 블로그에 리뷰 또는 튜토리얼을 작성하세요.
- 이
README
를 다른 언어로 번역하는 것을 도와주세요.
☕ Coffee Supporters
melkorm |
ekaputra07 |
HenrikBinggl |
Vic Shóstak |
MarvinJWendt |
ToishY |
![]() JustDave |

⭐️ Stars
⚠️ 라이센스
Fiber
is free and open-source software licensed under the MIT License Copyright (c) 2019-present Fenny and Fiber Contributors. Official logo was created by Vic Shóstak and distributed under Creative Commons license (CC BY-SA 4.0 International).