go fiber에 swagger를 붙여보자.

2024. 11. 27. 17:26·devops/go

Swagger는 API 문서화 도구로, API의 구조와 사용 방법을 사용자에게 시각적으로 보여주어 API 테스트 및 통합을 쉽게하게 해준다. 이 번 포스팅에서는 간단하게 Go Fiber와 Swagger를 어떻게 통합하여 API 문서를 자동으로 생성하고 제공하는지 알아보자.

 

코드는 https://github.com/ggorockee/camping-backend-with-go.git   여기에 있다.

 

GitHub - ggorockee/camping-backend-with-go

Contribute to ggorockee/camping-backend-with-go development by creating an account on GitHub.

github.com

 

당연한 얘기겠지만 설치부터 시작해야 한다.

$ go get -u github.com/swaggo/swag/cmd/swag
$ go get "github.com/gofiber/contrib/swagger"

 

package main

import (
	...
	"github.com/gofiber/contrib/swagger"
	"github.com/gofiber/fiber/v2"
)

func main() {
	...

	// swagger settings
	swaggerCfg := swagger.Config{
		BasePath: "/v1",
		FilePath: "./docs/swagger.yaml",
		Path:     "docs",
	}
	app.Use(swagger.New(swaggerCfg))

	...
}

 

다른 여러가지 방법이 있지만 나는 middleware를 이용해서 swagger를 붙이기로 했다. swagger인스턴스를 초기화하여 fiber app에 middleware를 이용해서 붙였다.

그리고 우리는 gorm을 사용하기 때문에 main.go가 있는 파일 위치에서

$ swag init --parseDependency

위 명령어를 실행해준다. 그리고 나면

이렇게 docs라는 폴더가 만들어지는데 이 파일을 참조하도록 main.go에서 세팅해준것이다.

그리고 나서

$go run main.go

로 실행한 후에

http://localhost:3000/v1/docs로 접속하면

이런 화면이 뜰 것이다. 이 화면이 보이면 swagger를 붙이는 거에는 성공한거다. 이제 우리의 라우터를 swagger에 등록해주자.

 

Swagger에서 Error와 Success에 적절한 응답을 보내기 위해서는 structure로 명시되어 있어야 하는데 우리가 만든 routes/user.go에는

func UserErrorResponse(err error) *fiber.Map {
	return &fiber.Map{
		"status": false,
		"data":   "",
		"error":  err.Error(),
	}
}

func UserSuccessResponse(data *entities.User) *fiber.Map {
	user := User{
		Id:       data.Id,
		Email:    data.Email,
		Username: data.Username,
	}
	return &fiber.Map{
		"status": true,
		"data":   user,
		"error":  nil,
	}
}

 

type이 아니고 func로 선언되어 있다. 이를 해결해주기 위해

이 부분을

type JsonResponse struct {
	Status bool   `json:"status"`
	Data   any    `json:"data"`
	Error  string `json:"error"`
}

func UserErrorResponse(err error) *JsonResponse {

	return &JsonResponse{
		Status: false,
		Data:   nil,
		Error:  err.Error(),
	}
}

func UserSuccessResponse(data *entities.User) *JsonResponse {
	user := User{
		Id:       data.Id,
		Email:    data.Email,
		Username: data.Username,
	}
	return &JsonResponse{
		Status: true,
		Data:   user,
		Error:  "",
	}
}

 

JsonResponse를 외부로 빼자. 앞으로 이 response는 계속 쓸것 같다. presenter/response.go 라는 파일을 만들어서 새로 작성했다.

이렇게 바꾸었다. 이러면 기존 동작에는 무리가 없고 swagger에는 JsonReponse를 이용해서 붙일 수가 있다.

 

이제 handlers/user_handler.go파일을 다음과 같이 추가하자.

// CreateUser is a function to create user data to database
// @Summary Create User
// @Description Create User
// @Tags Users
// @Accept json
// @Produce json
// @Param user body entities.User true "Register user"
// @Success 200 {object} presenter.JsonResponse{data=presenter.User}
// @Failure 503 {object} presenter.JsonResponse
// @Router /user [post]
func CreateUser(service user.Service) fiber.Handler {
	// Some Logic
}

 

이렇게 주석과 Tag형태로 swagger에 등록해주면 된다.

그리고

$ swag init --parseDependency
$ go run main.go

 

 

 

성공적으로 swagger에 등록한 것을 볼 수 있다. 만약 이 화면이 나오지 않으면 캐시를 지우고해보자. 그러면 나올 수도 있다. 나는 캐시가 안지웠어서 내가 잘못한줄 알았는데 캐시를 지우니까 되더라..

 

 

'devops > go' 카테고리의 다른 글

DB 우회  (0) 2024.11.29
swagger가 뭔가 좀 이상하다.  (0) 2024.11.27
Json Web Token  (0) 2024.11.26
Clean Architecture with go (Feat. fiber)  (1) 2024.11.25
API(Get List)  (0) 2024.11.24
'devops/go' 카테고리의 다른 글
  • DB 우회
  • swagger가 뭔가 좀 이상하다.
  • Json Web Token
  • Clean Architecture with go (Feat. fiber)
꼬락이
꼬락이
ggorockee 님의 블로그 입니다.
  • 꼬락이
    꼬락이의 개발일지
    꼬락이
  • 전체
    오늘
    어제
    • 분류 전체보기 (30)
      • devops (28)
        • aws (0)
        • minikube (18)
        • go (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    port-forwarding
    argoc
    ArgoCD
    Kubernetes
    k8s
    cert-manager
    helm
    쿠버네티스
    golang
    Github action
    GO
    Github
    DB 연결
    yq
    Teleport
    EC2
    CICD
    JWT
    CI
    Clean Architecture
    rds
    clean-archtiecture
    SWAGGER
    repository
    Gorm
    istio
    systemd
    db 우회
    aws
    Minikube
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
꼬락이
go fiber에 swagger를 붙여보자.
상단으로

티스토리툴바