fiber (1/3) : 시작하기

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 을 호출해봅니다. 역시 잘 될 것입니다.