본문 바로가기

golang

API server를 위한 go Gin 설치하고 사용하기 (예제)

GIN?

Gin is a web framework written in Go (Golang). It features a martini-like API with performance that is up to 40 times faster thanks to httprouter. If you need performance and good productivity, you will love Gin.
(GIN git)[https://github.com/gin-gonic/gin]

위 내용대로 _Gin은 Go로 작성된 웹 프레임웍_이다. httprouter 덕분에 40배나 빠른 퍼포먼스를 자랑한다고 한다.. (무슨말인지 ?)
이정도로만 알고 넘어가자..

Gin 설치

간단한 시험을 위해 우선 프로젝트 디렉토리를 하나 만들고 안에 src 폴더를 생성한다. (GOPATH를 프로젝트 디렉토리로 변경 필수!)
이후에 아래 명령어를 이용하여 Gin 프레임웍을 설치한다.

$ go get -u github.com/gin-gonic/gin

Gin 적용

Gin Repository에 다음과 같이 예제 프로그램이 이미 작성되어 있다. src 디렉토리 아래에 main.go 파일을 생성후 아래 코드를 작성하자.

package main

import "github.com/gin-gonic/gin"

func main() {  
  r := gin.Default()  
  r.GET("/ping", func(c *gin.Context) {  
    c.JSON(200, gin.H{  
      "message": "pong",  
    })  
  })  
  r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")  
}

위 프로그램 작성 후 실행하면 8080 port를 사용하는 간단한 서버가 동작하게 되며 http://localhost:8080/ping 접속하면 {"message":"pong"}응답을 확인할 수 있다.
r.Run(":3000") 과 같이 주소와 port를 변경할 수 있다.

Gin 활용

이번엔 간단한 사용을 넘어 조금 더 활용해보자

Method

GET, POST, PUT, DELTE, PATCH, HEAD, OPTIONS 와 같은 다양한 method를 지원한다.

router.GET("/someGet", getting)  
router.POST("/somePost", posting)  
router.PUT("/somePut", putting)  
router.DELETE("/someDelete", deleting)  
router.PATCH("/somePatch", patching)  
router.HEAD("/someHead", head)  
router.OPTIONS("/someOptions", options)  

parameters

r.GET(...)과 r.Run()사이에 아래 코드를 입력한다.

r.GET("/user/:name", func(c *gin.Context) {
    name := c.Param("name") 
    c.String(http.StatusOK, "Hello %s", name) 
    }) 
r.GET("/user/:name/*action", func(c *gin.Context) { 
    name := c.Param("name") 
    action := c.Param("action") 
    message := name + " is " + action c.String(http.StatusOK, message) 
    })

url path에 parameter를 입력받아 활용할 수 있다.
[http://localhost:8080/user/World] 로 접속하면 Hello World 라는 결과를 확인할 수 있으며,
[http://localhost:8080/user/World/send]로 접속하면 World is /send 라는 결과를 확인할 수 있다.

query

r.GET("/welcome", func(c \*gin.Context) {  
firstname := c.DefaultQuery("firstname", "Guest")  
lastname := c.Query("lastname") // shortcut for c.Request.URL.Query().Get("lastname")
    c.String(http.StatusOK, "Hello %s %s", firstname, lastname)
})

위 코드의 결과로 [http://localhost:8080/welcome?lastname=Jang]을 접속하면 Hello Guest Jang 이라는 결과를 확인할 수 있다.

api Group

다음과 같이 api 그룹을 생성하여 활용할 수 있다.

v1 := r.Group("/v1")  
{  
v1.GET("/health", health)  
}  
r.Run()  
}

func health(c \*gin.Context) {  
c.JSON(http.StatusOK, gin.H{  
"message": "ok",  
})  
}  

위와 같이 정의한 경우, [http://localhost:8080/v1/health]로 접근가능하다.
health function을 별도로 정의하여 구성한 화면이다.

다음 시간엔 swagger로 API에 대한 docs를 구현할 예정이다.

반응형