Go언어에서 가장 유명한 프레임워크 Gin 과 Fiber 가 있습니다. 이 중에서 좀 더 빠르다고 소문이 난 fiber 를 알아보겠습니다. Fiber의 홈페이지는 https://gofiber.io/ 입니다.
먼저 프로젝트에 사용할 폴더를 만들고, 초기화를 진행합니다.
> mkdir c:\s\fapi
> cd c:\s\fapi
> go mod init fapi
go: creating new go.mod: module fapi
>
main.go 파일을 아래와 같이 작성해봅니다.
package main
import (
"log"
"github.com/gofiber/fiber/v2"
)
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.JSON(&fiber.Map{"hello": "world"})
})
log.Fatal(app.Listen("0.0.0.0:3000"))
}
C:\s\fapi>go mod tidy
go: finding module for package github.com/gofiber/fiber/v2
go: downloading github.com/gofiber/fiber/v2 v2.52.6
go: downloading github.com/gofiber/fiber v1.14.6
go: found github.com/gofiber/fiber/v2 in github.com/gofiber/fiber/v2 v2.52.6
go: downloading github.com/google/uuid v1.6.0
go: downloading github.com/mattn/go-colorable v0.1.13
go: downloading github.com/mattn/go-isatty v0.0.20
go: downloading github.com/mattn/go-runewidth v0.0.16
go: downloading github.com/valyala/bytebufferpool v1.0.0
go: downloading github.com/valyala/fasthttp v1.51.0
go: downloading golang.org/x/sys v0.28.0
go: downloading github.com/rivo/uniseg v0.2.0
go: downloading github.com/andybalholm/brotli v1.1.0
go: downloading github.com/klauspost/compress v1.17.9
go: downloading github.com/valyala/tcplisten v1.0.0
C:\s\fapi>
C:\s\fapi>go run main.go
┌───────────────────────────────────────────────────┐
│ Fiber v2.52.6 │
│ http://127.0.0.1:3000 │
│ (bound on host 0.0.0.0 and port 3000) │
│ │
│ Handlers ............. 2 Processes ........... 1 │
│ Prefork ....... Disabled PID ............. 14048 │
└───────────────────────────────────────────────────┘
웹브라우저에서 http://localhost:3000 으로 접속해보세요.
이번에는 포트정보를 .env 파일에 넣고, 불러와서 사용하도록 해보자. 먼저, .env 파일을 생성해서 아래와 같이 추가해준다.
PORT=8000
main.go 를 다음과 같이 수정해준다.
package main
import (
"log"
"os"
"github.com/gofiber/fiber/v2"
"github.com/joho/godotenv"
)
func main() {
// .env 파일 로드
if err := godotenv.Load(); err != nil {
log.Fatalf("Error loading .env file: %v", err)
}
// 환경 변수에서 포트 가져오기
port := os.Getenv("PORT")
if port == "" {
log.Fatal("PORT is not set in the .env file")
}
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.JSON(&fiber.Map{"hello": "world"})
})
log.Fatal(app.Listen("0.0.0.0:" + port))
}
go mod tidy 를 실행해서 godotenv 모듈을 설치해주고, go run main.go 로 개발서버를 실행해준다.
이번에는 http://localhost:8000 으로 접속해보자.
여기에서 API를 여러개 추가해보겠습니다. API가 늘어날수록 핸들러도 늘어나겠지요
package main
import (
"log"
"os"
"github.com/gofiber/fiber/v2"
"github.com/joho/godotenv"
)
func main() {
// .env 파일 로드
if err := godotenv.Load(); err != nil {
log.Fatalf("Error loading .env file: %v", err)
}
// 환경 변수에서 포트 가져오기
port := os.Getenv("PORT")
if port == "" {
log.Fatal("PORT is not set in the .env file")
}
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.JSON(&fiber.Map{"hello": "world"})
})
app.Get("/svc1/req1", func(c *fiber.Ctx) error {
return c.JSON(&fiber.Map{"SVC1": "REQ1"})
})
app.Get("/svc1/req2", func(c *fiber.Ctx) error {
return c.JSON(&fiber.Map{"SVC1": "REQ2"})
})
app.Get("/svc2/req1", func(c *fiber.Ctx) error {
return c.JSON(&fiber.Map{"SVC2": "REQ1"})
})
app.Get("/svc2/req2", func(c *fiber.Ctx) error {
return c.JSON(&fiber.Map{"SVC2": "REQ2"})
})
log.Fatal(app.Listen("0.0.0.0:" + port))
}
그리고, 다시 go run main.go 를 실행하고, 웹브라우저에서 http://localhost:8000/svc1/req1 을 호출해봅니다. 역시 잘 될 것입니다.