본문으로 바로가기

이번 글 목차


0. Gin 소개 & 선택한 이유

1. Gin Installation

2. Gin REST API Tutorial

 

0. Gin 소개 & 선택한 이유


0. Go Develop Roadmap in 2020

1) 관련 사이트 : https://github.com/Alikhll/golang-developer-roadmap

- 위 링크를 가보시면 Golang Developer라면 익혀야될 Step에 대해서 나열되어 있다.

- 'Web Frameworks + Routers', 'ORMs', 'Caching', 'Logging', 'Testing', 'RPC' 등의 큰 주제가 있습니다.

- 아직 Golang을 접한지 얼마 안되어 우선 Web Frameworks 중 Gin을 기반으로 Toy Project를 수행하여 익숙해지려 합니다

 

1. Gin Web Framework를 선택한 이유?

1) 관련 포스팅 : medium.com/devtechtoday/top-7-golang-web-frameworks-in-2020-and-beyond-9ca2a89eb904

- 첫 번째로는 Github내 24K로 Stars 수가 가장 많습니다. 개발을 진행함에 있어서 가장 중요한 것은 많이 사용하는 활성화된 오픈소스냐라는 점입니다. 이는 개발자의 숙명인 구글링을 할 때 엄청난 힘이 되기 때문이죠!

- 두 번째로는 속도가 빠른 편에 속합니다. 거의 Aero를 제외하고는 가장 높은 속도를 자랑합니다.

 

1. Gin Installation (Gin 설치)


0. 관련 사이트

1) 관련 사이트 : github.com/gin-gonic/gin

- Gin Web Framework의 공식 Github 주소로 해당 Readme 파일에 참고할만한 많은 내용이 있으니 참고해주세요.

- 이번 포스팅의 경우도 위 내용을 바탕으로 직접 정리하였습니다.

 

1. 설치 

※ 사전에 Go lang, Visual Studio Code는 설치되어 있다라는 가정하에 진행하도록 하겠습니다.

 

0) /src 하위에 gin을 테스트하기 위해 디렉토리를 하나 파준 뒤 main.go를 생성해줍니다.

 

1) Gin package를 먼저 설치해줍니다.

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

 

2) 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")
}

 

3) main.go 파일을 실행(run) 해준뒤 웹 브라우저에 'localhost:8080/ping'으로 들어가 본 뒤 결과값을 확인하시고 아래와 같다라면 성공하신 겁니다!

$ go run main.go

4) 기타

# 패키지에 대한 의존성 관리를 위해 module 실행
$ go mod init

# 아래 명령어를 수행하면 go.mod, go.sum이 생긴거를 보실 수 있습니다.
$ go get -u github.com/gin-gonic/gin

# makefile 생성 후 아래와 같이 작성해주면 됩니다.
dev :
	go run main.go
$ make dev (== go run main.go를 실행한 것과 같은 결과값이 나옵니다.)

 

2. Gin REST API Tutorial


0. 작성 예시 코드

1) 아래 코드를 보시면 기본적인 GET, POST Method와 Querystring, paramter값을 보냈을 때 받는 방법에 대해서 아실 수 있을 겁니다

package main

import (
	"fmt"
	"io/ioutil"
	"github.com/gin-gonic/gin"
)

// HomePage : GET, "/"
func HomePage(c *gin.Context) {
	c.JSON(200, gin.H{
		"message": "Hello World!",
	})
}

// PostHomePage : GET, "/"
func PostHomePage(c *gin.Context) {
	body := c.Request.Body
	value, err := ioutil.ReadAll(body)
	if err != nil {
		fmt.Println(err.Error())
	}

	c.JSON(200, gin.H{
		"message": string(value),
	})
}

// QueryStrings : GET, "/query"
func QueryStrings(c *gin.Context) {
	name := c.Query("name")
	age := c.Query("age")

	c.JSON(200, gin.H{
		"name": name,
		"age" : age,
	})
}

// PathParameters : GET, "/path"
func PathParameters(c *gin.Context) {
	name := c.Param("name")
	age := c.Param("age")

	c.JSON(200, gin.H{
		"name": name,
		"age" : age,
	})
}

func main() {
	r := gin.Default()
	r.GET("/", HomePage)
	r.POST("/", PostHomePage)
	r.GET("/query", QueryStrings) // /query?name=brenden&age=20
	r.GET("/path/:name/:age", PathParameters) // /path/brenden/20
	r.Run()
}

 

 


댓글을 달아 주세요